【问题标题】:java: Find nearest GPS positions from a given GPS positionjava:从给定的GPS位置查找最近的GPS位置
【发布时间】:2013-09-12 13:19:50
【问题描述】:

我需要编写一个 java 程序来从给定的 GPS 位置P 中找到最近的一组(2 个位置)GPS 位置(来自一组 GPS 位置)是 GPS 位置。情况如图所示 这里所有标记的位置都是GPS位置。从给定位置P,我想找到最接近P 的点集,在本例中为(B,C)

如果有人可以分享与此相关的算法或代码片段,那将非常有帮助。

【问题讨论】:

  • 只是从 p 中减去坐标 a,b,c,d 和 e ?最小的胜利!
  • @DanP。那是完全错误的。这甚至不是欧几里得距离!!
  • @ndj 除了欧几里得距离函数,还有其他距离函数。但是,问题可能要求欧几里得距离函数。
  • @RaptorDotCpp:我知道,我只是说“这甚至不是欧几里得距离”:) 有关详细信息,请参阅我的答案。

标签: java algorithm gps


【解决方案1】:

你必须计算 P 和所有其他点之间的距离,然后取最小值。这是显而易见的部分。

困难的部分是计算两个gps坐标之间的距离。 GPS 使用 WGS84 测地线系统来表示地球上的点。 还有不同的方法来计算~sphere 上的距离(loxodromic 距离和大圆距离是主要的)。 欧几里得距离在球体上总是错误的(甚至不是很近),因为在非零纬度,1°Lat 请参阅Distance using WGS84-ellipsoid 进行自己的计算,如果您接受可以为您完成计算的库,请参阅 GDAL。

您可以使用 GDAL 转换其他测地线系统中的点表示。例如,您可以在平面测地线系统上投影点,然后使用 (x,y,z) 坐标,然后计算距离(或更好:平方距离 = x²+y²+z²)。

我认为 google map api 为 gps 坐标提供了一种易于使用的距离方法,如果您碰巧已经在使用它的话。

【讨论】:

    【解决方案2】:

    将点存储到列表中,然后找到相邻点或最小距离点。

    This post 可能对你有帮助。

    【讨论】:

      【解决方案3】:

      如果您正在寻找算法实现,请查看 R-Trees。它们是查找点或边界框类型搜索的好方法。

      有一个很棒的库我已经使用了一段时间,它对我来说很好,它实现了 R-Tree 算法。查看 JSI、Java 空间索引 (http://jsi.sourceforge.net/)。

      我将把 API 的探索留给您。祝你好运!

      【讨论】:

        【解决方案4】:

        您可以考虑从数据中创建一个Quadtree。这是一种表示二维空间数据的方法,可以轻松地在 log(n) 时间内进行最近邻查找。虽然树的构造是 nlog(n),但是如果您需要考虑构造和最近邻,那么您将具有 nlog(n) 复杂性。

        为四叉树(它只是 k-d 树的二维版本)找到最近邻算法应该不难。 Wiki 对其进行了总体概述here

        如需进一步阅读,如果您需要将此扩展到任何其他数量的维度,您应该阅读K-D Trees

        编辑:我突然想到,如果您需要构建四叉树,那么循环遍历所有其他点会更快,找到距离并跟踪最小的2. 如果您不确定找到距离,请回想三角形和勾股定理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-09
          • 1970-01-01
          • 2011-03-23
          • 2013-04-27
          • 2018-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多