2012-09-04 73 views
2

我正在創建一個應用程序,需要確定我的當前位置(recD in didUpdateLocation :)是否存在於我擁有的一組地理座標中。現在我明白,比較平等的雙/浮點值可能會出錯,因爲地理座標中涉及的精度非常高。 GPS中的輕微不準確可能導致我的算法偏離軌道。因此我需要將它與一些誤差範圍進行比較。iOS比較GPS位置

如何比較2個CLLocations和誤差範圍?或者確定位置閱讀中的錯誤(我不認爲這是可能的,因爲CLLocationManager會糾正它)。

感謝提前:)

+0

【你有什麼試過?】(http://whathaveyoutried.com)檢查你的點是否在一個正方形或圓形的邊界或半徑爲誤差範圍內? –

回答

4

在每個CLLocation實例有聲明爲@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy;屬性你可以做的是使例程,如:

-(BOOL)isLocation:(CLLocation*)location inRangeWith:(CLLocation*)otherLocation{ 
    CLLocationDistance delta = [location distanceFromLocation:otherLocation]; 
    return (delta < location.horizontalAccuracy); 
} 

可以做得更復雜的邏輯,因爲這兩個地方有屬性。 ..

乾杯。 【ツ】

+0

嗨阿里爾。 .horizo​​ntalAccuracy是一個很好的指針。我可以用,thanx。但我的根本問題是我想避免使用distanceFromLocation:在那裏的任何解決方法? – ameyazing

+0

你可以用座標來計算三角洲,但它會更復雜一些,因爲根據赤道的距離,一個座標角度的實際距離以米爲單位是不同的。 無論如何,據我可以告訴'distanceFromLocation:'沒有太多的電力或CPU消耗... – Ariel

1

可以使用CoreLocation方法distanceFromLocation:找到用戶的位置和另一點之間的距離。如果距離小於您決定的任何閾值,則可以假定位置相同。

CLLocationDistance threshold = 5.0; // threshold distance in meters 

// note: userLocation and otherLocation are CLLocation objects 
if ([userLocation distanceFromLocation:otherLocation] <= threshold) { 
    // same location 
} 
+0

嗨jonkroll,我沒有看過任何定量的研究證明了這一點,但從它的外觀來看,Haversine公式看起來很複雜,距離從位置:最有可能用這個來計算2 lat-long之間的距離。我想避免在每個經緯度上使用該函數。任何解決方法? – ameyazing