2013-03-21 66 views
2

我經常使用distanceFromLocation方法來獲取CLLocation對象與其他位置的距離。枚舉CLLocations數組,然後使用此方法將每個數據與我的引用位置進行比較。distanceFromLocation方法如何工作?

我很想知道使用distanceFromLocation的處理/內存影響,尤其是連續使用大量CLLocation對象。這種方法如何工作 - 它連接到服務器以獲取數據,還是根據一些數學公式計算距離,如Haversine Formula

是否有更有效的方法來比較1參考位置和CLLocation對象數組之間的距離?

回答

4

它們很可能是使用Cosines的球形定律而不是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實現功能看餘弦的球面法則,看看有多少表現差異。

+0

應該注意的是,Haversine公式以及假定地球是球體的所有墨卡託公式(如Google,Apple和Bing地圖所用)均爲距離的近似值,不應用於GIS長度關鍵計算需要準確的地面測量。對於99%的應用程序來說,使用Haversine並且依賴於內置的計算已經足夠了,但對於大多數0.1%誤差的應用程序而言,它的誤差爲+/- 1m,這些誤差在很短的距離內遠離極點是很好的。如果你想死的準確,你需要計算UTM或朗伯投影的距離。 – JasonD 2013-05-17 18:24:41

2

從文檔:

distanceFromLocation:

此方法通過跟蹤下面的地球曲率它們之間的線測量的兩個位置之間的距離。由此產生的弧線是一條平滑曲線,不考慮兩個位置之間的特定高度變化。

所以是的,我假設它使用Haversine公式(或其修改)。

+0

同樣在位置感知編程指南:收集位置數據是一個耗電量大的操作。它包括啓動機載無線電和查詢可用的蜂窩塔,Wi-Fi熱點或GPS衛星,這可能需要幾秒鐘的時間。 – petert 2013-03-21 14:06:32

+0

@petert我想我的問題不清楚,我知道收集位置數據是耗電量大的。我想要問的是 - 在大量位置對象上使用'distanceFromLocation'方法效率低下嗎?有沒有更好的方法來比較CPU /內存密集度較低的位置? – zdestiny 2013-03-21 17:05:12

0

你使用過儀器並測量過它嗎?在你完成之前,這是毫無意義的。

您可以採取快捷方式。假設你想要最近的點。找到一個公式,給你大致的正確結果。通常涉及到一個平方根,因此得到距離平方的公式 - 這更快,並且工作得很好。用你的公式找出最近的點。現在說根據你的公式,最近的距離是178.96米。然後,您可以用確切的公式檢查所有距離180米以外的點。

0

對於小距離和iOS 9,我發現通過distanceFromLocation獲得的值與使用WGS-84橢球的Vincenty公式可靠地接近。根據我的經驗,他們在大約7或8位有效數字內是準確的。

一個球形模型,如餘弦定律或Haversine公式,在小距離上並不能很好地比較。

欲瞭解更多信息,請參閱geopy documentationtable of values for comparison