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

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

【问题讨论】:

标签: java geolocation geocoding


【解决方案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 的速度都会非常快。我将从更简单的方法开始,即为每个数据点计算它。如果这看起来太慢,那么请使用该库。
  • 太好了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2014-04-04
  • 2017-05-05
  • 2021-11-22
  • 2023-03-10
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多