如何计算具有 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 信息的集合的地理空间距离?的主要内容,如果未能解决你的问题,请参考以下文章