我们看到的图形, 实际是由点来完成的,
有2种类型的格子模型可用于地理星座, 默认使用的是geoHash, 还有一种4叉树(quad trees), 也可用于
判断形状与索引的形状关系
1), intersects: 查询的形状与索引形状有重叠(默认)
2), disjoint: 查询的形状与索引的ixngzhuang完全不重叠
3), within: 索引的形状被包含在查询中
建立mapping时, 需要明确映射:
PUT /attractions
{
"mappings": {
"landmark": {
"properties": {
"name": {
"type": "string"
},
"location": {
"type": "geo_shape"
}
}
}
}
}
数据存储:
每个形状包含2个信息: 形状类型: point, line, polygon, envelop, 或者 一个或多经纬度点集合的数组
比如:
PUT /attractions/landmark/dam_square
{
"name" : "Dam Square, Amsterdam",
"location" : {
"type" : "polygon", <>
"coordinates" : [[ <>
[ 4.89218, 52.37356 ],
[ 4.89205, 52.37276 ],
[ 4.89301, 52.37274 ],
[ 4.89392, 52.37250 ],
[ 4.89431, 52.37287 ],
[ 4.89331, 52.37346 ],
[ 4.89305, 52.37326 ],
[ 4.89218, 52.37356 ]
]] // lon, lat
}
}
- <1>
type
参数指明如何使用经纬度坐标集来表示对应形状。 - <2> 用来表示多边形的经纬度坐标点列表。
查询形状:
GET /attractions/landmark/_search
{
"query": {
"geo_shape": {
"location": { // 使用的字段
"shape": { // shape见对应的内容表示
"type": "circle", // 为1km的圆
"radius": "1km"
"coordinates": [ // 中心点
4.89994,
52.37815
]
}
}
}
}
}
以上摘自: https://es.xiaoleilu.com/340_Geoshapes/78_Indexed_geo_shapes.html, 未亲自测试
接下来是java API的方法