ES地理位置搜索
1. 两种数据类型:geo_point和geo_shape:地理位置类型,经纬度坐标
a) geo_point:经纬度坐标,只支持WGS84坐标系,坐标范围Lat值为[-90,90],Lon为[-180,180]
i. latitude:维度 缩写:lat
ii. longitude:经度 缩写:lon
iii. ignore_malformed:则忽略格式错误的地理位置。如果false(默认)
iv. 五种存储方式,见代码
b) geo_shape:ES的特殊类型之一,用来描述复杂的几何图形的类型,比如点、线、面,多边形等二维几何模型。
i. GeoJSON:GeoJSON是一种用于编码各种地理数据结构的格式,支持以下几种几何类型:
1. Point:点
2. LineString:线段
3. Polygon:多边形
4. MultiPoint:多点
5. MultiLineString:多线段
6. MultiPolygon:多边形集合
7. Feature:具有其他属性的对象
ii. 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. 四种查询:
a) geo_bounding box query(矩形查询):在同一个平面内,两个点确定一个矩形,搜索矩形内的坐标。
i. top_left:矩形左上点坐标
ii. bottom_right:矩形右上角表
b) geo_distance query(半径查询):以某个点为圆心查找指定半径的圆内的坐标。
i. distance:距离单位,默认是米,支持以下选项
1. Mile(英里):mi 或者 miles
2. Yard(码):yd 或者yards
3. Feet(英尺):ft 或者feet
4. Inch(英寸):in 或者inch
5. Kilometer(公里):km 或者kilometers
6. Meter(米):m后者meters
7. Centimeter(厘米):cm 或者centimeters
8. Millimeter(毫米):mm 或者millimeters
9. Nautical mile(海里):NM, nmi, 或者nauticalmiles
ii. distance_type:计算距离的方式
1. arc(默认值):更准确,但是速度慢
2. plane:(更快,但在长距离和极点附近不准确)
c) geo_polygon query(多边形):查找给定多个点连成的多边形内的坐标。
d) geo_shape query(特殊几何形状):支持指定几何图形相交、包含或是不相交等图形检索
i. Inline Shape Definition:内联形状
ii. Pre-Indexed Shape:预定义形状
1. id- 包含预索引形状的文档ID。
2. index- 索引的名称,其中预索引形状为:默认形状。
3. routing- 非必须。
4. path- 包含预索引形状的指定路径,默认形状。
iii. Spatial Relations(空间关系)
1. INTERSECTS- (default) Return all documents whose shape field intersects the query geometry。
2. DISJOINT- Return all documents whose shape field has nothing in common with the query geometry
3. WITHIN- Return all documents whose shape field is within the query geometry。
4. CONTAINS- Return all documents whose shape field contains the query geometry。
3. geo_shape type(地理形状):
a) 点(point)
b) 矩形(envelope)
c) 多边形 (polygon)
d) 圆形(circle)
附:圆形处理精度解释:
表示圆的多边形的精度定义为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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构