Ich habe eine Mapview, wo ich den aktuellen Standort des Benutzers verfolgen möchte. Sowohl GPS als auch "drahtlose Netzwerke nutzen" ist in meinen Telefoneinstellungen aktiviert. Da ich in Innenräumen bin, bekomme ich kein GPS-Fix, daher wird der Standort über das Netzwerk bestimmt; WLAN-Spot ist verfügbar.Google Maps & Apps mit Mapview haben unterschiedliche aktuelle Positionen
Ich habe die Google Maps App ausgeführt sowie meine Anwendung ausgeführt.
Seltsamerweise unterscheidet sich der aktuelle Standort zwischen Google Maps und meiner Anwendung, wo die Google Maps sehr genau ist, während in meiner App der Standort irgendwie ein paar 100 Meter entfernt ist.
In meiner Anwendung ich im Grunde tun nach dem (für die Zwecke jetzt debuggen):
1) zunächst auf der Karte eine Markierung setzen: GeoPoint über locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
abgerufen
2) legen zunächst eine weitere Markierung auf der Karte : geopoint über locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
abgerufen. Dadurch werden die letzten bekannten Standorte beider Anbieter auf der Karte angezeigt (zuletzt von außerhalb meiner App bekannt).
3) dann für die regelmäßigen Updates (da ich kein GPS-Fix sowieso Innen hier) bekomme ich tun:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener);
Sie für die Frequenz und Entfernung sehen kann ich die 0 param passieren in beide Fälle.
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
Eigentlich mein baseLocationListener bekommt genannt, die ich im Protokoll zu sehen, aber die aktualisierte Lage ist irgendwie die gleiche wie die letzte bekannte aktuelle Position:
Im App-Manifest werden die folgenden Berechtigungen erteilt (von LocationManager.NETWORK_PROVIDER), gleiches lat/lng.
Ich dachte, vielleicht habe ich etwas übersehen oder einen Parameter oder eine Einstellung verpasst, oder mein Code hat einen Fehler. Daher habe ich einige andere (insgesamt 3) LBS-Apps aus dem Android-Markt installiert, die auch den aktuellen Nutzerstandort anzeigen. Die aktuellen Orte, die in diesen Apps angezeigt werden, entsprechen denen in meiner Anwendung - und sie sind alle etwa 100 Meter entfernt - aber immerhin gleich.
Siehe Screenshot hier: screenshot http://img33.imageshack.us/img33/8679/mapproblem.png
http://img33.imageshack.us/img33/8679/mapproblem.png
Jetzt frage ich mich:
1) wie ich sie verstehe, getLastKnowLocation ist systemweit und nicht app-breit, warum Gibt es Unterschiede zwischen dem Standort in Google Maps und allen anderen Apps?
2) aktualisiert Google Maps die lastKnownLocation eines Anbieters nicht?
3) verwendet Google Maps einen anderen benutzerdefinierten Standortanbieter (d. H. Aus Lizenzgründen) als GPS_PROVIDER oder NETWORK_PROVIDER, wie sie im SDK enthalten sind?
4) Wie erreiche ich das gleiche genaue Ergebnis mit dem NETWORK_PROVIDER wie Google Maps?
Ist es möglich, dass Google Maps nur den letzten Ort nutzt, den es von GPS bekommen hat, da es über das Netzwerk weiß, dass Sie nicht sehr weit gegangen sind? Mit anderen Worten, Google Maps App weiß, dass Sie hineingegangen sind (seit GPS weg ist, aber Netzwerkstandort ist immer noch verfügbar), und so speichert es den letzten bekannten GPS-Punkt und verwendet das? – Nate
Ich glaube nicht. Ich habe alle Anwendungen zur gleichen Zeit ausgeführt, daher sollte die Position nicht gleichzeitig abweichen. Vor ein paar Minuten habe ich es auch draußen getestet und bin auch in einen Bus für eine längere Strecke gegangen. Die Google Maps API-Kacheln sind definitiv ungenau, siehe meine Antwort unten, die es im Grunde irgendwie beweist. Auch ich habe mit GPS komplett aus einem nur mit GSM/Wifi getestet, es ergibt sich alles zu dem gleichen. Darüber hinaus ist getLastKnowLocation systemweit und nicht app-weit. Wenn Google Maps es verwendet, sollte ich auch die gleiche Position in meiner App bekommen. –
In der Tat, ich bekomme wahrscheinlich das gleiche lat/lng von getLastKnowLocation wie Google Maps, aber es wird nur falsch auf verschiedenen ungenauen Kartenkacheln angezeigt (siehe Antwort unten als ein Beispiel aus der Web-API). –