distanceFromLocation方法如何工作?

时间:2013-03-21 13:55:28

标签: ios core-location cllocation

我经常对distanceFromLocation对象使用CLLocation方法来获取与其他位置的距离。枚举CLLocations数组,然后使用此方法将每个CLLocations与我的参考位置进行比较。

我很想知道使用distanceFromLocation对处理/内存的影响,特别是对于大量CLLocation个对象的连续使用。该方法如何工作 - 它是连接到服务器以获取数据,还是根据某些数学公式计算距离,例如Haversine Formula

是否有更有效的方法来比较1个参考位置和CLLocation对象数组之间的距离?

4 个答案:

答案 0 :(得分:4)

他们可能正在使用余弦球面定律代替Haversine(why? see this question)。

如果您只想将多个点与一个点进行比较以查看哪个点最接近,那么您可能并不关心计算距离的准确性和性能。在这种情况下,也许使用毕达哥拉斯定理对你有用。

所有这些算法都在this web page详细说明,部分内容如下:

If performance is an issue and accuracy less important, for small
distances Pythagoras’ theorem can be used on an equirectangular
projection:*

您可以使用毕达哥拉斯定理实现一个函数,然后将其与CLLocation中的函数进行基准测试,并与我使用余弦球面定律的distanceInMetersFromRadians的实现进行比较,看看有多少性能差异。

答案 1 :(得分:2)

来自文档:

  

distanceFromLocation:

     

此方法通过跟踪两个位置之间的曲线来测量两个位置之间的距离。得到的弧线是平滑的曲线,不考虑两个位置之间的特定高度变化。

所以是的,我认为它正在使用Haversine公式(或其修改)。

答案 2 :(得分:0)

您是否使用过仪器并对其进行测量?在你完成之前,它毫无意义。

你可以走捷径。假设您想要最近的点。找到一个能够为您提供大致正确结果的公式。通常有一个平方根,所以得到一个距离平方的公式 - 这更快,也可以。找到最近的公式点。现在说根据你的公式,最近的点相距178.96米。然后,您可以使用确切的公式检查距离不到180米的所有点。

答案 3 :(得分:0)

对于小距离和iOS 9,我发现distanceFromLocation获得的值与使用WGS-84椭圆体的Vincenty公式找到的值非常接近。根据我的经验,它们在大约7或8个有效数字内是准确的。

球形模型,例如余弦定律或Haversine公式,对于小距离不能很好地比较。

有关详细信息,请参阅geopy documentationtable of values for comparison