Dank Smartphone kommt man heute ziemlich schnell an die eigenen GPS-Koordinaten und kann ganz einfach seinen Standort teilen.
Was ist aber, wenn ihr auf der anderen Seite seid und den Standort des Nutzers zum Beispiel in eine Stadt umwandeln wollt?
In diesem Artikel stelle ich auch ein kleines PHP-Skript vor, mit dem ihr auf die Google Maps API zugreifen könnt und GPS-Koordinaten umwandeln könnt.
1. Bei Google Maps API anmelden
Die Google Maps Geocoding API kann bis zu einem gewissen Kontingent kostenlos verwendet werden.
Über euren Google Account könnt ihr für die Google Maps Geocoding API einen API-Schlüssel anfordern. Dieser ist Voraussetzung um das nachfolgende PHP-Skript verwenden zu können.
2. PHP-Skript für mehr Informationen zu GPS-Koordinaten
Die PHP Funktion, die ich euch hier bereitstelle, ist recht simpel aufgebaut:
function getAddressByGPS ($lat, $lng) { // NICHT VERGESSEN: API-Key einfügen! Anfrage an Google Maps API senden // $request = @json_decode(file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?latlng=".trim($lat).",".trim($lng)."&key=GMAPS_API_KEY"), true); $address = array(); // Konnten die Daten erfolgreich ausgewertet werden? // if (isset($request['results'][0]['address_components'][0]['types'])) { foreach ($request['results'][0]['address_components'] AS $component) { switch ($component['types'][0]) { case 'street_number': $address['houseNr'] = $component['long_name']; break; case 'route': $address['street'] = $component['long_name']; break; case 'administrative_area_level_2': $address['city'] = $component['long_name']; break; case 'locality': $address['city'] = $component['long_name']; break; case 'country': $address['country'] = $component['long_name']; break; case 'postal_code': $address['ZIP'] = $component['long_name']; break; } } // Adresse zurückgeben // return $address; } else { return false; } }
Ihr müsst in der Zeile, die mit $request beginnt, noch GMAPS_API_KEY durch den API-Key ersetzen, den ihr zuvor angefordert habt.
Die Funktion fragt zunächst die Google Maps API ab und übergibt die angegebenen GPS-Koordinaten. Wenn Google Maps keinen Fehler zurückgegeben hat, werden die Daten ausgewertet und einzelne Informationen, wie Stadt und Postleitzahl, aus der Antwort herausgefiltert.
Bei Erfolg gibt das PHP Skript ein Array mit den relevanten Informationen aus, andernfalls ein false.
3. Anwendungsbeispiel
Nun könnt ihr die Funktion ganz einfach aufrufen, indem ihr die GPS-Werte für den Breitengrad (lat) und Längengrad (lng) übergebt.
In diesem Beispiel übergeben wir GPS-Koordinaten für eine Adresse in Berlin und lassen uns das Ergebnis ausgeben:
var_dump(getAddressByGPS(52.5192207, 13.3733226));
Die Ausgabe lautet:
array(4) { ["street"]=> string(16) "Paul-Löbe-Allee" ["city"]=> string(6) "Berlin" ["country"]=> string(7) "Germany" ["ZIP"]=> string(5) "10557" }
Ihr könnt das Skript noch weiter an eure Bedürfnisse anpassen. Bei einigen Orten kann es sein, dass das Skript nicht die genauen Angaben aus der Antwort der Google Maps API herausfiltert.
Daher könnt ihr euch auch selbst die Ergebnisse von $request anschauen und zum Beispiel statt $request[‚results‘][0][‚address_components‘][0][‚types‘] andere Werte auswählen und zurückgeben. Über eure Ideen und Anmerkungen in den Kommentaren freue ich mich natürlich.
4. Fazit
Wer nicht allzu viele Zugriffe pro Monat benötigt, kann ganz leicht mit der Google Maps API und PHP GPS-Koordinaten in Adressinformationen, wie z.B. den Namen der Stadt, umwandeln. Damit sind Anwendungen möglich, die dem Nutzer auf Basis seines Standorts weitere Informationen bieten.
Hallo
Schon mal an die opensteetmap gedacht ?
Grüße
Mkuh
Hi Mkuh,
Soweit ich weiß, ist die OpenStreetMap ein großartiges Projekt, bietet aber keine API an, mit der sich Informationen zu den GPS-Koordinaten anzeigen lassen. Wenn du da mehr weißt, lass uns gerne daran teilhaben 🙂
Lässt man sich die Daten zu diesem Zweck exportieren, ist man schnell bei einer ziemlich großen Datei. Das hat für meine Zwecke nicht gepasst.
Beste Grüße
Tristan
case ‚administative_area_level_2′ muss irgendwas anderes sein, denn es wird nicht die Stadt angezeigt, sondern der Bezirk. Mein Code lautet:
//
$Newadress = getAddressByGPS($lat, $long);
echo $Newadress[’street‘].‘, ‚.$Newadress[‚houseNr‘].‘, ‚.$Newadress[‚city‘].‘, ‚.$Newadress[‚ZIP‘].‘, ‚.$Newadress[‚country‘]; //
Wie lautet der code für die Stadt?
Hallo Torsten,
unter Umständen kann es sein, dass dir statt der Stadt der Bezirk oder ähnliches angezeigt wird, wenn weitere Informationen vorhanden sind. Du könntest dann versuchen – je nach Bedarf einfach jeweils den ‚administative_area_level_‘-Wert mit der höchsten oder niedrigsten Zahl herauszufiltern und zu verwenden.
Beste Grüße
Tristan