文章目录
地理位置拾取http://api.map.baidu.com/lbsapi/getpoint/index.html
geo_shape Mapping
orientation
(可选)定义如何解释多边形顶点顺序。
要设置RIGHT:
- right
- counterclockwise
- ccw
要设置LEFT:
- left
- clockwise
- cw
strategy
- term:策略只支持点类型(points_only参数将自动设置为true),
- recursive:策略支持所有形状类型。(圆形必须设置)
recursive
用于查询时与定位标识的策略
- INTERSECTS 相交
- DISJOINT 不相交
- WITHIN 内
- CONTAINS 包含
type (形状)
| GeoJSON Type | WKT Type | Elasticsearch Type | Description |
|---|---|---|---|
| Point | POINT | point | 单一的地理坐标 |
| LineString | LINESTRING | linestring | 给定两个或多个点的任意直线。 |
| Polygon | POLYGON | polygon | 一个封闭的多边形,其第一个点和最后一个点必须匹配,最少4个顶点。 |
| MultiPoint | MULTIPOINT | multipoint | 一组不相连但可能相关的点。 |
| MultiLineString | MULTILINESTRING | multilinestring | 由独立行字符串组成的数组。 |
| MultiPolygon | MULTIPOLYGON | multipolygon | 一组独立的多边形。 |
| GeometryCollection | GEOMETRYCOLLECTION | geometrycollection | 一个与multi*形状相似的GeoJSON形状,除了多个类型可以共存(例如,一个Point和一个LineString)。 |
| N/A | BBOX | envelope | 通过仅指定左上角和右下角点来指定的边界矩形(或包络线)。 |
| N/A | N/A | circle | 以圆心和半径为单位指定的圆,默认为米。 |
geo_shape Query
envelope 矩形搜索
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates": [ [ 左上角经,纬], [ 右下角经,纬 ] ]
},
"relation": "范围策略"
}
}
relation:
INTERSECTS -(默认)查询几何图形相交的文档。
DISJOINT -查询几何体没有任何共同之处的文档。
WITHIN -查询几何中的文档。不支持直线几何图形。
CONTAINS -查询几何图形的所有文档。
circle 圆形
"geo_shape": {
"location": {
"shape": {
"type": "circle",
"coordinates": [116.40026,39.911401] ,
"radius":"半径 m km"
},
"relation": "intersects"
}
}
}
自定义图形
案例
http://api.map.baidu.com/lbsapi/getpoint/index.html
可以查地图点的位置 》》》也可以反查》》》》
Point 点
查询
插入了2中方式,取出的数据格式也是不同的
POST /example/_doc
{
"name": "天安门",
"class":"景点",
"location": {
"type": "point",
"coordinates": [ 116.404073,39.915185 ]
}
}
POST /example/_doc
{
"name": "英雄纪念碑",
"class":"景点",
"location" : "POINT (116.404037 39.910868)"
}
GET /example/_search
{
"query": {
"bool": {
"must": {
"match_all": {
}
},
"filter": {
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates": [ [116.401646,39.915661], [116.405796,39.912119] ]
},
"relation": "WITHIN"
}
}
}
}
}
}
扩大范围>>>>>>>
[ [116.401646,39.915661], [116.406586,39.908993] ]

linestring 线
蓝色是数据线》》》红色是搜索范围

POST /example/_doc
{
"name": "天安门西到天安门东地铁线",
"class":"景点",
"location": {
"type": "linestring",
"coordinates": [[116.398009,39.913798],[116.407855,39.914075]]
}
}
POST /example/_doc
{
"name": "天安门西到天安门东地铁线",
"class":"景点",
"location" : "LINESTRING (116.398009 39.913798, 116.407855 39.914075)"
}
intersects 可查 WITHIN 无
GET /example/_search
{
"query": {
"bool": {
"must": {
"match_all": {
}
},
"filter": {
"geo_shape": {
"location": {
"shape": {
"type": "envelope",
"coordinates": [ [116.40392,39.915237], [116.410567,39.91283] ]
},
"relation": "intersects" //相交
}
}
}
}
}
}

Polygon
多边形
首尾必须相同,也就是闭合的,顺时针的点(左上,右上,右下,左下)

注意哦 这恶心到人的嵌套
POLYGON ((经 空格 纬,经 纬,经 纬))
POST /example/_doc
{
"name":

本文详细介绍了Elasticsearch中geo_shape类型的映射、查询策略和各种形状(如点、线、多边形等)的使用方法,包括矩形搜索、圆形查询以及自定义图形案例。通过实例展示了如何进行地理位置查询,帮助理解如何利用Elasticsearch进行复杂的空间数据操作。

最低0.47元/天 解锁文章
3464

被折叠的 条评论
为什么被折叠?



