2010-07-20 4 views
8

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?

+0

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

+0

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

+0

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). –

Antwort

2

Ich denke, ich fand eine Antwort, obwohl keine Lösung. Es scheint, dass das Problem in der Datenqualität der verschiedenen Kartenanbieter, die für Google Maps und MapView in SDK verwendet werden, die sich unterscheiden.

Die Koordinaten der Kartenkacheln scheinen nicht sehr genau zu sein, genau wie in den öffentlichen Google Maps Web API/Kacheln.

Siehe diesen Screenshot für ein Beispiel, wo ich den gleichen Geo-Punkt festlegte. screenshot http://img339.imageshack.us/img339/2793/gmaps2.png http://img339.imageshack.us/i/gmaps2.png/

Die Karte, die Öffentlichkeit Karte api mit ein paar hundert Meter weg. Scheint, wir müssen nur damit leben?! :(

+0

Update: Interessanterweise scheint die Satellitenansicht ziemlich genau zu sein, nur die Straßenansicht ist nicht korrekt.Mittel, die Satelliten mit Blick auf die Straße überlagern, scheinen nicht zusammen zu passen, wahrscheinlich aufgrund verschiedener Anbieter von Karteninhalten. Am besten ist es immer Satellitenbilder zu verwenden, zumindest in ländlichen Gebieten, in denen Kartenmaterial ungenau ist. –

0

Die Karte und Satellitenbilder in Google Maps durch ein paar Meter weg, aber ich glaube nicht, dass es viel weg sein sollte. Dies scheint ein paar hundert Meter.

Je nach wie Sie erworben Ihre Position wird diktieren, welche Position Sie erhalten. von dem, was ich verstehe, das sind die drei Ebenen des Erwerbs.

  • GPS
  • Netzwerk
  • WIFI

GPS und Netzwerk werden durch Triangulation bestimmt. GPS ist am genauesten. WIFI wird mit einem "Whois" durchgeführt, eine Adresse wird erfasst und dann geocodiert, was manchmal völlig ungenau ist.

Einige Telefone sagen, dass sie GPS sind, aber sie sind höchstwahrscheinlich Pseudo-GPS wie das iPhone 1.

+0

Danke für die Erklärung, aber es erklärt nicht wirklich das oben erwähnte Verhalten. "Google Maps" selbst ist nicht das Problem, in der Tat, auf Google Maps, ist der Standort sehr genau, es ist nur mit MapView in meiner App. Natürlich unterscheiden sich die Genauigkeit von GPS, WiFi und GSM (eine gute Beschreibung ist hier btw: http://forum.sdx-developers.com/android-2-1-development/cdma-lockup-wifi-use-wireless- networks-and-gps!/msg22834/# msg22834), aber es sollte dann für Google Maps genauso sein wie für mein MapView in meiner App. Siehe meine Antwort unten und Kommentare oben, das ist die logische Erklärung, die ich gefunden habe. –

+0

> "Das scheint ein paar hundert Meter zu sein.": Aber in der Tat: ein paar hundert Meter spielen eine Rolle, wenn Ihre App in einer Stadt, in der sich alle Straßen in der Nähe befinden, Fußgänger navigiert. Bei hundert Metern Entfernung ist die gesamte Navigation nutzlos. –

2

Ich kenne Ihre Post von einem Jahr alt ist, aber die Antwort ist meiner Meinung nach, dass: Google Kartendaten in China wird ausgeglichen oder verzerrt. Ich merke, dass du in Südchina bist. Die chinesische Regierung verlangt dies aus Sicherheitsgründen. Here is the Google search results.

Der Transformationsalgorithmus ist unbekannt. Wahrscheinlich können Sie es googlen und wünschen Ihnen viel Glück.

+0

Hallo Frank, danke für den Hinweis, mir war das nicht bewusst, aber es macht Sinn. –

Verwandte Themen