2011-11-26 18 views
9

Ho un'app di servizio di localizzazione, in cui viene fornita l'elevazione dell'utente. Ho trovato, tuttavia, che la precisione di elevazione fornita da CLLocationManager è estremamente imprecisa. Quando provo gli stessi due punti due volte, a volte la differenza di elevazione è di quaranta piedi e qualche volta è cento. Esiste un modo per migliorare l'accuratezza verticale della CLLocation o esiste un modo diverso di acquisire l'elevazione dell'utente (librerie di terze parti)? Ho già provato a verificare la proprietà verticalAccuracy della nuova posizione fornita da CLLocationManager e a lanciarla se non è sufficiente, ma anche quando è abbastanza "accurata", spesso non è ancora accurata. Grazie per il tuo tempo!Precisione elevazione CLLocation

Proprio ora sto usando:

if([newLocation verticalAccuracy] < 30) { 
    if(isCustomary) 
     altitudeLabel.text = [NSString stringWithFormat:@"%.2f feet", ([newLocation altitude] * 3.2808399)]; 
    else 
     altitudeLabel.text = [NSString stringWithFormat:@"%.2f meters", [newLocation altitude]]; 
} 

Problemi con quel codice: spesso il verticalAccuracy non viene mai sotto i 30, e quando lo fa, che non è ancora neppure vicino ad abbastanza precisi; Ho provato il codice che gira per casa mia (una storia), e dice che l'altitudine cambia fino a diciannove piedi, il che, ne sono certo, non è vero.

risposta

22

L'elevazione derivato dai satelliti GPS è intrinsecamente meno preciso che la soluzione orizzontale dal GPS a causa della geometry dei satelliti . Dovresti aspettarti che la precisione verticale sia in genere circa da 1,5 a 3 volte peggiore della precisione orizzontale. Questa è solo una limitazione del GPS e il motivo per cui l'aviazione richiede la correzione WAAS prima di poter utilizzare il GPS per approcci strumentali.

Quando la precisione verticale è di 20 o 30 metri, è necessario aspettarsi che l'altitudine si spenga fino a 100 piedi. Mi aspetto di non variare di 19 piedi mentre cammini per la casa in modo non realistico.

Quello che si potrebbe fare è mantenere una media ponderata (o uno Kalman filter) delle ultime "buone" letture dell'altitudine per aiutare a filtrare gli errori di misurazione.

+0

Sì, questa sembra essere la sfortunata verità. +1 per una buona spiegazione e un buon link. –

2

Che codice hai provato? Questo è il codice migliore per l'elevazione in modo da non penso che ci sia qualcosa al di là di questo:

-(void)awakeFromNib { 
    locmanager = [[CLLocationManager alloc] init]; 
    [locmanager setDelegate:self]; 
    [locmanager setDesiredAccuracy:kCLLocationAccuracyBest]; 
    [locmanager startUpdatingLocation]; 
} 

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    heightMesurement.text = [NSString stringWithFormat: @"%.2f m", newLocation.altitude]; 
} 

    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
    heightMesurement.text = @"0.00 m"; 
} 
+0

Vedere la mia modifica, per favore –

+0

Quello che consiglio è solo di usare il mio codice perché questa è la migliore precisione possibile con iDevices. È ancora un telefono e la precisione non è eccezionale a causa delle limitazioni fisiche. –

Problemi correlati