我正在寻找一种很好的算法来查找最接近位置的列表,同时考虑到我们从gps设备接收的数据质量。
问题如下:
A
的位置。 A= (LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
B = [B1, ... Bn]
Bx
(LNG, LAT, ALT, HorizontalAccuracy, VerticalAccuracy)
Bx
列表,并根据距离Bx和A对该列表进行排序。答案 0 :(得分:1)
答案 1 :(得分:1)
精确度:您可以设置过滤器(即:确定您将使用哪些位置以及您将省略哪些位置)。在CLLocation
中,您仍然可以获得中心点,因此距离公式中的精度因子没有太大用处。
如果您尝试计算两个地理位置之间的距离,其精度比其中心之间的计算距离更差,这将是接近问题而不是数学问题。< / p>
距离:您始终可以使用CLLocation
的{{3}}方法。不要使用Eucledian formala来计算地理位置之间的距离。
排序:这里不多说。排序算法各有利弊。我会首先尝试实现其中一个distanceFromLocation:并在以后进行优化,如果它们看起来太慢了。
答案 2 :(得分:1)
首先,水平准确度只是一个估计,所以不要太依赖它。 但是,我会删除超过准确度阈值的位置。
然后,如果按距离排序少于10.000点 如果你有更多,那么首先使用空间索引,比如四叉树,通过避免计算到所有位置的距离来加速,但只有附近的距离。
距离计算:
这取决于您的位置是否分布在wolrd上,或仅在100km内。
如果在世界各地,使用内置距离To(),如果在100km以内和你
有许多点或需要快速计算,使用基于equiRectangular投影的距离公式,它只使用一个cos()操作。您可以省略sqrt(),因为您可以按距离的sqr排序。