2013-08-16 67 views
0

我正在開發一個像Runtastic,Nike +等健身追蹤應用程序。我將從頭到尾映射整個活動。我不開始在應用程序啓動時更新位置更改,而是在用戶開始鍛鍊時開始。但是,當locationManager開始更新時,前3到5個CLLocations非常不正確。長達一公里的錯誤。我使用下面的代碼初始化位置經理:如何處理不正確的CLLocation數據

self.locationManager = [(PFAppDelegate *)[[UIApplication sharedApplication] delegate] locationManager]; 
self.locationManager.delegate = self; 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
self.locationManager.distanceFilter = 5.0; 
[self.locationManager startUpdatingLocation]; 

而在locationManagerDidUpdateToLocation方法:

if(didFindGPS == NO) 
{ 
    if([[lastLocation timestamp] timeIntervalSinceNow] < 10.0) 
    { 
     if([lastLocation horizontalAccuracy] < 20) 
     { 
      didFindGPS = YES; 
     } 
    } 
} 
else 
{ 
    //process data here 
} 

這不會過濾掉那些不正確的第一位置。我也嘗試忽略horizo​​ntalAccury值小於20的位置,但應用程序不處理任何位置。

可以做些什麼來改善第一個地點或處理第一個不正確的地點?

+0

請增加distanceFilter值。 – Developer

回答

1

變化

if ([lastLocation horizontalAccuracy] < 20)... 

if (([lastLocation horizontalAccuracy] > 0) && ([lastLocation horizontalAccuracy] < 20))... 

根據documentation

負值表示該位置的經度和緯度 無效。

負數值爲horizontalAccuracy即。

如果你要爲處理數據,在條件(好像你這樣做),你應該代碼改寫爲:

if (([lastLocation horizontalAccuracy] > 0) && ([lastLocation horizontalAccuracy] < 20)) 
{ 
    didFindGPS = YES; 
    //process the data here... since here the location fits your limitations 
    //and you don't loose the first location (as in original code) 
} 
else 
{ 
    didFindGPS = NO; 
} 

注意,這個代碼可以給你失去了GPS,所以你一些假警報可能想要省略else塊。

+0

我試過了,第一個位置更新仍然離開正確位置300+米。 – theaob

+0

嗯,是的,因爲你正在處理條件塊外的數據。你的方法將獲得所有通過過濾器的位置。但是在處理數據之前,您仍然可以添加自己的條件。此時,如果句子僅適用於設置'didFindGPS = YES;'。 –

+0

不應該新的位置更新比第一個更不錯? – theaob