Ios distanceFromLocation方法是如何工作的?

Ios distanceFromLocation方法是如何工作的?,ios,core-location,cllocation,Ios,Core Location,Cllocation,我经常对CLLocation对象使用distanceFromLocation方法来获取它们与其他位置的距离。通过CLLocations数组进行枚举,然后使用此方法将每个位置与我的引用位置进行比较 我很想知道使用distance fromLocation对处理/内存的影响,特别是对于大量连续的CLLocation对象。该方法是如何工作的?它是连接到服务器以获取数据,还是根据一些数学公式计算距离,例如 是否有更有效的方法来比较1个参考位置和一组CLLocation对象之间的距离?来自文档: 距离位置

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

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


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

来自文档:

距离位置:

该方法通过追踪两个位置之间沿地球曲率的直线来测量两个位置之间的距离。生成的圆弧是平滑曲线,不考虑两个位置之间的特定高度变化


因此,是的,我假设它使用的是哈弗森公式(或其修改)。

他们可能使用的是余弦球面定律,而不是哈弗森公式()

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

所有这些算法都有详细说明,其中部分说明:

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

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

您使用过仪器并测量过吗?在你完成之前,这是毫无意义的


你可以走捷径。假设你想要最近的点。找到一个能给你大致正确结果的公式。通常有一个平方根,所以得到一个距离平方的公式-这更快,也同样有效。用公式找出最近的点。现在,根据你的公式,最近的点相距178.96米。然后你可以用精确的公式检查所有距离小于180米的点

对于小距离和iOS 9,我发现通过
distance fromLocation
获得的值与使用WGS-84椭球体的Vincenty公式得到的值非常接近。根据我的经验,它们精确到大约7或8个有效数字

球形模型,如余弦定律或哈弗森公式,在小距离下比较不好


有关更多信息,请参见位置感知编程指南中的和。

:收集位置数据是一项耗电量大的操作。它包括接通车载收音机的电源,查询可用的手机发射塔、Wi-Fi热点或GPS卫星,这可能需要几秒钟的时间。@petert我想我的问题不清楚,我知道收集位置数据需要大量的电力。我想问的是-在大量位置对象上使用
distanceFromLocation
方法是否效率低下?有没有更好的方法来比较CPU/内存占用较少的位置?应该注意的是,Haversine公式和所有基于墨卡托公式的假设地球是一个球体的公式(如谷歌、苹果和Bing地图所用)是距离的近似值,不应用于需要精确地面测量的GIS长度关键计算。它足够让99%的应用程序使用Haversine并依赖内置计算,但是。。。对于大多数应用,误差为+/-1m,误差为0.1%,在短距离内和远离极点的情况下,误差为+/-1m。如果您想要精确,则需要计算UTM或Lambert投影中的距离。