Alle Browser, die nicht mehr aus der digitalen Steinzeit stammen (Internet Explorer 9, Firefox 3.5 und Google Chrome), sind in der Lage, über die offiziell von der W3C zur Verfügung gestellte Geolocation API eine Angabe dazu zu machen, an welchem Standort sich der User befindet.
Wie wird der Standort per Geolocation API ermittelt?
Die Standortermittlung per HTML5 ist relativ komplex und ausgereift und durchläuft eine Reihe von Schritten zur Ermittlung mit aufsteigender Genauigkeit:
- IP-Adresse
- WLAN-Netzwerke
- Funk-Signale (Mobilfunk)
- GPS-Sender (nur bei ‚enableHighAccuracy‘)
Sehr genau klappt die Ermittlung des Standortes, wenn der User in seinem Endgerät über ein GPS Sender verfügt. Das ist natürlich bei stationären PCs praktisch nie der Fall; jedoch verfügt jedes gängige Smartphone heutzutage über ein GPS Modul und kann damit – auch an den Browser – eine exakte Positionsbestimmung liefern. Auch Informationen aus dem WLAN und dem Mobilfunk werden herangezogen, falls keine GPS Daten vorliegen. Erst im schlimmsten Falle greift der Browser auf die IP Adresse zu, die jedoch aufgrund der Nutzung von Einwahlknoten eine Ungenauigkeit von 50-100km haben kann.
Aktuellen Standort bestimmen mit getCurrentPosition()
Um die Positionsbestimmung anzustoßen, genügt der Zugriff auf das Navigator-Object (window.navigator):
navigator.geolocation.getCurrentPosition(function(position){
// wenn Position ermittelt werden konnte, liefert
//'position.coords.latitude' und 'position.coords.longitude'
//die entsprechenden Längen- und Breitengrade
}, function () {
// der zweite Funktionsteil wird ausgeführt, wenn keine
//Positionsermittlung stattfinden konnte
}
Das „position“ Objekt verfügt dabei über die folgenden Eigenschaften:
Beispiel zur Standortbestimmung mit der HTML5 Geolocation
Bei Laden dieser Seite sind Sie bereits vom Browser gefragt worden, ob Sie die Standortermittlung durch selfhtml5 zulassen möchten. Dieser Dialog ist browserabhängig und sieht (derzeit) in FireFox z.B. so aus:
Je nach dem, ob Sie die Zustimmung zur Standortbestimmung erteilt haben oder nicht, erscheint in der folgenden Box nun Ihre Position oder ein Fehlerhinweis.
Ihre vom Browser ermittelten Positionsdaten
lat | |
lon | |
altitude | |
accuracy |
Und hier der Code zum Geolocation-Beispiel
navigator.geolocation.getCurrentPosition(
function(position){
// wenn Positionsbestimmung geklappt hat:
document.getElementById('tdlat').innerHTML = position.coords.latitude;
document.getElementById('tdlon').innerHTML = position.coords.longitude;
document.getElementById('tdalt').innerHTML = position.coords.altitude+'m';
document.getElementById('tdacc').innerHTML = position.coords.accuracy+'m';
},
function(){
// wenn Positionsbestimmung einen Fehler erzeugt hat (z.B. weil Sie vom User ablehnt wurde).
document.getElementById('beispiel').innerHTML ='Die Position konnte nicht ermittelt werden';
}
)
Wie genau ist die Positionsbestimmung per Geolocation?
Wie wir gesehen haben, ist die Standortermittlung dank Geolocation-API kinderleicht. Etwas spannender wird es, wenn wir höhere Ansprüche an die Genauigkeit der Messdaten haben.
Wie in der Tabelle oben ersichtlich, liefert das Position-Objekt bereits eine Genauigkeit mit, die „accuracy“ in Metern, die die maximal mögliche Abweichung beziffern soll. Die Ergebnisse dieses Attributs können je nach verwendetem Endgerät sehr unterschiedlich ausfallen. Wichtig ist in diesem Zusammenhang auch, ob die Geolocation ausdrücklich mit hoher Genauigkeit (enableHighAccuracy) ermittelt werden soll wie im nächsten Kapitel geschildert.
Nachfolgend typische Genauigkeiten der Standortbestimmung per Geolocation:
Gerätetyp | Genauigkeit |
---|---|
PC | 2.000-140.000m |
Smartphone ohne GPS | 20-80m |
Smartphone mit GPS | 5-20m (mit enableHighAccuracy) |
Standortbestimmung mit hoher Genauigkeit durch „enableHighAccuracy“
Wenn man einen sehr genauen Standort ermitteln möchte, benötigt man dafür nach derzeitigem Stand der Technik noch immer GPS. Die nützlichen Chips sind mittlerweile in allen modernen Smartphones verbaut und daher grundsätzliche eine hervorragende Wahl für die Standortbestimmung, wenn es da nicht einige Einschränkungen zu beachten gäbe:
- GPS Tracking ist energieintensiv und verkürzt die Akkulaufzeit erheblich
- Die Standortbestimmung über GPS benötigt eine Initialitsierungsphase von bis zu 15 Minuten, wenn die letzte GPS-Verwendung lange her ist, bevor Ergebnisse zur Verfügung stehen. Im gängigen Smartphone-Alltag sind jedoch häufig relativ aktuelle Satellitendaten verfügbar und die Messung dauert üblicher Weise zwischen 10 und 30 Sekunden.
- Der User muss ggf. der exakten Standortbestimmung ein weiters Mal zustimmen, da es sowol in Browsern, als auch iOS und Android dafür separate Rechte gibt
Wenn trotz dieser Einschränkungen die Standortbestimmung über GPS sinnvoll oder notwendig ist, kann die Verwendung der GPS Module durch die Übergabe des Parameters enableHighAccuracy aktiviert werden:
navigator.geolocation.getCurrentPosition(function(position){
successFunction(position),
errorFunction(),
{
timeout: 0,
enableHighAccuracy: true,
maximumAge: Infinity
}
});
Probleme bei der HTML5 Standortermittlung per Geolocation
Die W3C schreibt vor, dass die Standortermittlung nur nach ausdrücklicher Zustimmung des Users erfolgen darf. Die Browseranbieter haben das entsprechend umgesetzt – das bedeutet, dass je nach Browser eine Warnmeldung aufpopt oder sich unter der Adresszeile (mitunter schwer sichtbar) einschiebt und den User fragt, ober er die Standortdaten ermittelt haben möchte.In der Praxisanwendung sollte man als Entwickler daher darauf achten, an der geeigneten Stelle auch selbst darauf hinzuweisen, dass der Service nur nach Akzeptierung der Standortübermittlung funktioniert.
4 Antworten auf Standort im Browser ermitteln per HTML5 Geolocation API