【开源社区】使用 ES 实现多种地理位置检索
文章目录
- 1、地理位置检索常用的两种数据类型
- 1.1 geo_point:
- 1.2 geo_shape
- 2、Geo_point Based Request
- 2.1 矩形查询(geo_bounding box)
- 2.2 半径查询(geo_distance)
- 2.3 多边形(geo_polygon)
- 3、Geo_shape Based Request
- 3.1 地理几何分类(geo_shape type)
- 3.2 地理几何存储
- 3.3 地理几何检索
1、地理位置检索常用的两种数据类型
1.1 geo_point:
概念:经纬度坐标,只支持WGS84坐标系,坐标范围Lat值为[-90,90],Lon为[-180,180]
- latitude:维度 缩写:lat
- longitude:经度 缩写:lon
- ignore_malformed:则忽略格式错误的地理位置。如果
false
(默认)
五种存储方式
1.2 geo_shape
概念:ES的特殊类型之一,用来描述复杂的几何图形的类型,比如点、线、面,多边形等二维几何模型。
- GeoJSON:GeoJSON是一种用于编码各种地理数据结构的格式,支持以下几种几何类型:
- Point:点
- LineString:线段
- Polygon:多边形
- MultiPoint:多点
- MultiLineString:多线段
- MultiPolygon:多边形集合
- Feature:具有其他属性的对象
- WKT(Well-Known Text):POINT(125.6 10.1)
GeoJSON(OGC)和WKT到Elasticsearch类型的映射关系
GeoJSON类型 | WKT类型 | Elasticsearch类型 | 描述 |
---|---|---|---|
Point | POINT | point | 单个地理坐标。注意:Elasticsearch仅使用WGS-84坐标。 |
LineString | LINESTRING | linestring | 给定两个或两个以上点的任意线。 |
Polygon | POLYGON | polygon | 一个封闭的多边形,其第一个点和最后一个点必须匹配,因此需要n + 1顶点创建一个带n边的多边形和一个最小的4顶点。 |
MultiPoint | MULTIPOINT | multipoint | 一组未连接但可能相关的点。 |
MultiLineString | MULTILINESTRING | multilinestring | 单独的线串数组。 |
MultiPolygon | MULTIPOLYGON | multipolygon | 一组单独的多边形。 |
GeometryCollection | GEOMETRYCOLLECTION | geometrycollection | 与JSON形状相似的GeoJSON形状, multi*但可以同时存在多种类型(例如,Point和LineString)。 |
N/A | BBOX | envelope | 通过仅指定左上和右下点指定的边界矩形。 |
N/A | N/A | circle | 由中心点和半径指定的圆,单位为,默认为METERS。 |
2、Geo_point Based Request
2.1 矩形查询(geo_bounding box)
概念:在同一个平面内,两个点确定一个矩形,搜索矩形内的坐标。
- top_left:矩形左上点坐标
- bottom_right:矩形右上角表
2.2 半径查询(geo_distance)
概念:以某个点为圆心查找指定半径的圆内的坐标。
- distance:距离单位,默认是米,支持以下选项
- Mile(英里):mi 或者 miles
- Yard(码):yd 或者 yards
- Feet(英尺):ft 或者 feet
- Inch(英寸):
in
或者 inch - Kilometer(公里):
km
或者 kilometers - Meter(米):m 或者 meters
- Centimeter(厘米):
cm
或者 centimeters - Millimeter(毫米): mm 或者 millimeters
- Nautical mile(海里): NM , nmi , 或者 nauticalmiles
- distance_type:计算距离的方式
- arc(默认值):更准确,但是速度慢
- plane:(更快,但在长距离和极点附近不准确)
2.3 多边形(geo_polygon)
概念:查找给定多个点连成的多边形内的坐标。
3、Geo_shape Based Request
概念:支持指定几何图形相交、包含或是不相交等图形检索
3.1 地理几何分类(geo_shape type)
- 点(point)
- 矩形(envelope)
- 多边形 (polygon)
- 圆形(circle)
3.2 地理几何存储
注:圆形处理精度解释
表示圆的多边形的精度定义为error_distance。这种差异越小,多边形越接近理想圆。下表是旨在帮助捕获在给定不同输入的情况下圆的半径如何影响多边形的边数的表格。最小边数为4,最大为1000。
error_distance | 半径(米) | 多边形的边数 |
---|---|---|
1 | 1 | 4 |
1 | 10 | 14 |
1 | 100 | 45 |
1 | 1,000 | 141 |
1 | 10,000 | 445 |
1 | 100,000 | 1000 |
3.3 地理几何检索
- Inline Shape Definition:内联形状
- Pre-Indexed Shape:预定义形状
id
- 包含预索引形状的文档ID。index
- 索引的名称,其中预索引形状为:默认形状。- routing- 非必须。
path
- 包含预索引形状的指定路径,默认形状。
- Spatial Relations:空间关系
- INTERSECTS- (default) Return all documents whose
shape
field intersects the query geometry。 - DISJOINT - Return all documents whose
shape
field has nothing in common with the query geometry - WITHIN - Return all documents whose
shape
field is within the query geometry。 - CONTAINS- Return all documents whose
shape
field contains the query geometry。
- INTERSECTS- (default) Return all documents whose