2012-04-12 9 views
1

Hintergrund: Ich möchte Benutzern erlauben, ihre Position innerhalb von Sekunden zu bekommen, wenn sie es wollen. Der Standort ist jedoch meistens ungenau. Ich möchte den Benutzer fragen, ob sie es erneut für eine genauere Adresse versuchen möchten.iOS: Genaue Reverse-Geokodierung mit CLLocationManager erhalten?

Frage: Wie man so programmiert, dass es garantiert, dass die nächste Schätzung, immer besser als die letzte Schätzung ist.

Was ich versucht habe:

CLLocationManager *locationManager; 

- (CLLocationManager *)locationManager { 
    if (locationManager != nil) { 
     return locationManager; 
    } 
    locationManager = [[CLLocationManager alloc] init]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
    [locationManager setDelegate:self]; 
    return locationManager; 
} 

-(void)myLocationClickedWithCount: (int) count{ 
    [[self locationManager] startUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    CLGeocoder *locationGeocoded = [[CLGeocoder alloc] init]; 
    [locationGeocoded reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
     if (!placemark){ 
      if (count > 0){ 
       //placemark not available, try again after 1 second 
       sleep(1); 
       [self myLocationClickedWithCount:count-1]; 
      } 
      else{ 
       //Unable to get location after 3 tries 
       UIAlertView *locationNotFoundAlert = [[UIAlertView alloc]initWithTitle:@"Unable to Locate" message:@"Would you like to try again?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
       locationNotFoundAlert.tag = locationNotFoundAlertTag; 
       [locationNotFoundAlert show]; 
      } 
     }else{ 
      // got location but not accurate. 
      if (location.horizontalAccuracy > accuracyRadius) { 
       UIAlertView *locationInaccurateAlert = [[UIAlertView alloc]initWithTitle:@"Inaccurate Location" message:[NSString stringWithFormat:@"Your GPS shows the radius of %.2f meters. Would you like to try again?",location.horizontalAccuracy] delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
       locationInaccurateAlert.tag = locationInaccurateAlertTag; 
       [locationInaccurateAlert show]; 
      }else { 
       address.text = placemark; 
      } 
     } 
    }]; 
} 

aktualisieren Wenn der Benutzer wieder fragt, kann es etwas länger dauern, zu erraten. Ich möchte nur wissen, wie ich es programmieren soll. IE: Soll ich wieder [[self locationManager] startUpdatingLocation]; anrufen? oder wird das meinen Standort so weit zurücksetzen. Also, wie kann ich meine Schätzung das zweite Mal basierend auf den aktuellen Informationen verbessern, die GPS hat (je länger GPS ist, desto besser ist die Genauigkeit?).

Antwort

1

gibt es nicht viel können Sie in Bezug auf Genauigkeit über den Code tun ... abgesehen von

[locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

, die Sie schon ... Wie getan haben, soweit ich gesehen habe, wenn Sie auf 3G oder EDGE sind als Ihre Genauigkeit erhöht sich beträchtlich (Genauigkeitsniveau von 5-10m kann erreicht werden).

Sie this Artikel von Apple beziehen können, der spricht, wie die iphone GPS-Genauigkeit arbeitet ...

die Hoffnung, das hilft ..

+0

Danke für den Link. Ich habe Angst zu sagen, dass es nicht hilft, meine Frage zu beantworten. Bitte beziehen Sie sich zur Klärung auf meine aktualisierte Frage. – Byte

+1

Es gibt keine Garantie, dass die Genauigkeit mit der Zeit oder in den kommenden Updates vom Standortmanager zunimmt .. es könnte sogar untergehen .. –

Verwandte Themen