Quando si utilizza CLLocationManager direttamente, si ottiene normalmente una posizione memorizzata nella prima callback. Normalmente è una buona posizione, anche se vecchia. Dopodiché puoi ottenere rapidamente ulteriori callback che offrono posizioni migliori utilizzando la rete wifi, cella tower (se disponibile). Se hai richiesto la precisione di < 1000m (dopo più secondi) otterrai la triangolazione GPS.
Nessuno di questi dovrebbe essere abbastanza preciso da trovarsi nel mezzo dell'oceano. Ho il sospetto che il questa riga di codice:
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
sta accedendo la coordinata mentre userLocation
o location
è nil
. Se userLocation
o location
è nulla, questo restituirà 0 coordinate. La posizione di lat = 0, lon = 0 si trova nell'Oceano Atlantico, al largo della costa africana.Si potrebbe aggiungere un controllo di location
per assicurarsi che non è pari a zero prima di ottenere la coordinata da esso, vale a dire:
if (self.mapView.userLocation.location) {
self.mapView.centerCoordinate = self.mapView.userLocation.location.coordinate;
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
}
Si vuole anche aspettare che richiami alla MKMapViewDelegatemapView:didUpdateUserLocation:
di sapere quando c'è una posizione valida a disposizione. La tua implementazione di didUpdateUserLocation:
dovrebbe eliminare qualsiasi posizione che abbia uno che indica una posizione non valida.
-(void)mapView:(MKMapView*)mapView didUpdateUserLocation:(MKUserLocation*)userLocation
{
if (userLocation.location.horizontalAccuracy > 0) {
[mapView setCenterCoordinate:self.mapView.userLocation.location.coordinate zoomLevel:ZOOM_LEVEL animated:YES];
}
}
Ehi, hai mai trovato una soluzione a questo problema? La posizione in lat: 0.0 e long: 0.0? – mbogh
Ho riscontrato lo stesso problema, ma ci sono poche informazioni online su come risolverlo. Sono curioso di sapere se c'è un modo più pulito oltre a usare l'ultima posizione conosciuta. –