2009-02-24 4 views
6

Sto sperimentando con l'aggiunta della funzionalità GPS alla mia app per iPhone. È un'app di allenamento che verrà utilizzata mentre si cammina o si corre. Quindi quello che voglio usare il GPS è mostrare la velocità che la persona sta muovendo in Mph e in minuti/miglia.iPhone CoreLocation: come ottenere la velocità più precisa

Come configurare CLLocationManager in modo da ottenere i migliori risultati possibili? Cosa dovrei impostareAccuratezza e filtro della distanza desiderati?

ho provato con:

distanceFilter = 10 e desiredAccuracy = kCLLocationAccuracyNearestTenMeters

e la lettura

proprietà CLLocation.speed

test durante la guida in giro con la mia macchina l'accuratezza sembra buona rispetto al tachimetro dell'auto anche se ci vuole un po 'per l'aggiornamento. Mi rendo conto che il ritardo di aggiornamento potrebbe essere il tempo necessario per interrogare la posizione GPS, ma non sono sicuro che la modifica dei due parametri precedenti darebbe risultati migliori.

Devo usare kCLLocationAccuracyBest e qualche altro valore per distanceFilter?

Sono interessato a conoscere altri utenti che utilizzano CoreLocation per ottenere velocità. Cosa stai facendo per ottenere risultati più accurati?

risposta

3

Disclaimer: Ho giocato solo con CoreLocation un po ', non ho testato la precisione molto da vicino.

Mi aspetto che otterresti i risultati più accurati utilizzando i valori predefiniti per distanceFilter e l'accuratezza desiderata. Gli aggiornamenti meno frequenti ti daranno meno dati con cui lavorare.

Un problema che potresti incontrare è quando la correzione della posizione viene persa per un po ', quindi torna indietro. L'approccio ingenuo e connettivo dei punti per calcolare la distanza percorsa tenderà a sottostimare la velocità effettiva del corridore. Anziché utilizzare CLLocation.speed, è possibile ottenere risultati migliori calcolando la velocità in base ad un'approssimazione euristica della linea che il corridore sta effettivamente seguendo.

5

Per risultati ottimali, è necessario utilizzare kCLLocationAccuracyBest. Ciò che inserisci nel tuo filtro a distanza dipende da quali errori sei disposto a inserire. Fondamentalmente, dovrai prendere decisioni basate sull'accuratezza e sulla disponibilità. Cioè, durante i periodi in cui una risposta migliore non è disponibile, cosa visualizzerai?

Un approccio è lasciare che il telefono fornisca risposte meno accurate e, utilizzando una proiezione di ciò che stava accadendo l'ultima volta che si sono avute le informazioni di massima accuratezza, vedere se ciò che si ha è sensato.

Cioè, supponiamo di fare jogging a 6 miglia orarie a nord. Mi trama lungo il punto A, punto B, punto C ... poi ottieni una risposta di bassa precisione (forse kCLLocationAccuracyNearest100Meters.) Guarda il punto in cui si dice che sono e capisco "potrei aver ottenuto quello punto dal punto-C se avessi continuato il mio percorso attuale, apportando adeguamenti ragionevoli per possibili cambiamenti di velocità? " Se è così, allora il nuovo punto è nel regno della possibilità. (Se no, allora buttalo fuori.) Quindi proietta dal punto C alla mia ultima velocità nota e scopri dove penso che io sia probabilmente, in modo balistico. Salvalo come punto balistico-D.

Ovviamente, stai usando l'accelerometro per ottenere una sorta di senso inerziale del modo in cui sono andato, giusto?Quindi, non puoi sapere la direzione (non sai in che direzione sta puntando il telefono), ma puoi fare una ragionevole pugnalata a distanza.

Utilizzando tutte queste informazioni, traccia il punto più probabile in cui pensi che io sia probabilmente.

NOTA: durante i test, non guidare solo in aree con copertura a celle buone. Guarda come si svolge la tua app in collina, lontano dai telefoni cellulari. A molte persone piace andare in bicicletta & fare jogging in quelle zone!