tiny little gizmos

Standortbestimmung in Websites für Smartphones

Im Moment bastele ich an einer neuen Version von zzap – meinem Micromessaging Tool, das ich zwischen 2005 und 2008 entwickelt hatte. Zu jeder Nachricht soll dabei der Ort gespeichert werden, an dem die Nachricht versendet wurde.

Das ist eigentlich kein Problem mehr, seit die modernen Smartphones HTML 5 mit der geolocation API unterstützen. Die Methode

navigator.geolocation.getCurrentPosition

wird mit den Namen von zwei Callback Functions für success und error aufgerufen, an die dann das Positionsobjekt mit Angabe zu Längen- und Breitengrad übergeben wird. Interessierten sei hier die offizielle Dokumentation nahegelegt (W3C: Geolocation API Specification).

Eigentlich ganz einfach. Genau – eigentlich!

Der Teufel steckt natürlich mal wieder im Detail. Eine entsprechende Seite war schnell gebaut. zur Darstellung der Karte verwende ich OpenStreetMaps und alles wäre so schön – wenn die zurückgelieferten Koordinaten nicht so schrecklich ungenau wären.

Warum so ungenau?

Ich habe in den letzten zwei Wochen etliche Positionsbestimmungen in Berlin (Kreuzberg, Mitte, Prenzlauer Berg), Hannover und Kirchhorst (einem Vorrort von Hannover) und im Stau auf der A2 ausprobiert. Die Ergebnisse lagen häufig um bis zu 200-300m daneben – egal ob im hochverdichteten Kreuzberg oder auf dem Land. Manchmal stimmten sie aber auch bis auf 5m.

Ich hatte zunächst mein Handy – ein immer nocht recht aktuelles HTC Desire S mit Android 2.3.5 im Verdacht. Andererseits funktioniert die Peilung bei Google Maps sehr schnell und präzise.

Immer exakt gleich falsch

Als ich mir dann die Daten ansah, entdeckte ich, dass ich bei den Meldungen aus Kirchhorst immer um ca. 300m auf den Acker verschoben wurde – und zwar bis auf 8 Nachkommastellen immer auf exakt dieselbe falsche Position. Das machte mich dann doch etwas stutzig. Bei Recherchieren fand ich dann den Artikel „Präzise GPS-Daten über die W3C Geolocation API bekommen“ von Rolf Dormann. Seine zusammenfassende Erkenntnis (Zitat):

  1. Es ist möglich, über die W3C Geolocation API an die GPS-Daten zu kommen.
  2. Die ersten Daten, die die beiden dafür vorgesehenen Methoden liefern, sind nie GPS-Daten.
  3. Irgendwann kommen GPS-Daten.
  4. Über einen einmaligen Aufruf von getCurrentPosition kommt man nicht an GPS-Daten.

Mann bekommt zwar sehr schnell Positionsdaten, allerdings aus einer Funkzellenabfrage. GPS Daten kommen erst später, und man muss die Position dazu mehrfach abfragen.

So – und damit soll man nun eine intuitive, schnelle Mobile Website bauen, die dann auch noch auf allen wichtigen Geräten funktioniert. grrrr…