2012-09-20 46 views
5

你好的朋友,我已經看到了關於精度問題有GPS,但它不是所有的工作時間iPhone的GPS不能提供準確的經度和緯度

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 

    NSString *latstr = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 
    NSString *longstring=[NSStringstringWithFormat:@"%f",newLocation.coordinate.longitude]; 

    if (abs(howRecent)>5.0) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
     } 
    if(abs(newLocation.horizontalAccuracy)<0.0f) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
    } 
    if(newLocation.horizontalAccuracy>65.0f) 
    { 
     [self.locationManager startUpdatingLocation]; 
     return; 
    } 
    self.latstring = [latstr copy]; 
    self.longstr = [longstring copy]; 

    if((updateLocationFirst||loadFirstView)) 
    {  
     [[NSUserDefaults standardUserDefaults]setObject:latstring forKey:@"Latitude"]; 
     [[NSUserDefaults standardUserDefaults]setObject:longstr forKey:@"Longitude"]; 
     [self displayParticularDaySpecial]; 
     loadFirstView=FALSE; 
     updateLocationFirst=FALSE; 
     [self.locationManager stopUpdatingLocation]; 
    } 
} 

這裏的問題是我送的緯度和經度的許多崗位谷歌api相對於一些地址,如果我減少準確度的價值,它需要很多時間來加載和這個價值是有問題,當你到達目的地相對於目的地與0.6英里的差異。

+1

順便說一句'abs(newLocation.horizo​​ntalAccuracy)<0.0f'永遠不會是真的,會嗎?一個數的絕對值如何小於零? – Rob

回答

1

你在你的CLLocationManager中設置了desiredLocationAccuracy嗎?默認情況下,範圍有點寬。

獲取非常精確的值需要一些時間。

2

您應該參考Location Awareness Programming Guide,它提供了用於確定您的位置的優秀編程示例。

正如您在該文檔的演示中看到的那樣,當您使用start the standard location manager時,您通常會告訴它它需要什麼準確性。一旦你啓動位置管理器,你不必再次啓動它(就像你在代碼示例中做的那樣)。方法將被一次又一次地調用,並且越來越準確,所有這些都是自己的。您不需要再次啓動位置管理器......它會一直持續到您關閉它爲止。根據定義,如果你在didUpdateLocations,這意味着它已經開啓。

我還注意到,您正在使用舊的didUpdateToLocation。如果你正在爲iOS 6編程,你真的想使用didUpdateLocations,這是CLLocationManagerDelegate方法的當前版本。

最後,你提到它需要很長時間才能得到你的位置。這很可能。事實上,在某些地區,你永遠不會離得很近(或者任何位置)。你的應用程序應該假定準確的位置需要一段時間,如果你從未得到真正準確的位置,你應該優雅地處理,這很可能。

相關問題