我经常对distanceFromLocation
对象使用CLLocation
方法来获取与其他位置的距离。枚举CLLocations数组,然后使用此方法将每个CLLocations与我的参考位置进行比较。
我很想知道使用distanceFromLocation
对处理/内存的影响,特别是对于大量CLLocation
个对象的连续使用。该方法如何工作 - 它是连接到服务器以获取数据,还是根据某些数学公式计算距离,例如Haversine Formula?
是否有更有效的方法来比较1个参考位置和CLLocation对象数组之间的距离?
答案 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
documentation和table of values for comparison。