ElasticSearch 地理定位搜索----Geo-shape / geo_shape 的使用方法

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

地理位置拾取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": 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值