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?).
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
Es gibt keine Garantie, dass die Genauigkeit mit der Zeit oder in den kommenden Updates vom Standortmanager zunimmt .. es könnte sogar untergehen .. –