Skip to content

Geodaten aus Adresse ermitteln mit PHP und Curl und der Google-API

by admin on June 17th, 2010

Für ein Projekt musste ich zu einer verhältnismäßig großen Anzahl von Adressdaten die entsprechende Geoposition (Längen- und Breitengrad) ermitteln.

Getreu nach dem Motto “Viele Wege führen nach Rom” gibt es sicherlich diverse mehr oder minder aufwendige und elegante Wege dies zu tun.

Denn wenn es z.B. nur um eine Visualisierung in einer Google-Karte geht, lässt sich die Google-Api auch direkt mit der Adresse füttern.

Ich brauchte jedoch explizit den Längengrad und den Breitengrad (Longitude, Latitude) und habe mir schnell eine Krücke aus PHP, Curl und der Google-API gebaut, um zur vorliegenden Adresse jeweils die Geodaten zu erhalten:

//Google API Key (geht auch für wenige Anfragen ohne)
$google_api_key = “XYZ”

//Adresse, zu der die Geodaten ermittelt werden sollen durch Komma getrennt
$query=”Adresse, PLZ, Ort”
//Curl Optionen setzen und Aufruf starten
$str  = array(‘Accept-Language: ‘.$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$curl_req = curl_init();
curl_setopt($curl_req, CURLOPT_URL, ‘http://maps.google.com/maps/geo?q=’.rawurlencode($query).’&output=csv&key=’.$google_api_key);
curl_setopt($curl_req, CURLOPT_HTTPHEADER, $str);
curl_setopt($curl_req, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($curl_req, CURLOPT_RETURNTRANSFER, TRUE);
$curl_res = curl_exec($curl_req);
//Dir API Rückgabe (CSV) in ein Array überführen
$position = explode(‘,’,$curl_res);

//Lat und Long aus dem Array in eigene Variablen zur Weiterverarbeitung speichern

$lat=$position[2];

$long=$position[3];
In Kombination mit einem Array der vorliegenden Adressdaten und einem “for each” ließen sich so zu den mehreren tausend Datensätzen in kurzer Zeit die passenden Geodaten ermitteln.

Anzumerken ist, dass gerade bei vielen Abfragen ggf. ein kurzes sleep(1) mit in die Schleife eingebaut werden sollte, um einer vorübergehenden Sperrung von Google vorzubeugen, dies gilt besonders wenn kein API Key verwendet wird!

No related posts.

From → Uncategorized

No comments yet

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS