© saicle/Shutterstock.com
Geolocation und Geocoding mit PHP

Wo bin ich?


Das Internet wird mobil. Mittlerweile steckt in jedem Handy mehr Rechenleistung als in den ersten Computern, die die meisten von uns bedient haben. Immer mehr Menschen haben einen kleinen PC in ihrer Hosentasche. Dabei verlagern sich die Anforderungen an Webanwendungen: Sie sollen wissen, wo wir uns befinden, und nur noch die Informationen liefern, die uns jetzt gerade interessieren. Wo ist das nächste Kino? Wie finden andere den Italiener um die Ecke oder wo sind eigentlich gerade meine Freunde? Aber woher soll PHP das wissen?

Services, die geobasierte Informationen anbieten, schießen in den letzten Jahren wie Pilze aus dem Boden. In dieser dreiteiligen Artikelserie werden Sie lernen, wie Sie diese in Ihren PHP-Anwendungen einsetzen, um dem Benutzer Informationen zu seinem aktuellen Standort zu liefern. In dieser Ausgabe steht noch die Ermittlung der aktuellen Position im Vordergrund, in den nächsten beiden Ausgaben werden Sie dann APIs anbinden, die Ihnen weitere Daten zur aktuellen Position des Benutzers liefern.

Geografische Koordinaten

Um die Position eines Besuchers Ihrer Webseite zu bestimmen, müssen Sie sich ein bisschen mit der Theorie der geografischen Ortsbestimmung befassen. Um jeden Standort auf der Erde eindeutig zu bestimmen, wurde die Erde in 360 Längengrade und 180 Breitengrade unterteilt. Während die Breitengrade parallel zum Äquator verlaufen und auch von diesem aus gezählt werden, schneiden die Längengrade Nord- und Südpol und beginnen an einem willkürlich gewählten Nullmeridian. Dieser verläuft durch die Londoner Sternwarte Greenwich und wurde 1884 in der Internationalen Meridiankonferenz vereinbart, um das Problem der unterschiedlichen Nullmeridiane zu lösen. Mittlerweile arbeiten alle wichtigen geobasierten Dienste mithilfe dieser Längen- und Breitengrade, und jeder beliebige Ort auf der Erde kann über die Angabe einer geografischen Länge und Breite definiert werden. Dieser Artikel wurde zum Beispiel auf dem Längengrad 8.613226425 und Breitengrad 48.9697795025 geschrieben. Am Ende des Artikels werden Sie in der Lage sein, die entsprechende Adresse herauszufinden.

Geolocation mit HTML5

Mit HTML5 wurde ein API eingeführt, das es einer Webseite erlaubt, via JavaScript die aktuelle Position des Benutzers zu ermitteln. Dafür können verschiedenste Techniken (GPS, IP-Adresse etc.) eingesetzt werden, für den Nutzer des API ist das vollkommen transparent. Alles, was dazu nötig ist, ist ein einfacher Aufruf einer JavaScript-Methode: navigator.geolocation.getCurrentPosition(success, error);. Da die Ermittlung der aktuellen Position asynchron erfolgt, müssen zwei Callbacks an diese Methode übergeben werden: Der erste wird aufgerufen, wenn die Ermittlung der aktuellen Position abgeschlossen ist, die zweite Methode im Fehlerfall. Damit der Browser die Position ermitteln kann, muss zuerst der Benutzer um Erlaubnis gefragt werden, eine Webseite kann nicht auf Ihre Position zugreifen, ohne dass Sie dies zuvor erlauben. Wie diese Frage erfolgt, hängt vom Browser ab. Abbildung 1 zeigt die Abfrage im Safari. War die Ermittlung der Position erfolgreich, so wird die Callback-Funktion success aufgerufen und ein Objekt übergeben, in dem die aktuelle Position des Benutzers enthalten ist. Listing 1 zeigt Ihnen, wie Sie dieses Objekt weiter verarbeiten können. Sollte die Ermittlung nicht erfolgreich sein, so ruft der Browser die Callback-Funktion error auf und übergibt ihr ein Fehlerobjekt mit einem Fehlercode und einer Nachricht. Fehler können zum Beispiel die Weigerung des Benutzers sein, die Position durch die Applikation ermitteln zu lassen, sowie ein Timeout oder ein Fehler bei der Ermittlung der Position.

