如何计算具有 lat+long 信息的集合的地理空间距离?

Posted

技术标签:

【中文标题】如何计算具有 lat+long 信息的集合的地理空间距离?【英文标题】:How to calculate geospatial distances from a collection with lat+long info? 【发布时间】:2013-10-16 18:05:33 【问题描述】:

我有一个 lat+long 值的集合。在给定的时刻,一个新的点(纬度+经度)被传递给应用程序。此时,应用程序应返回从该点到集合中存储的值的距离。 应用程序还应该能够过滤给定距离内的所有值。类似于:返回距离该点 10 英里(或公里)内的所有值。 你能帮助建立一个java算法来执行那个任务吗? 非常感谢

【问题讨论】:

试试 Haversine 公式:en.wikipedia.org/wiki/Haversine_formula 【参考方案1】:

如果您有大量数据:

请看:http://jsi.sourceforge.net/。这是一个内存中的地理空间数据库。它使用 RTree (http://en.wikipedia.org/wiki/R-tree) 高效地执行您想要的计算类型。

如果总点数较少:

然后您可以在每个点上使用 Haverine 公式(如评论中所述)。这是我找到的一个实现:http://bigdatanerd.wordpress.com/2011/11/03/java-implementation-of-haversine-formula-for-distance-calculation-between-two-points/。

你会做这样的事情:

for( Point p : pointCollection )
  distance = haversine(p, newPoint);
  if( distance < targetDistance )
     .. add new results ...
  

【讨论】:

感谢您的回答。如果我的收藏有大约 500 分,那么两种方法中哪一种最适合?如果是 200 怎么办?有多少会被认为是大量数据?数千?再次感谢。 这取决于调用频率和返回速度。我的猜测是,无论哪种方式,低于 1000 的速度都会非常快。我将从更简单的方法开始,即为每个数据点计算它。如果这看起来太慢,那么请使用该库。 太好了,谢谢。

以上是关于如何计算具有 lat+long 信息的集合的地理空间距离?的主要内容,如果未能解决你的问题,请参考以下文章

利用SQL计算两个地理坐标(经纬度)之间的地表距离

将 Lat/Long 转换为状态

PHP 地理编码,从地址到坐标lat long

在node.js中查找两个地理点(lats,longs)之间距离的最佳方法

同时填充2个数据框列?

根据当前地理位置 ios app javascript 从 lat / long 列表中返回值