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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top