Elasticsearch 地理坐标点存储 --- 2022-04-03

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch 地理坐标点存储 --- 2022-04-03相关的知识,希望对你有一定的参考价值。

参考技术A 在ES中地理坐标指的就是经度和纬度,ES中存储经纬度坐标的数据类型为:geo_point。

我们可以通过定义索引映射的时候,指定字段类型为geo_point,表示存储的是一个经纬度坐标值。

例子:

保存geo_point类型的数据主要有下面几种格式

说明:

说明:

说明:

以字符串的形式存储经纬度,格式: "纬度,经度"

如何判断一个地理坐标点在一个地理坐标多边形中?

【中文标题】如何判断一个地理坐标点在一个地理坐标多边形中?【英文标题】:how to judge a geographical coordinates point In a geographical coordinates polygon? 【发布时间】:2013-10-15 09:12:59 【问题描述】:

我已经模拟了这个算法http://forcefront.github.io/point-in-polygon/point-in-polygon.html。

但我认为经纬度是球坐标。

该算法适合判断地图上多边形中的点吗?

【问题讨论】:

纬度和经度应该非常适合这种算法,它们可以完美地投影到平面上。你见过平面纸质地图吗?! ;-) 您可能想在gis.stackexchange.com 尝试这个问题,但这些人专门回答这些问题。 【参考方案1】:

一个通用的多边形点实现不能解释这样一个事实,即您可以从 179.999 度到 -180 度这样的值进行回绕,而且我们还没有获得关于手头问题的足够信息。如果您的输入被正确规范化(例如,在我的情况下,它被放置在 [-180, 180) 中)并且您的多边形没有触及您的地图边界,那么您应该没有问题。

当您查看这样的算法时,x 和 y 坐标系是任意的;您可以将它们应用于 y 和 z、x 和 t 等(尽管 x 和 t 的情况并不一定具有我能很快想到的任何含义)。

如果我的描述不清楚:如果我给你一个围绕北极的多边形,那么这个多边形是否包括北极,或者它是否包括除了北极之外的所有东西,都是模棱两可的;这还没有明确地转达给我。

同样,如果您查看球体的纬度/经度投影,多边形与 lat 或 long = 180 相交,而多边形中的通用点无法处理。

拍下我的世界照片,让事情变得更清晰。我不确定您如何将多边形定义为左侧的绿色区域与两个半圆之间的区域(穿过我们和中国)。

在我的脑海中,您可能可以通过将两个圆圈分成两个不同的多边形并独立测试它们来解决这些问题。您可以按原样表示上半圆,或者通过多边形及其点和整个地图的 4 个角来否定它。

或者,您可以在针对多边形进行测试时移动坐标系(这样它就不会环绕,并且它的点都被标准化),尽管这无法解释多次跨越地球的多边形(标准化会中断你的多边形)。

【讨论】:

【参考方案2】:

大多数情况下,当您只有 -179 到 180 度之间的角度时,它应该可以工作。如果您的角度更小或更大,那么您需要转换它。您可以使用每个顶点的世界坐标转换并将其投影回 -179,180 度。以下是计算边界框的方法,例如从美国纽约到中国北京:Need to calculate latitude longitude from postal code database when location has multiple codes。以下是如何标准化角度Easy way to keeping angles between -179 and 180 degrees。您还可以使用带有 wrap 功能的传单 JavaScript 库。

【讨论】:

【参考方案3】:

它适用于所有情况,除非您

1) 重叠基准限制(经度从 180 跳到 -180 的限制)或何时 2) 将两极重叠。

因此,对于 99.99% 的应用程序,只需检查地理数据导入时的两个条件 然后使用链接算法。

提供不满足这些条件的多边形被忽略的信息,并且数据提供者必须先拆分它们。

【讨论】:

以上是关于Elasticsearch 地理坐标点存储 --- 2022-04-03的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch入门教程:Elasticsearch查询

如何判断一个地理坐标点在一个地理坐标多边形中?

基于笛卡尔坐标点积的算法计算地理距离

调用百度地图API怎么获取坐标点的地理位置

Javascript - 计算围绕中心点的四个角的地理坐标点

两个坐标点的距离怎样算