iOS CoreLocation Altitudine
-
28-10-2019 - |
Domanda
Prima di iOS 4.0, CoreLocation
è stato segnalato correttamente l'altitudine, ora è sempre rapporti 0 ft.
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude];
NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude];
/* the following returns 0 */
NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude];
/* theres more code, but it's not relevant,
and this worked prior to iOS 4.0*/
[manager stopUpdatingLocation];
}
Non funziona sul Dispositivo né Simulatore, qualcun altro riscontra questo problema?
Soluzione
Se si sta utilizzando startMonitoringSignificantLocationChanges
, che è una nuova funzionalità di iOS 4.0, quindi non sarà possibile ottenere altitudine aggiornamenti.Questa modalità di basso consumo energetico solo gli usi antenne per capire la posizione dell'utente, e questo metodo non rapporto di altitudine.
Più in generale, l'iPhone ha tre modi di capire la tua posizione-torri cellulari, wi-fi e il GPS.Si otterrà solo la quota quando il GPS è utilizzato.Quindi, anche se si imposta la vostra desiredAccuracy
impostazione per essere precisi per forzare il dispositivo per utilizzare il GPS, se un utente è all'interno di iPhone, probabilmente non sarà in grado di ottenere un segnale GPS e di fallback per cellulare o wi-fi.In questo caso, non si ottiene un'altitudine.Anche prendere in considerazione gli utenti che sono su un iPod Touch -- ha solo la possibilità di ottenere una posizione tramite wi-fi, e quindi anche non segnalare un'altitudine.
Altri suggerimenti
Due cose che potresti provare. Prima di tutto, prova a impostare il gestore della posizione desiredAccuracy
a kCLLocationAccuracyBest
.
Se questo non funziona, prova a rimuovere [manager stopUpdatingLocation];
, e metti un NSLog
nel didUpdateToLocation
con l'altitudine. A volte deve restringere un po 'prima che mostri l'altitudine.
Dal Riferimento dei tipi di dati sulla posizione principale:
Il CLLocationDistance
Tipo di dati (il tipo di dati per l'altitudine) è un double
. Il formatter che stai usando per il tuo stringWithFormat
è un integer
. Devi lanciare la tua altitudine su un integer
, prima, o usa un file double
(%f) formatter.
La posizione principale non riporta sempre l'altitudine immediatamente. Di solito controllo un'altitudine zero nel mio metodo delegato "successo". Se l'altitudine è ancora 0, continuo a controllare, altrimenti, giro di Corelocation.