Google Maps mit PHP
Mit Google Maps lassen sich ja bekanntlich eindrucksvolle, steuerbare Straßenkarten auf der eigen Internetpräsenz darstellen. Wer Google Maps jedoch auf seine Website einbinden will, muss sich erst mal mit der API auseinandersetzen. Folgende PHP-Anwendung erleichtert die Einbindung.
Ein weiterer Vorteil der Anwendung ist, dass neben der JavaScript-basierenden Version von Google Maps (siehe Artikel Anfahrtsskizzen mit Google Maps) auch eine statische Karte (eine einfache GIF-Grafik) eingebunden wird, die dargestellt wird, wenn JavaScript nicht aktiviert ist.
Die Anwendung besteht aus zwei PHP-Funktionen, die am Beginn des PHP-/HTML-Dokuments eingebunden werden müssen. Die erste Funktion google_daten($bez, $adresse, $masse, $sonstiges) dient der Übergabe der Adresse und der Eigenschaften wie Maße der Karte und Zoomfaktor sowie der Übermittlung der Adresse an Google und Auswertung der von Google gesendeten XML-Datei.
<?
function google_daten($bez, $adresse, $masse, $sonstiges) { global $key; global $b; global $h; global $zoom; global $bezeichnung; global $eigenschaften; global $position; global $land; global $stadt; global $strasse; global $plz;
$key = "Hier API-Key eingeben";
Sie müssen der Variablen $key Ihren API-Key zuweisen. Um Google Maps nutzen zu können, müssen Sie sich einen solchen Schlüssel bei Google Maps besorgen (siehe Artikel Google Maps API nutzen). Der Schlüssel ist für eine bestimmte Domain gültig und kann, insofern Sie einen Google-Acount haben, kostenlos generiert werden. Weitere Änderungen an der Funktion sind nicht nötig.
Der Funktion werden vier Variablen übergeben:
$bez ist die Bezeichnung der zu darstellenden Adresse. Hier kann auch eine leere Zeichenkette übergeben werden, da die Bezeichnung nur im von Google Maps dargestellten Infofenster zusammen mit der Adresse dargestellt wird.
$adresse ist die darzustellende Adresse. Sie kann formlos angegeben werden. In der Regel reicht die Angabe einer Straße (mit oder ohne Hausnummer) sowie die Stadt.
Der Variablen $masse werden die Breite und Höhe sowie der Zoomfaktor der darzustellenden Karte zugewiesen. Beide Angaben müssen durch Komma und Leerzeichen getrennt werden.
Über die Variable $sonstiges können Sie zusätzliche Elemente auf Ihrer Karte darstellen lassen:
Über die Zeichenkette fenster wird ein Infofenster dargestellt (siehe Artikel Google Maps mit eigenem Infofenster), in dem die Adresse und (falls angegeben) die Bezeichung angezeigt werden,
über steuerung wird eine Navigation dargestellt, mit der Sie sich in der Karte bewegen können,
über kartentyp wird ein Menü dargestellt, mit dem Sie zwischen verschiedenen Kartentypen wechseln können,
über uebersicht wird eine kleine Übersichtskarte dargestellt, die einen größeren Kartenausschnitt anzeigt,
Die Angaben müssen durch Komma und Leerzeichen getrennt in einer Zeichenkette an die Funktion übergeben werden. Im Folgenden werden die einzelnen übergebenen Werte für das weitere Vorgehen verarbeitet:
$bezeichnung = $bez;
$adresse = rawurlencode($adresse);
$masse = explode(", ", $masse); $b = $masse[0]; $h = $masse[1]; $zoom = $masse[2];
$eigenschaften = explode(", ", $sonstiges);
Im Nächsten Schritt werden die Adresse zusammen mit dem API-Key an Google übergeben. Google sendet eine XML-Datei, die eine Reihe von Angaben zu der Adresse enthalten, z. B. die Postleitzahl, das Bundesland und die Koordinaten der Adresse. Die Koordinaten sind entscheidend, da Google die Adresse aufgrund dieser Daten anzeigt:
$geo = implode(file("http://maps.google.com/maps/geo?q=".$adresse."&output=xml&hl=de&key=".$key)); $geo = utf8_encode($geo);
$xml = xml_parser_create(); xml_parse_into_struct($xml, $geo, $ausgabe); xml_parser_free($xml);
foreach($ausgabe as $a) { if($a["tag"] == "COORDINATES") $position = $a["value"]; if($a["tag"] == "ADMINISTRATIVEAREANAME") $land = $a["value"]; if($a["tag"] == "LOCALITYNAME") $stadt = $a["value"]; if($a["tag"] == "POSTALCODENUMBER") $plz = $a["value"]; if($a["tag"] == "ADDRESSLINE") $strasse = $a["value"]; if($strasse == "" && $a["tag"] == "THOROUGHFARENAME") $strasse = $a["value"]; }
$position = explode(",", $position); $position = $position[1].",".$position[0];
}
Die XML-Datei wird zerlegt. Die gebrauchten Daten werden extrahiert und in Variablen gespeichert. Aus der XML-Datei entnehmen wir die Koordinaten ($position), das Bundesland ($land), die Stadt ($stadt), die Postleitzahl ($plz) und die Straße ($strasse). Falls keine Straße angegeben wird (falls man als Adresse z. B. einfach »Kölner Dom, Köln« angibt), wird die nächste Straße in der Umgebung gewählt.
Da die Koordinaten in der XML-Datei anders dargestellt werden, als sie für die Kartendarstellung gebraucht werden, wird die Reihenfolge entsprechend geändert. Damit ist die erste der beiden PHP-Funktionen fertig. Die zweite Funktion dient der eigentlichen Darstellung der Daten. Es werden zwei Variablen mit HTML-Code gefüllt:
function google_maps($wert) {
global $key; global $b; global $h; global $zoom; global $bezeichnung; global $eigenschaften; global $position; global $land; global $stadt; global $strasse; global $plz;
$script = "<script src="http://maps.google.com/maps?file=api&v=2.x&hl=de&key=".$key."" type="text/javascript"></script>rn"; $script .= "<script type="text/javascript">rnrn"; $script .= "function zeigekarte(bezeichnung, strasse, plz, ort, land) {rn"; $script .= "tif(GBrowserIsCompatible()) {rn"; $script .= "ttvar karte = new GMap2(document.getElementById("karte"));rn"; $script .= "ttvar point = new GLatLng(".$position.");rn"; $script .= "ttkarte.setCenter(point, ".$zoom.");rn"; $script .= "ttvar marker = new GMarker(point);rn"; $script .= "ttkarte.addOverlay(marker);rn";
if(in_array("fenster", $eigenschaften)) { $script .= "ttif(bezeichnung != "") bezeichnung = "<strong>" + bezeichnung + "</strong><br />"rn"; $script .= "ttmarker.openInfoWindowHtml("<p>" + bezeichnung + strasse + "<br />" + plz + " " + ort + "<br />" + land + "</p>");rn";
}
if(in_array("steuerung", $eigenschaften)) $script .= "ttkarte.addControl(new GLargeMapControl());rn"; if(in_array("kartentyp", $eigenschaften)) $script .= "ttkarte.addControl(new GMapTypeControl());rn"; if(in_array("uebersicht", $eigenschaften)) $script .= "ttkarte.addControl(new GOverviewMapControl());rn";
$script .= "t}rn"; $script .= "}rnrn"; $script .= "</script>rn";
Die erste der beiden Variablen, $script, beinhaltet den notwendigen JavaScript für die Darstellung der steuerbaren Straßenkarte. Je nach angegebenen Eigenschaften (Navigation, Kartenübersicht etc.) werden zusätziche Zeilen eingefügt.
Die zweite Variable, $karte, enthält den HTML-Code für die statische Karte sowie den Aufruf der in $script dargestellten JavaScript-Funktion:
$karte = "<div id="karte" style="width:".$b."px; height:".$h."px">rn"; $karte .= "<img src="http://maps.google.com/staticmap?center=".$position."&zoom=".$zoom."&size=".$b."x".$h."&markers=".$position."&key=".$key."" />rn"; $karte .= "</div>rnrn"; $karte .= "<script type="text/javascript">rnrn"; $karte .= "zeigekarte("".$bezeichnung."", "".$strasse."", "".$plz."", "".$stadt."", "".$land."");rnrn"; $karte .= "</script>rn";
return $$wert;
}
Nachdem Sie die beiden Funktionen am Anfang Ihres Dokuments eingebunden haben, werden beim Aufruf der Funktion google_daten() die Adresse sowie die Eigenschaften übergeben:
google_daten("Landtag Nordrhein-Westfalen", "Platz des Landtags 1, Düsseldorf", "600, 500, 15", "fenster, steuerung, kartentyp, uebersicht");
?>
Es beginnt der HTML-Bereich des Dokuments. An zwei Stellen muss die Funktion google_maps() eingebunden werden. Im <head>-Bereich wird das Script, im <body>-Bereich die eigentliche Karte eingebunden:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Google Maps</title>
<? echo google_maps("script"); ?>
</head>
<body>
<? echo google_maps("karte"); ?>
</body>
</html>
Um Google Maps mit dieser PHP-Anwendung einsetzen zu können, bedarf es keiner Kenntnisse mit der API von Google Maps. Die Angabe des API-Keys ist die einzige Änderung, die Sie an der Funktion vornehmen müssen. Des Weiteren müssen nur die entsprechenden Daten (Adresse und Eigenschaften) beim Funktionsaufruf der ersten Funktion übergeben werden sowie die zweite Funktion an den entsprechenden Stellen des HTML-Bereichs Ihres Dokuments aufgerufen werden.









