2010-07-20 4 views
8

Ho una vista mappa dove voglio tracciare la posizione corrente dell'utente. Le mie impostazioni del telefono sono attivate da GPS e "Usa reti wireless". Tuttavia, dato che sono al coperto, non ho una correzione GPS, quindi la posizione viene determinata tramite la rete; il punto wifi è disponibile.Google Maps e le app con mapview hanno posizioni correnti diverse

Ho l'app di Google Maps in esecuzione e la mia applicazione in esecuzione.

Stranamente, la posizione corrente differisce tra Google Maps e la mia applicazione, in cui Google Maps è molto preciso mentre nella mia app la posizione è in qualche modo fuori da pochi metri.

Nella mia domanda ho praticamente effettuare le seguenti operazioni (per ora il debug):

1) inizialmente posizionare un indicatore sulla mappa: GEOPOINT recuperato tramite locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

2) inizialmente posto un altro indicatore sulla mappa : geopoint recuperato tramite locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

In questo modo verranno collocate le ultime posizioni note di entrambi i provider sulla mappa (l'ultima volta è noto al di fuori della mia app).

3) poi per gli aggiornamenti regolari (dal momento che non ottengono un GPS fix comunque coperta e riscaldata), mi fanno:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener); 

Si può vedere per la frequenza e la distanza passo il 0 param in entrambi i casi.

Nel manifesto app, sono concesse le autorizzazioni seguenti:

android.permission.ACCESS_COARSE_LOCATION 
android.permission.ACCESS_FINE_LOCATION 
android.permission.ACCESS_MOCK_LOCATION 

In realtà il mio baseLocationListener venga chiamato, che vedo nel registro, ma la posizione aggiornata è in qualche modo lo stesso come l'ultima posizione corrente nota (di LocationManager.NETWORK_PROVIDER), stesso lat/lng.

Ho pensato che forse ho trascurato qualcosa o ho perso un parametro o un'impostazione, o il mio codice ha un bug. Pertanto ho installato alcune altre (3 in totale) app LBS dal mercato Android che mostrano anche la posizione dell'utente corrente. Le posizioni correnti visualizzate in quelle app sono uguali a quelle nella mia applicazione - e sono tutte a circa 100 metri di distanza - ma almeno lo stesso.

vedi screenshot qui: screenshot http://img33.imageshack.us/img33/8679/mapproblem.png

http://img33.imageshack.us/img33/8679/mapproblem.png

Ora mi chiedo:

1) a quanto ho capito, getLastKnowLocation è e non app-larga, perché sono a livello di sistema ci sono differenze tra la posizione in Google Maps e tutte le altre app?

2) Google Maps non aggiorna la posizione lastKnown di un provider?

3) Google Maps utilizza un diverso provider di percorso personalizzato (vale a dire a causa di motivi di licenza) diverso GPS_PROVIDER o NETWORK_PROVIDER come sono nel SDK?

4) come ottenere lo stesso risultato accurato con NETWORK_PROVIDER come fa Google Maps?

+0

È possibile che Google Maps stia utilizzando l'ultima posizione ricevuta dal GPS, poiché via rete sa che non sei andato molto lontano? In altre parole, l'app di google maps sa che sei entrato (dal momento che il GPS è andato via ma la posizione di rete è ancora disponibile), quindi memorizza l'ultimo punto GPS conosciuto e lo usa? – Nate

+0

Io non la penso così. Ho eseguito tutte le applicazioni allo stesso tempo, pertanto la posizione non dovrebbe differire allo stesso tempo. Solo pochi minuti fa l'ho testato anche fuori e sono andato su un autobus per una distanza maggiore. Le tessere API di google maps sono decisamente imprecise, vedi sotto la mia risposta che in pratica lo dimostra. Inoltre, ho provato con il GPS completamente spento usando un solo GSM/Wifi, il risultato è lo stesso. Inoltre, getLastKnowLocation è a livello di sistema, non a livello di applicazione. Se Google Maps lo utilizza, dovrei anche ottenere la stessa posizione nella mia app. –

+0

In effetti, probabilmente ottengo lo stesso lat/lng da getLastKnowLocation come fa Google Maps, ma è semplicemente visualizzato in modo errato su piastrelle di mappe imprecise e diverse (vedi la risposta sotto come esempio dal web api). Aggiornamento –

risposta

2

Penso di aver trovato una risposta, anche se non una soluzione. Sembra che il problema sia nella qualità dei dati dei diversi provider di mappe utilizzati per Google Maps e MapView in SDK, che differiscono.

Le coordinate della mappa non sembrano molto precise, proprio come nelle pubbliche google maps web api/tiles.

Vedere questa schermata per un esempio, in cui ho bloccato lo stesso punto geografico. screenshot http://img339.imageshack.us/img339/2793/gmaps2.png http://img339.imageshack.us/i/gmaps2.png/

La mappa utilizzando la mappa pubblica API è fuori a poche centinaia di metri. Sembra che dobbiamo solo conviverci ?! :(

+0

: è interessante notare che la vista satellitare sembra abbastanza accurata, solo la vista stradale non lo è.Significa che il satellite sovrapposto con street view non sembra corrispondere, probabilmente a causa di diversi fornitori di contenuti cartografici. Meglio usare sempre la vista satellitare, almeno nelle zone rurali dove il materiale della mappa è impreciso. –

0

Le immagini Mappa e satellitari in Google Maps è fuori da un paio di metri, ma non credo che dovrebbe essere fuori più di tanto. Questo sembra essere un paio di centinaia di metri.

A seconda come è stato acquistato la vostra posizione detterà quale posizione si ottiene. Da quello che ho capito, questi sono i tre livelli di acquisizione.

  • GPS
  • rete
  • WIFI

GPS e rete sono determinati dalla triangolazione. Il GPS è il più preciso. Il WIFI viene eseguito utilizzando un "whois", un indirizzo viene acquisito e quindi geocodificato, a volte completamente inaccurato.

Alcuni telefoni dicono che sono il GPS, ma sono molto probabilmente Pseudo-GPS come l'iPhone 1.

+0

Grazie per la spiegazione, ma in realtà non spiega il comportamento che ho menzionato sopra. "Google Maps" non è il problema, infatti, su Google Maps, la posizione è molto accurata, è solo con MapView all'interno della mia app. Naturalmente, la precisione di gps, wifi e gsm differiscono (una buona descrizione è qui btw: http://forum.sdx-developers.com/android-2-1-development/cdma-lockup-wifi-use-wireless- networks-and-gps!/msg22834/# msg22834), ma dovrebbe essere uguale a Google Maps e al mio MapView nella mia app. Vedi la mia risposta qui sotto e i commenti sopra, questa è la spiegazione logica che ho trovato. –

+0

> "Questo sembra essere un paio di centinaia di metri.": Ma in effetti: pochi metri hundert sono importanti se la tua app sta facendo la navigazione pedonale in una città in cui le strade sono tutte vicine. Con centinaia di metri di distanza l'intera navigazione è inutile. –

2

So che il tuo post è di un anno di età, ma la risposta che penso è che: Google dati della mappa in La Cina è compensata o distorta. Ho notato che sei nel sud della Cina. Il governo cinese lo richiede per alcuni motivi di sicurezza. Here is the Google search results.

L'algoritmo di trasformazione è sconosciuto. Probabilmente puoi Google e ti auguro buona fortuna.

+0

Ciao Frank, grazie per il suggerimento, non ne ero consapevole, ma ha senso. –