2011-11-07 10 views
5

Sto avendo il seguente problema nel mio iPhone app:Location Manager che dà vecchie posizioni con nuovi timestamp

ho attivare il manager di posizione su una base regolare e io attendere per più aggiornamenti di posizione. Quando si riceve una nuova posizione, verifico la proprietà timestamp della nuova posizione di sapere se si tratta di una vecchia posizione o no:

Il problema che sto avendo ora è che ricevo nuovi luoghi in cui il timestamp è nuovo ma le coordinate sono ancora vecchie posizioni che ho ricevuto in precedenza. Ho provato questo quando guidavo la mia macchina a 120 km/h ricevendo le stesse coordinate più volte ma con timestamp diversi. Sto riscontrando lo stesso problema in iOS 4 & 5.

Com'è possibile? O come posso affrontare questo problema?

+0

per quale precisione si chiede al gestore di cllocation? – jackslash

+0

@jackslash: utilizzo 'desiredAccuracy = kCLLocationAccuracyBest' – wjans

+0

Si prega di postare l'implementazione di' -locationManager: didUpdateToLocation: fromLocation: '. –

risposta

1

Ci sono alcuni modi in cui un iPhone ottiene la sua posizione.

  • segnale della cella
  • punti di accesso wifi
  • satelliti GPS

Il più veloce location location di ricerca è il segnale cellulare. Finché disponi di dati recenti, la maggior parte delle torri locali verrà memorizzata nella cache. La precisione della torre cellulare può variare da 500 a 1500 metri o più.

Il secondo più veloce, a patto di disporre della connettività dati o di essere stato recentemente nell'area, è la ricerca wifi. Ciò fornirà una posizione molto accurata. L'avvertenza è che devi essere in wifi e avere un buon segnale di dati.

Il più lento è il GPS. Il GPS nell'iPhone è aGPS. Usa i dati dalle posizioni delle celle delle celle per ottenere una soluzione migliore sulla tua posizione. Se il telefono non dispone di una connessione dati e non è vicino alla rete Wi-Fi, questa operazione può richiedere da 2 a 4 minuti per ottenere una soluzione. Con le informazioni sulla torre cellulare possono essere necessari 30 secondi.

Dalla documentazione di mele:

Quando si richiede alta precisione i dati relativi all'ubicazione, l'evento iniziale erogata dal servizio di localizzazione non può avere la precisione richiesto. Il servizio di localizzazione consegna l'evento iniziale il più rapidamente possibile. Quindi continua a determinare la posizione con l'accuratezza richiesta e fornisce eventi aggiuntivi, se necessario, quando tali dati sono disponibili.

Nell'automobile è meno probabile che ci si trovi in ​​prossimità di posizioni wifi e potrebbe essere necessario attendere più a lungo per il blocco GPS. Se locationManager crede che tu sia ancora nel raggio della posizione precedente, ciò potrebbe causare una vecchia coordinata con un timestamp diverso.

Controllare l'accuratezza orizzontale dei dati e il timestamp per determinare se la posizione è precisa come richiesto.

+0

Ho persino riscontrato questo problema con una precisione orizzontale molto buona (cioè 47.42m). L'unico problema è che la posizione è vecchia ma il timestamp è cambiato. Capisco che venga memorizzato nella cache, ma poi mi aspetto che il timestamp sia il timestamp da quando la posizione è stata acquisita in precedenza e non quella aggiornata (più recente). In questo modo non riesco a identificare se non ho spostato o ricevuto una posizione cache più vecchia. – wjans

+0

Se la precisione orizzontale è valida e piccola e il timestamp è nuovo, sembra che potrebbe essere un bug. Se hai un Incidente di supporto tecnico rimasto con il tuo programma, potresti aumentarne uno. – jackslash

0

Cllocation responsabile per gli aggiornamenti di default posizione come

locationManager.distanceFilter = kCLDistanceFilterNone;

ed è per questo motivo che stai ottenendo coordinate duplicate. in realtà sta aggiornando i dettagli molto spesso anche quando c'è un cambiamento in ALTITUDINE.

Quindi migliore è che si deve impostare

locationManager.distanceFilter = 4.0f; 

// Questo invierà solo nuova posizione Aggiornare i dettagli quando u spostare ogni 4 metri dalla posizione corrente.

+0

hai risolto il tuo problema con questo lavoro? –

+0

Sì, il trucco – Manoj

+0

L'ho anche risolto con la combinazione di timestamp, frequenza orizzontale e filtro della distanza ..... Applausi :) –

Problemi correlati