Schmidt_Geolocation_001.tif_fmt1.jpgAbb. 1: Die Ermittlung der Position muss immer vom Benutzer erlaubt werden

Die Geolocation wird in den meisten modernen Browsern bereits unterstützt (Tabelle 1), überprüfen können Sie die Unterstützung ganz einfach durch Abfragen der geolocation-Eigenschaft des navigator-Objekts:

if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success, error); } else { alert('Ihr Browser unterstützt keine Geolocation.'); }

Browser

Geolocation ab

Firefox

3.5

Internet Explorer

9.0

Safari

5.0

Chrome

5.0

Opera

10.6

iPhone

3.0

Android

2.0

Tabelle 1: Geolocation-Unterstützung in den verschiedenen Browsern

Das Geolocation-API erlaubt es Ihrer Applikation auch zu definieren, wie genau die Ermittlung der Position sein muss, und auch auf eine Positionsänderung zu reagieren. Weitere Informationen zum API finden Sie unter [1] und [2].

Listing 1

function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success, error); } else { alert('Ihr Browser unterstützt keine Geolocation.'); } } function success(position) { var text = "Längengrad : " + position.coords.longitude + "\n" + "Breitengrad : " + position.coords.latitude + "\n" + "Genauigkeit : " + position.coords.accuracy; alert(text); } function error(error) { var text = "Fehlercode : " + error.code + "\n" + "Message : " + error.message; alert(text); }

Geolocation vor HTML5

Auch wenn immer mehr Plattformen das Geolocation API des W3C unterstützen, werden Sie immer mal wieder auf ältere Browser stoßen, die das API noch nicht anbieten. Das Google-Gears-Plug-in [3] rüstet eine ähnliche Funktionalität nach, wenn auch mit einem leicht abweichenden API. Weiterhin gibt es APIs für BlackBerry und Nokia oder Palm-Endgeräte, die alle unterschiedlich bedient werden müssen. Wenn Sie sich in Ihrem Code nicht mit den verschiedenen APIs auseinandersetzen wollen, können Sie die Bibliothek geo.js [4] nutzen, die eine Abstraktionsschicht bereitstellt.

Position auf einer Karte

Nachdem Sie nun die Position des Benutzers ermittelt haben, möchten Sie sie sicher auch auf einer Karte anzeigen. Dabei ist es von Vorteil, dass das Google Maps API [5] auch mit Längen- und Breitengraden arbeitet, sodass sehr wenig Code nötig ist, um die aktuelle Position auf einer Google-Karte anzuzeigen. Als Erstes erzeugen Sie ein LatLng-Objekt mit den entsprechenden Koordinaten:

var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

Dieses verwenden Sie dann als Zentrum einer neuen Karte:

var options = { zoom: 15, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP };

Um eine Karte zu erstellen, benötigen Sie lediglich ein leeres DIV-Element in Ihrer HTML-Seite, das Sie als Container verwenden:

 var map = new google.maps.Map(document.getElementById("map"), options); 

Und schließlich setzen Sie noch einen Marker auf die Position, an der sich der Benutzer aktuell befindet, indem Sie das bestehende LatLng-Objekt verwenden:

 var marker = new google.maps.Marker({ position: latlng, map: map, title:"Sie sind hier!" }); }

Listing 2 zeigt Ihnen den HTML-Code, der nötig ist, um die Karte einzubinden und die Position zu ermitteln.

Listing 2

<!DOCTYPE html> <html lang="de"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <tit...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang