Mit Google Maps API Entfernungen berechnen

Mit Hilfe der Google Maps API lässt sich die Entfernung zwischen zwei Orten sehr einfach berechnen. In diesem Beitrag möchte ich zeigen, wie man mit Hilfe der Google Maps Distance Matrix API und einem einfachen URL Aufruf oder PHP die Entfernung berechnen kann.

Ich nutze diese Funktionalität ab und an bei der Planung von Touren um mal schnell zwei, drei Entfernungen zu berechnen. Das geht wesentlich schneller als über die Google Maps Web-UI und bedarf bei gemäßigter Nutzung keine Maps Lizenz. Einfach die URL mit ein paar Parametern aufrufen, und schon hat man die Entfernung zwischen Ort A und B.

Der Google Maps API Aufruf zum berechnen der Entfernung sieht in der simpelsten Variante wie folgt aus:

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=PLZ_Ort_A+DE&destinations=PLZ_ORT_B +DE&mode=driving&language=de-DE&sensor=false

Echtes Beispiel:

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=33397+DE&destinations=33098+DE&mode=driving&language=de-DE&sensor=false

Das lässt sich auch mit Adressen verfeinern:

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=33397 Lange Str. 2+DE&destinations=33098 Marienstr. 29+DE&mode=driving&language=de-DE&sensor=false

Das Ergebnis schaut dann so aus:
Entfernungen_berechnen_Google_Maps_API

Dabei bedeuten die Parameter (in Kürze) folgendes:

  • origins: Start. Als PLZ, Stadtnahme, oder eine gesamte Adresse. Reihenfolge spielt keine Rolle. Leerzeichen sind erlaubt. +DE ist nur zur Sicherstellung, dass der Ort korrekt erkannt wird. Eigentlich nur notwendig, wenn die PLZ allein zur Positionsbestimmung herangezogen wird.
  • destinations: Zielort. Hier gilt gleiches wie bei origins
  • mode: driving steht für Auto.

Es gibt noch einige weitere Parameter. Für eine einfache Entfernungsberechnung reichen aber die benutzten.

Als Rückgabewert bekommt man eine XML Datei, die sich in PHP sehr simpel parsen lässt.

Google Maps Distance Matrix API mit PHP auswerten

Für den obigen Aufruf bekomme ich die folgende XML Struktur
Google-Maps-API-Entfernungen-berechnen
Diese XML Datei lässt sich nun mittels simplexml_load_file sehr einfach auslesen und verarbeiten.

$distance = 0;
$start_adresse = '33397 Lange Str. 2';
$end_adresse = 'Marienstr. 29 33098';
if($xml=simplexml_load_file("http://maps.googleapis.com/maps/api/distancematrix/xml?origins=".$start_adresse."+DE&destinations=".$end_adresse."+DE&mode=driving&language=de-DE&sensor=false")){
   if($xml->status=='OK'){
      $distance = $xml->row->element->distance->value;
      $distance = round( $distance / 1000, 2 );
   }
}

DEMO:

Hier findet Ihr eine DEMO der Entfernungs-Berechung: DEMO starten

Die Demo basiert auf diesem Skript zum berechnen einer Entfernung A zu B:

<?php

$distance = 0;
$start_adresse = $_POST['start'];
$ziel_adresse = $_POST['ziel'];

if($start_adresse!='' && $ziel_adresse!=''){
	$url="http://maps.googleapis.com/maps/api/distancematrix/xml?origins=".$start_adresse."+DE&destinations=".$ziel_adresse."+DE&mode=driving&language=de-DE&sensor=false";
	if($xml=simplexml_load_file($url)){
   		if($xml->status=='OK'){
      		$distance = $xml->row->element->distance->text;
      		echo 'Die Entfernung zwischen ' . $start_adresse . ' und '.$ziel_adresse . ' beträgt: ' .$distance;
   		}
	}

}else{
	echo '<form action="/entfernung_berechnen.php" method="post">
	<label>Start:</label><br>
	<input type="text" name="start" value="Startadresse">
	<br>
	<label>Ziel:</label><br>
	<input type="text" name="ziel" value="Zieladresse">
	<br>
	<input type="submit" value="Berechnen">
	</form>';
}
?>
Hinweise:
  1. In der kostenlosen Version können maximal 2500 Elemente pro Tag
  2. und nur 100 Elemente auf einmal abgerufen werden.

Entfernung berechnen Google Maps Api

7 Kommentare » Schreibe einen Kommentar

  1. Vielen Dank für diesen Beitrag. Wir sind als Laienprogrammierer immer auf der Suche nach goodies um unsere Seiten aufzuwerten und dem Nutzer eine Zusatzfunktion anzubieten.
    Somit möchte ich mich an dieser Stelle herzliche für das Posting bedanken.

    Viele Grüsse
    Tim

  2. Danke für die gute Beschreibung! Klang perfekt, bis… auf den letzten Satz. :-(

    Ich suche nämlich leider eine Möglichkeit „Entfernungen zwischen zwei PLZ-Zahlen zu berechnen (typische KFZ-Routen-Entfernungen), deren Ergebnis bzw. Distanz ich dann auf meiner Website darstellen kann. Eine Karte von Google kann ich jedoch dazu nicht nutzen, da dies keinen Sinn machen würde.

    Letztendlich geht es einfach darum, dass ich in meiner Datenbank per API auslesen kann, wie weit Kunde A von Kunde B entfernt wohnt.

    Kennst Du da vielleicht eine Alternative zu Google Maps, die so etwas rechtlich erlaubt? Es dürfte auch eine kostenpflichtige Lösung sein.

    Viele Grüße
    Michi

  3. es gibt natürlich eine kostenpflichtige API von Google, die genau Deinen Anforderungen entspricht

  4. Danke dafür. Man kann es noch ein wenig abkürzen:

    $distance = $xml->row->element->distance->value;
    $distance = round( $distance / 1000, 2 );

    Grüße.

  5. Noch etwas:

    .$start_adresse.

    Durch die beiden Punkte vor unter hinter der Variablen scheint sich Google Maps unerwartet zu verhalten und liefert Adressen in den USA zurück. PHP parst alle Variablen innerhalb der “ “ Anführungszeichen, daher könnte man die Punkte weglassen:

    $xml=simplexml_load_file(„http://maps.googleapis.com/maps/api/distancematrix/xml?origins=$start_adresse+DE&destinations=$end_adresse+DE&mode=driving&language=de-DE&sensor=false“);

    Nochmals danke.

  6. Stimmt, die String-Concatenation war hier kaputt. Richtig wäre es wie von Dir angemerkt, oder wie folgt:

    $xml=simplexml_load_file(„http://maps.googleapis.com/maps/api/distancematrix/xml?origins=“.$start_adresse.“+DE&destinations=“.$end_adresse.“+DE&mode=driving&language=de-DE&sensor=false“)

    Habs korrigiert. Danke für den Hinweis.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.