Google Maps API - Adressen geocoden
28. Mai 2008Für meine Filmfehler-Community www.dieseher.de habe ich die letzten Tage mittels Google Maps eine Karte erstellt, mit deren Hilfe die Standorte der Community-Mitglieder angezeigt werden kann.
Hierzu bietet die englische Dokumentation von Google nützliche Hinweise und Beispiele an, um eine solche Karte mittels JavaScript zu realisieren. Das große Problem, dass sich mir gestellt hat war, wie ich nun die ganzen Adresse (PLZ, Ort, Land) unserer Community-Mitglieder in das passende Format von Google bekomme. Dies wird nämlich durch folgenden Javascript Befehl realisiert:
new GLatLng(lat,lon).
Aber woher nun die “lat und lon” Angaben für die einzelnen Standorte herbekommen?
Um die “lat und lon” Angaben eines Standortes zu bekommen, hat Google folgenden Methode zur Verfügung gestellt:
function showAddress(address) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + ” nicht gefunden”);
} else {
map.setCenter(point, 13);
var marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(address);
}
}
);
}
Die erste Idee, die ich hatte war, alle Adresse aus der Datenbank bei jedem Aufruf der Karte über die Funktion showAddress zu geocodieren. Die stellte sich jedoch als unnützlich dar, da die Ladezeiten bei weit über 3 Minuten lag und ich danach bei google temporär gesperrt war (da nur 50.000 Aufrufe am Tag erlaubt sind). Also mussten die ganzen Werte irgendwie in die Datenbank zu den Userinformationen.
Das Ergebnis war nun, dass ich die Methode showAddress etwas umgeschrieben habe, sodass neue Adressen die noch nicht geocodiert sind automatisch in die Datenbank eingetragen werden. Hierzu ruft sich das Script ständig von selbst auf, bis es keine Adresse mehr zu geocoden gibt.
So sieht die umgewandelte Methode showAddress jetzt aus:
function showAddress(address) {
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
var newurl = “geocode.php?id=x”;
delay(1);
window.location=;
} else {
var newurl = “geocode.php?id=”+point;
delay(1);
window.location=tester;
}
}
)
}
}
delay ist hierbei eine weitere Funktion die ich eingebaut habe, damit nicht zuviel auf einmal von Google abgefragt wird.
Das ganze als geocode.php abspeichern und mit den Datenbankinformationen befüllen und schon werden die Adressen langsam geocodiert und in die Datenbank eingetragen.
Und voilà, das Ergebnis kann sich sehen lassen!


