2

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

我很想知道 using 的处理/内存含义distanceFromLocation,尤其是对于连续的大量CLLocation对象。这种方法是如何工作的 - 它是连接到服务器以获取数据,还是根据一些数学公式(例如Haversine 公式)计算距离?

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

4

4 回答 4

4

他们很可能使用的是球面余弦定律而不是Haversine(为什么?见这个问题)。

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

所有这些算法都在这个网页上有详细说明,其中部分内容是:

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

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

于 2013-03-22T01:31:17.700 回答
2

从文档中:

距离位置:

这种方法通过追踪它们之间的一条遵循地球曲率的线来测量两个位置之间的距离。生成的弧线是一条平滑曲线,没有考虑两个位置之间的特定高度变化。

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

于 2013-03-21T14:02:53.673 回答
0

你用过仪器并测量过吗?在你完成之前,这是没有意义的。

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

于 2014-03-07T07:55:38.690 回答
0

对于小距离和 iOS 9,我distanceFromLocation发现通过使用 WGS-84 椭球获得的值可靠地接近于文森蒂公式找到的值。根据我的经验,它们在大约 7 或 8 个有效数字内是准确的。

球面模型(例如余弦定律或 Haversine 公式)不能很好地比较小距离。

有关详细信息,请参阅geopy文档比较值表

于 2016-05-31T23:47:07.280 回答