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

server/2024/11/15 4:24:16/

文章目录

  • 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类型描述
PointPOINTpoint单个地理坐标。注意:Elasticsearch仅使用WGS-84坐标。
LineStringLINESTRINGlinestring给定两个或两个以上点的任意线。
PolygonPOLYGONpolygon一个封闭的多边形,其第一个点和最后一个点必须匹配,因此需要n + 1顶点创建一个带n边的多边形和一个最小的4顶点。
MultiPointMULTIPOINTmultipoint一组未连接但可能相关的点。
MultiLineStringMULTILINESTRINGmultilinestring单独的线串数组。
MultiPolygonMULTIPOLYGONmultipolygon一组单独的多边形。
GeometryCollectionGEOMETRYCOLLECTIONgeometrycollection与JSON形状相似的GeoJSON形状, multi*但可以同时存在多种类型(例如,Point和LineString)。
N/ABBOXenvelope通过仅指定左上和右下点指定的边界矩形。
N/AN/Acircle由中心点和半径指定的圆,单位为,默认为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半径(米)多边形的边数
114
11014
110045
11,000141
110,000445
1100,0001000

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。

http://www.ppmy.cn/server/142021.html

相关文章

第 7 章 - GO语言 流程控制

在Go语言中,流程控制结构是编程的基础,用于控制程序的执行顺序。下面分别介绍if语句、switch语句以及for循环。 if 语句 if语句用于基于一个条件表达式的真假来决定是否执行一段代码。Go语言中的if语句具有简洁的语法,并且要求条件表达式必…

【海外SRC漏洞挖掘】谷歌语法发现XSS+Waf Bypass

海外SRC赏金挖掘专栏 在学习SRC,漏洞挖掘,外网打点,渗透测试,攻防打点等的过程中,我很喜欢看一些国外的漏洞报告,总能通过国外的赏金大牛,黑客分享中学习到很多东西,有的是一些新的信…

WebAPI性能监控-MiniProfiler与Swagger集成

Net8_WebAPI性能监控-MiniProfiler与Swagger集成 要在.NET Core项目中集成MiniProfiler和Swagger,可以按照以下步骤操作: 安装NuGet包: 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。安装MiniProfiler.EntityFrameworkCore包以监…

RabbitMQ的死信队列

1.死信的概念 死信简单理解就是因为种种原因,无法被消费的消息. 有死信自然就有死信队列,消息再一个队列中编程死信之后,它能被重新发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列,就被称为死信队…

技术专家之路:深耕高门槛领域的策略

技术专家之路:深耕高门槛领域的策略 引言 随着科技行业的飞速发展,技术专家成为了职场上炙手可热的角色。他们不仅享有高度的职业满意度,还能获得优渥的薪酬。本文旨在探讨如何通过选择并深耕高门槛领域,实现技术专家的职业目标…

从ROS Bag文件提取点云数据并保存为PCD格式进行处理 ros ubuntu

从ROS Bag文件提取点云数据并保存为PCD格式进行处理 要从ROS bag文件中有效地提取点云数据并利用PCL库对其进行进一步处理,需要通过一系列精确且专业的操作。下面是一个详细的步骤指南,这些步骤不仅详细介绍了如何操作,而且强调了确保数据处…

Mac打开time machine(时间机器)备份特殊文件

Mac 打开time machine(时间机器)备份特殊文件 设置“时间机器”的作用具体操作办法 前言:今天在使用Nas同步文件时发现有部分重要文件没有同步,为了省事手动拖拽复制文件,导致其中一份非常重要的文件丢失,尝…

MySQL初学之旅(2)增删改查—上

目录 1.前言 2.正文 2.1新增数据 2.1.1插入单行数据 2.1.2插入多行数据 2.2查询数据(重要) 2.2.1全列查询 2.2.2指定列查询 2.2.3查询字段为表达式 2.2.4别名 2.2.5去重 2.2.6排序 2.2.7条件查询 2.3修改数据 2.4删除数据 3.小结 1.前言…