【开源社区】使用 ES 实现多种地理位置检索

文章目录

  • 1、地理位置检索常用的两种数据类型
    • [1.1 geo_point:](#1.1 geo_point:)
    • [1.2 geo_shape](#1.2 geo_shape)
  • [2、Geo_point Based Request](#2、Geo_point Based Request)
    • [2.1 矩形查询(geo_bounding box)](#2.1 矩形查询(geo_bounding box))
    • [2.2 半径查询(geo_distance)](#2.2 半径查询(geo_distance))
    • [2.3 多边形(geo_polygon)](#2.3 多边形(geo_polygon))
  • [3、Geo_shape Based Request](#3、Geo_shape Based Request)
    • [3.1 地理几何分类(geo_shape type)](#3.1 地理几何分类(geo_shape type))
    • [3.2 地理几何存储](#3.2 地理几何存储)
    • [3.3 地理几何检索](#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。
相关推荐
isNotNullX17 分钟前
BOM到底有几种?工程BOM、制造BOM、计划BOM、成本BOM、服务BOM一次讲透
大数据
河南花仙子科技20 分钟前
小游戏社交裂变功能的高阶设计思路
大数据·科技·游戏
渡川见闻28 分钟前
新手任务怎么高效完成?师徒协同视角
大数据
AgentMaster33 分钟前
开源智能客服系统技术对比:从架构设计到生产部署的实战指南
大数据·人工智能·算法
千舟软件1 小时前
【宿舍管理小程序】新生入住不靠纸质表
大数据·运维·服务器·科技·业界资讯
精益数智工坊2 小时前
云计算环境元数据是什么意思?云计算元数据管理怎么做?
大数据·人工智能·数据挖掘·数据可视化
Q26433650232 小时前
【有i源码】基于大数据的城市交通流量与出行特征可视化分析平台-基于Hadoop的城市交通拥堵关联规则与异常检测研究
大数据·hadoop·机器学习·数据挖掘·数据分析·spark·数据可视化
Elasticsearch2 小时前
信任,但要进行基准测试:我们如何让 AI agent 优化 Elasticsearch
elasticsearch
美林数据Tempodata2 小时前
智能体技术应用专业(510219)怎么建:先定岗位能力链,再定课程与实训
大数据·人工智能·智能体·产教融合·职业教育
极限实验室3 小时前
INFINI Easysearch 向量搜索实战(一)
数据库·搜索引擎