2011-09-05 191 views
0

我有一個MKMapView,我可以在每次加載視圖或調用自定義類方法時刪除一個註釋。CLLocationManager奇怪的問題

我需要的精確度是最好的

-(void)viewDidLoad { 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    [locationManager startUpdatingLocation]; 
} 
-(IBAction) showLocation:(id) sender{ 
    [locationManager startUpdatingLocation]; 
} 
- (void) locationManager:(CLLocationManager *) manager 
    didUpdateToLocation:(CLLocation *) newLocation 
      fromLocation:(CLLocation *) oldLocation { 
// start geocoding with newLocation coordinate which will automatically set annotation. 
SVGeocoder *geocodeRequest = [[SVGeocoder alloc] 
             initWithCoordinate:CLLocationCoordinate2DMake(newLocation.coordinate.latitude, newLocation.coordinate.longitude)]; 
     [geocodeRequest setDelegate:self]; 
     [geocodeRequest startAsynchronous]; 
     [geocodeRequest release]; 
      [locationManager stopUpdatingLocation]; 
} 

我的問題是何時會didUpdateToLocation方法叫什麼名字?只有當我執行[locationManager startUpdatingLocation]時發現新位置?

當用戶在旅行和靜止時,我正面臨一些奇怪的問題。 假設用戶正在從A-點→B-> C-> D點行駛,點間距離爲1分鐘。當我在C點調用我的方法時,有時會返回A點的座標,有時會返回B點,有時會返回C.它只是隨機的。

當我靜止時更奇怪。即使我迷上了我家的WiFi,我也會撥打showLocation的方法獲得不同的座標。

我正在考慮實施didUpdateToLocation以獲得5secs以內的最佳結果。如果在5秒內,它找到了我定義的精度的特定位置,然後使用座標。如果沒有,請使用5秒內發現的最好時間。但是,因爲我是新手,我不確定如何編寫這樣的代碼。我讀了NSTimer,看起來它可能工作。

任何建議傢伙?

非常感謝!

回答

1

您從A點接收位置的原因之一是CoreLocation正在返回它的第一個有效位置,直到它可以獲得更準確的位置。當您致電[locationManager startUpdatingLocation];時,它會一直返回-didUpdateToLocation,直到您確認並最終致電-stopUpdatingLocation

我想你只是需要一點時間讓它在你停止更新你的位置之前得到一個更好的位置修復。我會考慮將停止更新位置從您的-didUpdateToLocation移到不同的方法。

0

刪除[locationManager stopUpdatingLocation];從您的代碼並嘗試。