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?
È 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
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. –
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 –