【问题标题】:Algorithm for near proximity gps positions近距离 GPS 定位算法
【发布时间】:2013-08-22 23:17:42
【问题描述】:

考虑到我们从 gps 设备接收到的数据质量,我正在寻找一种很好的算法来查找最近位置的列表。

问题如下:

  1. 我有一个点A 的位置。 A= (LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
    • Horizo​​ntalAccuracy 和 VerticalAccuracy 这是一个以米为单位的潜在误差
  2. 我有一个其他人的列表B = [B1, ... Bn] 每个Bx(LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
  3. 我想找到离A最近的点Bx的列表,并根据距离Bx和A对该列表进行排序。
  4. 该列表的顺序应考虑到我们拥有的数据的准确性。当点之间的距离比精度短时,精度问题就开始了。

【问题讨论】:

  • 任何排序算法都可以!使用您的标准库提供的那个。
  • @hivert 首先如何获取距离?其次,如何在考虑位置误差的情况下对值进行排序。不幸的是,我认为您误解了问题。
  • 可能是因为你解释错了!
  • @hivert 可能你是对的。我重新编辑了问题

标签: ios algorithm node.js sorting gps


【解决方案1】:

只需使用Euclidean distance

distance = sqrt((lng_a - lng_b)^2 + ... + (alt_a - alt_b)^2)

然后只按距离排序。

【讨论】:

  • 当然,这是更容易的部分,但是精度误差呢。我需要将它们考虑在内,以便正确处理相对较近的物体
  • 请不要使用欧几里得距离公式来计算球体上点之间的距离。
【解决方案2】:

精确度:您可以设置过滤器(即:决定使用哪些位置以及省略哪些位置)。在CLLocation 中,您仍然可以得到 centerpoint,因此距离公式中的精度因子没有多大用处。

如果您尝试计算两个地理位置之间的距离,其准确度低于计算出的中心之间的距离,那么这将更像是一个方法问题而不是一个数学问题

距离:您始终可以使用CLLocationdistanceFromLocation: 方法。不要使用欧式形式来计算地理位置之间的距离。

排序:这里不多说。排序算法有其优点和缺点。我会首先尝试实现native sorting possibilities 之一,如果它们看起来太慢,稍后再进行优化。

【讨论】:

    【解决方案3】:

    首先,水平精度只是一个估计值,所以不要过分依赖它。 但是,我会删除超过准确度阈值的位置。

    然后,如果您的点数少于 10.000,则按距离排序。
    如果你有更多,那么首先使用空间索引,比如四叉树,通过避免计算到所有位置的距离来加速,但只计算附近的一个。

    距离计算:
    这取决于您的位置是遍布全球,还是仅在 100 公里范围内。 如果在世界范围内,请使用内置的 distanceTo(),如果在 100 公里以内并且您 有很多点或需要快速计算,使用基于 equiRectangular 投影的距离公式,它只使用一个 cos() 操作。您可以省略 sqrt(),因为您可能可以按距离的 sqr 排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多