0

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

问题如下:

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

3 回答 3

1

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

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

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

于 2013-08-22T15:17:42.077 回答
1

只需使用欧几里得距离

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

然后只按距离排序。

于 2013-08-22T08:23:41.053 回答
1

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

如果您尝试计算两个地理位置之间的距离,其精度比它们计算的中心之间的距离差,那将是一个方法问题而不是数学问题

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

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

于 2013-08-22T08:40:29.007 回答