近距离gps位置的算法

时间:2013-08-22 08:16:28

标签: ios algorithm node.js sorting gps

我正在寻找一种很好的算法来查找最接近位置的列表,同时考虑到我们从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. 该列表的顺序应考虑到我们拥有的数据的准确性。当点之间的距离比精度更短时,精度问题就开始了。

3 个答案:

答案 0 :(得分:1)

只需使用Euclidean distance

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

然后只按距离排序。

答案 1 :(得分:1)

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

如果您尝试计算两个地理位置之间的距离,其精度比其中心之间的计算距离更差,这将是接近问题而不是数学问题。< / p>

距离:您始终可以使用CLLocation的{​​{3}}方法。不要使用Eucledian formala来计算地理位置之间的距离。

排序:这里不多说。排序算法各有利弊。我会首先尝试实现其中一个distanceFromLocation:并在以后进行优化,如果它们看起来太慢了。

答案 2 :(得分:1)

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

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

距离计算:
这取决于您的位置是否分布在wolrd上,或仅在100km内。 如果在世界各地,使用内置距离To(),如果在100km以内和你 有许多点或需要快速计算,使用基于equiRectangular投影的距离公式,它只使用一个cos()操作。您可以省略sqrt(),因为您可以按距离的sqr排序。