Google Maps API – Geocodierung

In den bisherigen Teilen des Tutorials haben wir eine Adresse immer mittels der Koordinaten übergeben. Wie schon festgestellt birgt das einiges an Problemen, da wir in der Regel die Koordinaten eines Ortes nicht kennen, und diese somit nachschlagen müssen. Um dieses Manko zu beheben, besitzt die Google Maps API eine sogenannte Geocodierung. Mittels dieser Geocodierung können zum Beispiel Placemarks auch mittels Adresse gesetzt werden.

Was sich eigentlich gut anhört, ist allerdings mit Vorsicht zu genießen. Die Koordinaten sind stets genauer, als das Resultat einer Geocodierung. Da verhaut sich Google schon mal gerne um 1-2 Häuser, wie es selbst zugibt. Bei einer Geocodierung handelt es sich stets um eine Annäherung, keine exakte Wissenschaft! Wer also genau positionieren will, kommt an Koordinaten nicht vorbei. Dies gilt übrigens auch für die sogenannte umgekehrte Geocodierung. In dem Fall gibt Google für eine ausgewählte Position auf der Karte (zum Beispiel durch Klick) die entsprechende Adresse zurück. Auch hier gilt, es handelt sich um eine Annäherung! Was auch logisch ist, wenn ich in einem Gebiet mit 100 Schrebergärten Nummer 39 anklicke, ist es sehr unwahrscheinlich, das dieser eine eigene postalische Adresse besitzt!

Unser Beispiel – der Kölner Dom – besitzt übrigens nicht nur eine Adresse, sondern sogar eine Hausnummer, die auch außen angeschlagen ist! :) Offiziell heißt das dann: „Hohe Domkirche St. Peter und Maria, Domkloster 4, 50667 Köln (Altstadt-Nord)“, tja, wer hätte dies gedacht. Möchte ich nun ein Placemark mit dieser Adresse setzen, hat man etwas Arbeit vor sich. Zunächst einmal muss man die Adresse bei Google abfragen:

var address = "Domkloster 4, 50667 Köln";
geocoder = new GClientGeocoder();
geocoder.getLocations(address, addToMap);

Eigentlich ganz einfach, oder? Der Befehl getLocations sorgt für die Auflösung der Adresse, aber was ist eigentlich addToMap? Nichts anderes als eine Callback-Function in JavaScript! Diese muss wie folgt aufgebaut sein:

function addToMap(response) {
}

In der Variable response ist das Ergebnis der Suche hinterlegt. Dabei handelt es sich um eine KML-Datei (XML), die wir verarbeiten können:

http://maps.google.com/maps/geo?q=domkloster+5,+50677+k%F6ln&output=xml&sensor=true_or_false&key=abcdefg

Wie man in der URL sieht, erhält die KML fast die gleichen Koordinaten, die wir zuvor verwendet haben! Diese können wir nun in der Callback-Function addToMap extrahieren:

function addToMap(response) {
   // Den Ort im KML isolieren
   ort = response.Placemark[0];
   // Die Koordinaten extrahieren
   point = new GLatLng(ort.Point.coordinates[1],ort.Point.coordinates[0]);
   // Die Karte mit dem Zoom-Level 13 auf diesem Punkt zentrieren
   map.setCenter(point, 13);
   // Für den Punkt einen Marker generieren
   marker = new GMarker(point);
   // Den Marker der Karte hinzufügen
   map.addOverlay(marker);
   // Dem Marker ein HTML-Popup mit der Adresse hinzufügen
   marker.openInfoWindowHtml(ort.address);
}

Auch nicht sonderlich schwer, aber wie gesagt: mit Vorsicht zu genießen! Die Ergebnisse können stimmen, müssen aber nicht! Nun sind wir eigentlich so weit ein Demo-System aufsetzen zu können und Google Maps zu optimieren und zu erweitern. Das komplette JavaScript zu diesem Beispiel findet ihr hier.

Ähnliche Beiträge

JavaScript Events für Responsive Webdesign Responsive Webdesign ist nicht nur begrenzt auf geschicktes HTML & CSS sondern hat auch Auswirkungen auf JavaScript. Zum einen möchte man, dass be...
LimeJS – HTML5 Spiele Framework Darüber das HTLM5 der Weg in die Zukunft ist, und nicht Flash, lasse ich mich heute mal nicht aus (dann haut ihr mich wieder!:) Aber es ist schön anzu...
Wieso man Javascript nicht im Head lädt (und im Fo... Ich kann mich noch erinnern als Anfang der 90er Javascript noch ein außerirdisches Mysterium war, und zwei Zeilen Inline-Javascript das höchste der Ge...
HTML5 Audio mit Buzz HTML5 Audio ist ein nerviges kleines Biest! Das liegt nicht an der Umsetzung, sondern daran das jeder Browser sein eigenes Süppchen hinsichtlich Codec...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.