Übersicht
Mit dem DirectionsService
-Objekt lassen sich Routen für verschiedene Verkehrsmittel berechnen. Das Objekt kommuniziert mit dem „Directions“-Dienst der Google Maps API. Dieser nimmt entsprechende Anfragen entgegen und gibt eine effiziente Route zurück.
Die Route wird primär nach der Fahrzeit optimiert, es können aber auch andere Faktoren berücksichtigt werden, wie z. B. die Entfernung oder die Anzahl der Abzweige.
Sie können die Routenergebnisse entweder selbst verarbeiten oder das DirectionsRenderer
-Objekt verwenden, um sie zu rendern.
Um den Start- oder Zielort in einer Routenanfrage anzugeben, können Sie einen Abfragestring wie „Chicago, IL“ oder „Darwin, NSW, Australien“, einen LatLng
-Wert oder ein Place-Objekt verwenden.
Der „Directions“-Dienst kann mehrteilige Wegbeschreibungen mit einer Reihe von Wegpunkten zurückgeben. Routen werden als Polylinie auf der Karte oder zusätzlich als Textbeschreibung in einem <div>
-Element (z. B. „Nach rechts auf Talstraße abbiegen“) angezeigt.
Erste Schritte
Bevor Sie den „Directions“-Dienst in der Maps JavaScript API verwenden, müssen Sie die Directions API in der Google Cloud Console in dem Projekt aktivieren, das Sie für die Maps JavaScript API eingerichtet haben.
So rufen Sie die Liste der aktivierten APIs auf:
- Rufen Sie die Google Cloud Console auf.
- Klicken Sie auf die Schaltfläche Projekt auswählen, wählen Sie das Projekt aus, das Sie für die Maps JavaScript API eingerichtet haben, und klicken Sie auf Öffnen.
- Suchen Sie im Dashboard in der Liste der APIs nach Directions API.
- Wenn die API in der Liste angezeigt wird, müssen Sie nichts weiter tun. Ist die API nicht aufgeführt, aktivieren Sie sie:
- Wählen Sie oben auf der Seite API AKTIVIEREN aus, um den Tab Bibliothek aufzurufen. Alternativ können Sie im Menü auf der linken Seite Bibliothek auswählen.
- Suchen Sie nach der Directions API und wählen Sie sie aus der Ergebnisliste aus.
- Wählen Sie AKTIVIEREN aus. Wenn der Vorgang abgeschlossen ist, wird die Directions API auf dem Dashboard in der Liste der APIs angezeigt.
Preise und Richtlinien
Preise
Seit 16. Juli 2018 gilt für Maps, Routes und Places ein neues nutzungsorientiertes Preismodell (Pay as you go). Weitere Informationen zu den aktuellen Preisen und Nutzungslimits für die Verwendung des JavaScript-„Directions“-Diensts finden Sie unter Nutzung und Abrechnung für die Directions API.
Richtlinien
Die Nutzung des „Directions“-Diensts unterliegt den Richtlinien für die Directions API.
Routenanfragen
Der Zugriff auf den „Directions“-Dienst erfolgt asynchron, da die Google Maps API dazu einen externen Server aufrufen muss. Daher muss eine Callback-Methode übergeben werden, die nach Abschluss der Anfrage ausgeführt wird. Das Ergebnis wird dann über die Callback-Methode verarbeitet. Der „Directions“-Dienst gibt unter Umständen mehrere mögliche Wegbeschreibungen als Array separater routes[]
zurück.
Wenn Sie den Dienst in der Maps JavaScript API verwenden möchten, erstellen Sie ein Objekt vom Typ DirectionsService
und rufen Sie DirectionsService.route()
auf, um eine Anfrage an den „Directions“-Dienst zu senden und dabei ein DirectionsRequest
-Objektliteral zu übergeben, das die Eingabebedingungen und eine Callback-Methode enthält, die nach Erhalt der Antwort ausgeführt werden soll.
Das DirectionsRequest
-Objektliteral enthält die folgenden Felder:
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
Erläuterungen zu den Feldern:
origin
(erforderlich) gibt den Startort für die Berechnung der Route an. Dieser Wert kann alsString
(z. B. „Chicago, IL“),LatLng
-Wert oder Place-Objekt angegeben werden. Wenn Sie ein Place-Objekt verwenden, können Sie eine Orts-ID, einen Abfragestring oder einenLatLng
-Wert angeben. Sie können Orts-IDs aus den „Geocoding“-, „Place Search“- und „Place Autocomplete“-Diensten der Maps JavaScript API abrufen. Ein Beispiel für die Verwendung von Orts-IDs aus dem „Place Autocomplete“-Dienst finden Sie hier.destination
(erforderlich) gibt den Zielort für die Berechnung der Route an. Die Optionen entsprechen denen desorigin
-Felds.travelMode
(erforderlich) gibt an, welche Mobilitätsform der Berechnung der Route zugrunde gelegt werden soll. Die gültigen Werte sind im Abschnitt Mobilitätsformen unten beschrieben.transitOptions
(optional) gibt Werte an, die nur für Anfragen mitTRANSIT
alstravelMode
gelten. Die gültigen Werte werden im Abschnitt Optionen für öffentliche Verkehrsmittel unten beschrieben.drivingOptions
(optional) gibt Werte an, die nur für Anfragen mitDRIVING
alstravelMode
gelten. Die gültigen Werte werden im Abschnitt Optionen für Kraftfahrzeuge unten beschrieben.unitSystem
(optional) gibt an, welches Einheitensystem für die Anzeige der Ergebnisse verwendet werden soll. Die gültigen Werte werden im Abschnitt Einheitensysteme unten beschrieben.waypoints[]
(optional) gibt ein Array aus Wegpunkten (DirectionsWaypoint
) an. Werden Wegpunkte angegeben, wird die Route so geändert, dass sie über die entsprechenden Orte führt. Wegpunkte werden als Objektliteral mit folgenden Feldern angegeben:location
gibt den Standort des Wegpunkts alsLatLng
-Wert, Place-Objekt oderString
an, der geocodiert wird.stopover
ist ein boolescher Wert, der angibt, dass der Wegpunkt ein Zwischenhalt ist. Die Route wird dann entsprechend unterteilt.
Weitere Informationen zu Wegpunkten finden Sie im Abschnitt Wegpunkte in Routen verwenden unten.
optimizeWaypoints
(optional) gibt an, dass die Route mit den angegebenenwaypoints
optimiert werden kann, indem die Wegpunkte in eine effizientere Reihenfolge gebracht werden. Wenntrue
festgelegt ist, gibt der „Directions“-Dienst die neu angeordnetenwaypoints
im Feldwaypoint_order
zurück. Weitere Informationen finden Sie unter Wegpunkte in Routen verwenden unten.- Ist
provideRouteAlternatives
(optional) auftrue
gesetzt, kann der „Directions“-Dienst mehrere alternative Routen in der Antwort zurückgeben. Durch alternative Routen kann sich die Antwortzeit des Servers jedoch verlängern. Diese Option ist nur für Anfragen ohne Wegpunkte verfügbar. - Ist
avoidFerries
(optional) auftrue
gesetzt, sollen bei der Berechnung der Route(n) Fähren möglichst vermieden werden. - Ist
avoidHighways
(optional) auftrue
gesetzt, sollen bei der Berechnung der Route(n) Autobahnen möglichst vermieden werden. - Ist
avoidTolls
(optional) auftrue
gesetzt, sollen bei der Berechnung der Route(n) Mautstraßen möglichst vermieden werden. region
(optional) gibt den Regionscode als Ländercode der Top-Level-Domain (ccTLD) an. Weitere Informationen finden Sie unten unter Gewichtung nach Region.
Unten sehen Sie ein DirectionsRequest
-Beispiel:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Mobilitätsformen
Damit eine Route berechnet werden kann, müssen Sie die Mobilitätsform angeben, die verwendet werden soll. Folgende Mobilitätsformen werden derzeit unterstützt:
- Bei
DRIVING
(Standardeinstellung) wird eine standardmäßige Wegbeschreibung auf Grundlage des Straßennetzes angefordert. - Bei
BICYCLING
werden Fahrradrouten mit Radwegen und bevorzugten Straßen angefordert. - Bei
TRANSIT
werden Routen mit öffentlichen Verkehrsmitteln angefordert. - Bei
WALKING
werden Fußgängerrouten auf Fußgängerwegen und Bürgersteigen angefordert.
In den Details zur Google Maps Platform-Abdeckung können Sie nachlesen, inwiefern Routen in den einzelnen Ländern unterstützt werden. Wenn Sie eine Route für eine Region anfordern, in der der entsprechende Routentyp nicht verfügbar ist, wird die Antwort DirectionsStatus
="ZERO_RESULTS
" zurückgegeben.
Hinweis: Fußgängerrouten enthalten unter Umständen keine ausgewiesenen Fußgängerwege. In diesen Fällen werden Warnungen im DirectionsResult
zurückgegeben. Diese Warnungen müssen immer für den Nutzer eingeblendet werden. Wenn Sie nicht den standardmäßigen DirectionsRenderer
verwenden, müssen Sie selbst dafür sorgen, dass sie angezeigt werden.
Optionen für öffentliche Verkehrsmittel
Die verfügbaren Optionen für „Directions“-Anfragen richten sich nach der Mobilitätsform.
Bei Anfragen für öffentliche Verkehrsmittel werden die Optionen avoidHighways
, avoidTolls
, waypoints[]
und optimizeWaypoints
ignoriert. Sie können Routenoptionen für öffentliche Verkehrsmittel über das TransitOptions
-Objektliteral angeben.
Routenanfragen für öffentliche Verkehrsmittel sind zeitsensitiv. Berechnungen werden nur für Zeiten in der Zukunft zurückgegeben.
Das TransitOptions
-Objektliteral enthält die folgenden Felder:
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
Erläuterungen zu den Feldern:
arrivalTime
(optional) gibt die gewünschte Ankunftszeit alsDate
-Objekt an. Ist die Ankunftszeit angegeben, wird die Abreisezeit ignoriert.departureTime
(optional) gibt die gewünschte Startzeit alsDate
-Objekt an.departureTime
wird ignoriert, wennarrivalTime
angegeben ist. Wird kein Wert fürdepartureTime
oderarrivalTime
angegeben, wird standardmäßig die aktuelle Uhrzeit verwendet.modes[]
(optional) ist ein Array aus einem oder mehrerenTransitMode
-Objektliteralen. Dieses Feld kann nur angegeben werden, wenn die Anfrage einen API-Schlüssel enthält. JedesTransitMode
-Objektliteral gibt ein bevorzugtes Verkehrsmittel an. Folgende Werte sind zulässig:BUS
gibt an, dass für die berechnete Route Busse bevorzugt werden sollen.RAIL
gibt an, dass für die berechnete Route Züge, Straßenbahnen, Stadtbahnen und U-Bahnen bevorzugt werden sollen.SUBWAY
gibt an, dass für die berechnete Route U-Bahnen bevorzugt werden sollen.TRAIN
gibt an, dass für die berechnete Route Züge bevorzugt werden sollen.TRAM
gibt an, dass für die berechnete Route Straßen- und Stadtbahnen bevorzugt werden sollen.
routingPreference
(optional) gibt Präferenzen für Routen mit öffentlichen Verkehrsmitteln an. Mit dieser Option können Sie die zurückgegebenen Optionen beeinflussen, anstatt die standardmäßige beste Route der API zu verwenden. Dieses Feld kann nur angegeben werden, wenn die Anfrage einen API-Schlüssel enthält. Folgende Werte sind zulässig:FEWER_TRANSFERS
gibt an, dass die berechnete Route möglichst wenige Umstiege beinhalten soll.LESS_WALKING
gibt an, dass die berechnete Route möglichst wenige Gehstrecken enthalten soll.
Hier sehen Sie ein DirectionsRequest
-Beispiel für eine Route mit öffentlichen Verkehrsmitteln:
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Optionen für Kraftfahrzeuge
Mit dem Objekt DrivingOptions
können Sie Routenoptionen für Wegbeschreibungen angeben.
Das Objekt DrivingOptions
enthält die folgenden Felder:
{ departureTime: Date, trafficModel: TrafficModel }
Erläuterungen zu den Feldern:
departureTime
(erforderlich, damit das ObjektliteraldrivingOptions
gültig ist) gibt die gewünschte Startzeit alsDate
-Objekt an. Für den Wert muss die aktuelle Zeit oder eine Zeit in der Zukunft angegeben werden. Er darf nicht in der Vergangenheit liegen. (Die API wandelt alle entsprechenden Angaben in UTC um, um eine einheitliche Verarbeitung in allen Zeitzonen sicherzustellen.) Wenn Sie eine Lizenz für die Google Maps Platform-Premiumoption haben unddepartureTime
in die Anfrage einbeziehen, gibt die API die beste Route angesichts der zu diesem Zeitpunkt zu erwartenden Verkehrslage zurück und schließt die voraussichtliche Reisezeit (duration_in_traffic
) in die Antwort ein. Wenn Sie keine Startzeit angeben,drivingOptions
also nicht in der Anfrage enthalten ist, wird eine passende Route zurückgegeben, ohne die Verkehrslage zu berücksichtigen.trafficModel
(optional) gibt die Annahmen an, die bei der Berechnung der Reisezeit verwendet werden sollen. Diese Einstellung wirkt sich auf den Wert für die voraussichtliche Reisezeit aus, der in der Antwort im Feldduration_in_traffic
zurückgegeben und anhand bisheriger Durchschnittswerte berechnet wird. Die Standardeinstellung istbestguess
. Folgende Werte sind zulässig:bestguess
(Standardwert) gibt an, dass die zurückgegebeneduration_in_traffic
die beste Schätzung der Reisezeit sein sollte. Dazu werden Verlaufs- und Echtzeitdaten zur Verkehrslage herangezogen. Die aktuelle Verkehrslage wird umso stärker gewichtet, je näher diedepartureTime
rückt.pessimistic
gibt an, dass die zurückgegebeneduration_in_traffic
länger sein sollte als die tatsächliche Reisezeit an den meisten Tagen. An Tagen mit besonders schlechter Verkehrslage kann dieser Wert jedoch überschritten werden.optimistic
gibt an, dass die zurückgegebeneduration_in_traffic
an den meisten Tagen kürzer als die tatsächliche Reisezeit sein dürfte. An Tagen mit besonders guter Verkehrslage kann dieser Wert jedoch unterschritten werden.
Hier sehen Sie ein DirectionsRequest
-Beispiel für eine Kraftfahrzeugroute:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Einheitensysteme
Standardmäßig wird für die Berechnung und Anzeige von Routen das Einheitensystem des Ausgangslands bzw. der Ausgangsregion verwendet.
Hinweis: Bei Ausgangsorten, für die Breitengrad-/Längengradkoordinaten anstelle von Adressen angegeben werden, werden standardmäßig immer metrische Einheiten verwendet. Bei einer Route von „Chicago, IL“ nach „Toronto, ONT“ werden die Ergebnisse also in Meilen angezeigt, für die Rückfahrt aber in Kilometern. Sie können das Einheitensystem überschreiben, indem sie in der Anfrage explizit ein anderes System festlegen. Folgende UnitSystem
-Werte sind zulässig:
UnitSystem.METRIC
gibt an, dass das metrische System verwendet werden soll. Entfernungen werden in Kilometern angegeben.UnitSystem.IMPERIAL
gibt an, dass das imperiale (englische) System verwendet werden soll. Entfernungen werden in Meilen angegeben.
Hinweis: Die Einstellung für das Einheitensystem wirkt sich nur auf den Text aus, den der Nutzer sieht. Das Routenergebnis beinhaltet auch Werte für Entfernungen, die dem Nutzer nicht angezeigt werden. Diese werden immer in Metern ausgedrückt.
Gewichtung nach Region
Der „Directions“-Dienst der Google Maps API gibt Adressergebnisse zurück, die sich nach der Domain (Region oder Land) richten, von der Sie das JavaScript Bootstrap geladen haben. Da die meisten Nutzer https://maps.googleapis.com/
laden, wird die USA implizit als Domain festgelegt. Wenn Sie die Bootstrap-URL von einer anderen unterstützten Domain aus laden, erhalten Sie Ergebnisse, die von dieser Domain beeinflusst werden. So kann die Suche nach „San Francisco“ in Anwendungen, die https://maps.googleapis.com/
laden (USA), andere Ergebnisse als in Anwendungen, die http://maps.google.es/
laden (Spanien), liefern.
Sie können auch den region
-Parameter verwenden, damit der „Directions“-Dienst Ergebnisse liefert, die nach Region gewichtet sind. Der Parameter entspricht dem Regionscode, angegeben als zweistelliges (nicht numerisches) untergeordnetes Unicode-Tag für Regionen. In den meisten Fällen sind diese Tags direkt dem zweistelligen Ländercode der Top-Level-Domain (ccTLD) zugeordnet, z. B. „uk“ in „co.uk“. In einigen Fällen unterstützt das region
-Tag auch ISO-3166-1-Codes, die sich teilweise von den ccTLD-Werten unterscheiden, z. B. „GB“ für Großbritannien.
Wenn Sie den region
-Parameter verwenden:
- Geben Sie nur ein Land oder eine Region an. Zusätzliche Werte werden ignoriert und können dazu führen, dass die Anfrage fehlschlägt.
- Verwenden Sie nur zweistellige untergeordnete Tags für Regionen (Unicode-CLDR-Format). Alle anderen Eingaben führen zu Fehlern.
Die Gewichtung nach Region wird nur für Länder und Regionen unterstützt, die Routen unterstützen. Unter Details zur Google Maps Platform-Abdeckung finden Sie Informationen zur internationalen Abdeckung für die Directions API.
Routen rendern
Wenn mit der route()
-Methode eine Routenanfrage an den DirectionsService
gestartet wird, muss eine Callback-Funktion übergeben werden, die nach Abschluss der Dienstanfrage ausgeführt wird. Die Callback-Funktion gibt ein DirectionsResult
und einen DirectionsStatus
-Code als Antwort zurück.
Status von Routenanfragen
Für DirectionsStatus
können folgende Werte zurückgegeben werden:
OK
gibt an, dass die Antwort ein gültigesDirectionsResult
enthält.NOT_FOUND
gibt an, dass mindestens einer der Orte, die in der Anfrage als Startort, Zielort oder Wegpunkt angegeben wurden, nicht geocodiert werden konnte.ZERO_RESULTS
gibt an, dass keine Route zwischen Start- und Zielort gefunden werden konnte.MAX_WAYPOINTS_EXCEEDED
gibt an, dass zu vieleDirectionsWaypoint
-Felder in derDirectionsRequest
angegeben wurden. Weitere Informationen finden Sie unten im Abschnitt Limits und Einschränkungen für Wegpunkte.MAX_ROUTE_LENGTH_EXCEEDED
gibt an, dass die angeforderte Route zu lang ist und nicht verarbeitet werden kann. Dieser Fehler tritt auf, wenn komplexere Routen zurückgegeben werden. Verringern Sie die Anzahl der Wegpunkte, Abzweigungen oder Anleitungen.INVALID_REQUEST
gibt an, dass derDirectionsRequest
ungültig war. Die häufigste Ursache für diesen Fehlercode sind Anfragen ohne Start- oder Zielort oder Anfragen für öffentliche Verkehrsmittel, die Wegpunkte enthalten.OVER_QUERY_LIMIT
gibt an, dass die Webseite zu viele Anfragen innerhalb des zulässigen Zeitraums gesendet hat.REQUEST_DENIED
gibt an, dass die Webseite den „Directions“-Dienst nicht verwenden darf.UNKNOWN_ERROR
gibt an, dass eine Routenanfrage aufgrund eines Serverfehlers nicht verarbeitet werden konnte. Möglicherweise ist sie beim nächsten Versuch erfolgreich.
Sie sollten sich diesen Wert ansehen, bevor das Ergebnis verarbeitet wird, um sicherzustellen, dass die Routenanfrage gültige Ergebnisse geliefert hat.
„DirectionsResult“-Objekt anzeigen
Das DirectionsResult
beinhaltet das Ergebnis der Routenanfrage. Sie können es entweder selbst verarbeiten oder an ein DirectionsRenderer
-Objekt übergeben, das das Ergebnis automatisch auf der Karte rendert.
Um einen DirectionsRenderer
für ein DirectionsResult
zu verwenden, müssen Sie Folgendes tun:
- Erstellen Sie ein
DirectionsRenderer
-Objekt. - Rufen Sie
setMap()
im Renderer auf, um ihn an die übergebene Karte zu binden. - Rufen Sie
setDirections()
im Renderer auf und übergeben Sie dasDirectionsResult
wie oben erwähnt. Der Renderer ist einMVCObject
. Daher erkennt er automatisch Änderungen an seinen Eigenschaften und aktualisiert die Karte, wenn sich die zugewiesenen Routen geändert haben.
Im folgenden Beispiel wird die Route zwischen zwei Orten an der Route 66 berechnet. Dabei werden Start- und Zielort durch die "start"
- und "end"
-Werte in den Drop-down-Listen definiert. Der DirectionsRenderer
rendert die Polylinie zwischen den angegebenen Orten und die Markierungen für Startort, Zielort und alle Wegpunkte, falls vorhanden.
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
Im HTML-Textkörper:
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
Im folgenden Beispiel werden Routen von Haight-Ashbury nach Ocean Beach in San Francisco, CA, USA für verschiedene Mobilitätsformen angezeigt:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
Im HTML-Textkörper:
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
Ein DirectionsRenderer
rendert nicht nur die Polylinie und alle zugewiesenen Markierungen, sondern bei Bedarf auch die Routenschritte in Textform. Dazu rufen Sie setPanel()
im DirectionsRenderer
auf und übergeben das <div>
-Element, in dem diese Informationen angezeigt werden sollen.
So wird auch sichergestellt, dass Sie die erforderlichen Copyright-Hinweise und alle Warnungen für das Ergebnis anzeigen.
Für die Routen in Textform wird die Spracheinstellung des Browsers verwendet oder die Sprache, die beim Laden des API-JavaScript-Codes mit dem language
-Parameter festgelegt wurde. Weitere Informationen finden Sie unter Karte lokalisieren. Bei Routen für öffentliche Verkehrsmittel wird die Zeit in der Zeitzone der jeweiligen Haltestelle angezeigt.
Das folgende Beispiel ist mit dem vorherigen identisch, beinhaltet jedoch einen <div>
-Bereich, in dem die Route angezeigt wird:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
Im HTML-Textkörper:
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
„DirectionsResult“-Objekt
Wenn Sie eine Routenanfrage an den DirectionsService
senden, erhalten Sie eine Antwort, die aus einem Statuscode und einem Ergebnis (einem DirectionsResult
-Objekt) besteht. DirectionsResult
ist ein Objektliteral mit den folgenden Feldern:
geocoded_waypoints[]
enthält ein Array mitDirectionsGeocodedWaypoint
-Objekten, von denen jedes Details zum Geocoding von Startort, Zielort und Wegpunkten enthält.routes[]
enthält ein Array mitDirectionsRoute
-Objekten. Jede Route gibt einen Weg an, der den Start- und Zielort aus derDirectionsRequest
miteinander verbindet. Generell wird für eine Anfrage nur eine Route zurückgegeben, es sei denn, für das FeldprovideRouteAlternatives
der Anfrage wurdetrue
festgelegt, damit mehrere Routen zurückgegeben werden können.
Hinweis: Die Eigenschaft via_waypoint
wurde in alternativen Routen eingestellt. Version 3.27 ist die letzte Version der API, die zusätzliche Wegpunkte in alternativen Routen hinzufügt. Ab Version 3.28 der API können Sie weiterhin ziehbare Routen über den „Directions“-Dienst implementieren. Dazu müssen Sie das Ziehen alternativer Routen deaktivieren.
Nur die Hauptroute sollte ziehbar sein. Nutzer können die Hauptroute ziehen, bis sie einer alternativen Route entspricht.
Routen mit geocodierten Wegpunkten
Ein DirectionsGeocodedWaypoint
enthält Details zum Geocoding von Startort, Zielort und Wegpunkten.
DirectionsGeocodedWaypoint
ist ein Objektliteral mit folgenden Feldern:
geocoder_status
gibt den Statuscode des Geocoding-Vorgangs an. Das Feld kann folgende Werte enthalten:"OK"
gibt an, dass die Adresse ohne Fehler geparst und mindestens ein Geocode zurückgegeben wurde."ZERO_RESULTS"
gibt an, dass die Geocodierung erfolgreich war, aber keine Ergebnisse zurückgegeben wurden. Dieser Status kann ausgegeben werden, wenn dem Geocoder ein nicht vorhandenesaddress
-Element übergeben wurde.
-
partial_match
gibt an, dass der Geocoder keine genaue Übereinstimmung für die ursprüngliche Anfrage zurückgegeben hat, obwohl ein Teil der angeforderten Adresse zugeordnet werden konnte. Wir empfehlen, die ursprüngliche Anfrage auf Tippfehler und/oder Vollständigkeit zu prüfen.Teilweise Übereinstimmungen treten am häufigsten bei Adressen auf, die nicht in dem Ort vorhanden sind, der in der Anfrage übergeben wird. Sie werden unter Umständen auch zurückgegeben, wenn eine Anfrage mit mehreren Adressen in einem Ort übereinstimmt. Wird „Henr St, Bristol, UK“ angefragt, wird z. B. eine teilweise Übereinstimmung für die Henry Street und die Henrietta Street zurückgegeben. Enthält eine Anfrage eine Adresskomponente mit Tippfehler, wird vom Geocoding-Dienst möglicherweise eine andere Adresse vorgeschlagen. Solche Vorschläge werden auch als teilweise Übereinstimmung gekennzeichnet.
place_id
ist eine eindeutige Kennung für einen Ort, die mit anderen Google APIs verwendet werden kann. Sie können z. B. dieplace_id
mit der Google Places API-Bibliothek verwenden, um Details zu einem lokalen Unternehmen wie Telefonnummer, Öffnungszeiten oder Nutzerrezensionen abzurufen. Weitere Informationen finden Sie unter Orts-IDs.types[]
ist ein Array, das den Typ des zurückgegebenen Ergebnisses angibt. Das Array enthält eine Reihe mit null oder mehr Tags, mit denen der Typ des im Ergebnis zurückgegebenen Elements bestimmt wird. Wird der Geocode für Chicago angefordert, wird z. B. ein Element vom Typ „locality“ zurückgegeben, was bedeutet, dass Chicago ein Ort ist, sowie das Element „political“, was bedeutet, dass Chicago eine politische Einheit ist.
Routen
Hinweis: Das alte DirectionsTrip
-Objekt wurde in DirectionsRoute
umbenannt. Eine Route bezieht sich nun auf die gesamte Reise von Start bis Ziel und nicht mehr nur auf einen Abschnitt einer übergeordneten Reise.
DirectionsRoute
enthält ein einzelnes Ergebnis für den angegebenen Start- und Zielort. Die Route kann aus einem oder mehreren Abschnitten bestehen (Typ DirectionsLeg
), je nachdem, ob Wegpunkte angegeben wurden. Darüber hinaus enthält die Route Copyright-Hinweise und Warnungen, die dem Nutzer zusätzlich zu den Routeninformationen angezeigt werden müssen.
DirectionsRoute
ist ein Objektliteral mit folgenden Feldern:
legs[]
enthält ein Array mitDirectionsLeg
-Objekten, von denen jedes Informationen zu einem Abschnitt zwischen zwei Orten der angegebenen Route beinhaltet. Für jeden angegebenen Wegpunkt oder Zielort ist ein separater Routenabschnitt vorhanden. Routen ohne Wegpunkte enthalten genau einDirectionsLeg
. Jeder Abschnitt besteht aus einer Reihe vonDirectionStep
s.waypoint_order
enthält ein Array, das die Reihenfolge der Wegpunkte in der berechneten Route angibt. Das Array kann eine alternative Reihenfolge enthalten, wennoptimizeWaypoints: true
bei demDirectionsRequest
übergeben wurde.overview_path
enthält ein Array mitLatLng
-Werten, die einen angenäherten (geglätteten) Pfad der ermittelten Route darstellen.overview_polyline
enthält ein einzelnespoints
-Objekt mit einer codierten Polylinie. Die Polylinie ist der annähernde (geglättete) Pfad der ermittelten Route.bounds
enthält einenLatLngBounds
-Wert, der die Grenzen der Polylinie entlang der gegebenen Route angibt.copyrights
enthält den Copyright-Text, der für diese Route angezeigt werden soll.warnings[]
enthält ein Array mit Warnungen, die zusammen mit der Route angezeigt werden müssen. Wenn Sie das bereitgestellteDirectionsRenderer
-Objekt nicht verwenden, müssen Sie diese Warnungen selbst verarbeiten und darstellen.fare
enthält den Gesamtfahrpreis (die gesamten Fahrkartenkosten) für diese Route. Diese Eigenschaft wird nur für Anfragen für Routen mit öffentlichen Verkehrsmitteln zurückgegeben und nur, wenn für alle Abschnitte mit öffentlichen Verkehrsmitteln Fahrpreisinformationen zur Verfügung stehen. Folgende Informationen werden zurückgegeben:currency
: Ein Währungscode nach ISO 4217 für die Währung des Betrags.value
: Der Gesamtfahrpreis, in der oben angegebenen Währung.
Routenabschnitte
Hinweis: Das alte DirectionsRoute
-Objekt wurde in DirectionsLeg
umbenannt.
DirectionsLeg
definiert einen einzelnen Abschnitt der ermittelten Route zwischen Start- und Zielort.
Routen ohne Wegpunkte bestehen aus einem einzelnen Abschnitt. Routen mit Wegpunkten enthalten zusätzliche Abschnitte in entsprechender Anzahl.
DirectionsLeg
ist ein Objektliteral mit folgenden Feldern:
steps[]
enthält ein Array mitDirectionsStep
-Objekten mit Informationen zu den einzelnen Schritten eines Abschnitts.distance
gibt die Gesamtstrecke, die in diesem Abschnitt zurückgelegt wird, alsDistance
-Objekt mit folgender Form an:value
gibt die Strecke in Metern an.text
enthält einen String zur Darstellung der Strecke. Er wird standardmäßig in den Einheiten angezeigt, die am Startort verwendet werden. Liegt dieser in den USA, werden z. B. Meilen verwendet. Sie können das Einheitensystem überschreiben, indem Sie in der ursprünglichen Anfrage ein spezifischesUnitSystem
festlegen. Unabhängig davon, welches Einheitensystem Sie verwenden, wird der Wert im Felddistance.value
immer in Metern angegeben.
Diese Felder können leer sein, wenn die Strecke nicht bekannt ist.
duration
gibt die Gesamtdauer für diesen Abschnitt alsDuration
-Objekt mit folgender Form an:value
gibt die Dauer in Sekunden an.text
enthält einen String zur Darstellung der Dauer.
Diese Felder können leer sein, wenn die Dauer nicht bekannt ist.
duration_in_traffic
gibt die Gesamtdauer dieses Abschnitts unter Berücksichtigung der aktuellen Verkehrslage an.duration_in_traffic
wird nur zurückgegeben, wenn alle der folgenden Bedingungen erfüllt sind:- Die Anfrage enthält keine Wegpunkte mit Aufenthalt. Das heißt, sie enthält keine Wegpunkte, wo
stopover
den Werttrue
hat. - Die Anfrage bezieht sich speziell auf Kraftfahrzeugrouten –
mode
ist aufdriving
gesetzt. departureTime
ist im FelddrivingOptions
in der Anfrage enthalten.- Für die angeforderte Route sind Informationen zur Verkehrslage verfügbar.
duration_in_traffic
enthält die folgenden Felder:value
gibt die Dauer in Sekunden an.text
enthält eine menschenlesbare Darstellung der Dauer.
- Die Anfrage enthält keine Wegpunkte mit Aufenthalt. Das heißt, sie enthält keine Wegpunkte, wo
arrival_time
enthält die voraussichtliche Ankunftszeit für diesen Abschnitt. Diese Eigenschaft wird nur bei Anfragen für öffentliche Verkehrsmittel zurückgegeben. Das Ergebnis wird alsTime
-Objekt mit drei Eigenschaften zurückgegeben:value
ist die Zeit und wird als JavaScript-Date
-Objekt angegeben.text
ist die als String angegebene Zeit. Sie wird in der Zeitzone der Haltestelle angegeben.time_zone
enthält die Zeitzone dieser Haltestelle. Dabei wird der entsprechende Wert aus der IANA-Zeitzonendatenbank verwendet, z. B. „Europe/Paris“.
departure_time
enthält die voraussichtliche Abfahrtszeit für diesen Abschnitt und wird alsTime
-Objekt angegeben.departure_time
ist nur für Routen mit öffentlichen Verkehrsmitteln verfügbar.start_location
enthält denLatLng
-Wert des Startorts dieses Abschnitts. Der „Directions“-Webdienst berechnet Routen zwischen Orten, indem er die nächstgelegene Mobilitätsoption (in der Regel eine Straße) am Start- und Endpunkt verwendet. Daher kannstart_location
vom angegebenen Startpunkt dieses Abschnitts abweichen, wenn es beispielsweise keine Straße in der Nähe des Startpunkts gibt.end_location
enthält denLatLng
-Wert des Zielorts dieses Abschnitts. DerDirectionsService
berechnet Routen zwischen Orten, indem er die nächstgelegene Mobilitätsoption (in der Regel eine Straße) am Start- und Endpunkt verwendet. Daher kannend_location
vom angegebenen Zielpunkt dieses Abschnitts abweichen, wenn es beispielsweise keine Straße in der Nähe des Zielpunkts gibt.start_address
enthält die menschenlesbare Adresse für den Start des Abschnitts, in der Regel die Straße.
Der Inhalt ist so zu lesen, wie er ist. Die formatierte Adresse darf nicht programmatisch geparst werden.end_address
enthält die menschenlesbare Adresse für das Ende des Abschnitts, in der Regel die Straße.
Der Inhalt ist so zu lesen, wie er ist. Die formatierte Adresse darf nicht programmatisch geparst werden.
Routenschritte
Ein DirectionsStep
ist die kleinste Einheit einer Route – ein einzelner Schritt, der eine spezifische, einzelne Anweisung auf der Route beschreibt. Beispiel: „Biegen Sie an der Hauptstraße links ab.“ 4th St.“ Er enthält nicht nur die Anweisung, sondern es werden auch Informationen zur Entfernung und Dauer für den nächsten Schritt angezeigt.
Enthält der Schritt „Weiter auf A15“ die Angaben „37 Kilometer“ und „40 Minuten“, bedeutet das z. B., dass der nächste Schritt 37 Kilometer und 40 Minuten entfernt ist.
Wenn Sie mit dem „Directions“-Dienst nach Routen für öffentliche Verkehrsmittel suchen, enthält das Array mit Schritten zusätzliche spezifische Informationen zu öffentlichen Verkehrsmitteln in Form eines transit
-Objekts. Beinhaltet die Route mehrere Mobilitätsformen, werden detaillierte Anleitungen für Geh- oder Fahrstrecken in einem steps[]
-Array bereitgestellt.
Angenommen, eine Gehstrecke enthält eine Wegbeschreibung vom Start- zum Zielort: „Bis Ecke Hauptstraße/Lindenallee gehen“. Dann umfasst der Schritt eine detaillierte Beschreibung der Gehstrecke für diese Route im steps[]
-Array, etwa „Nach Nordwesten gehen“, „Links auf Uferstraße abbiegen“ und „Links auf Hauptstraße abbiegen“.
DirectionsStep
ist ein Objektliteral mit folgenden Feldern:
instructions
enthält eine Anleitung für diesen Schritt in einem Textstring.distance
enthält die Strecke zwischen diesem und dem nächsten Schritt alsDistance
-Objekt. Weitere Informationen finden Sie in der Beschreibung zuDirectionsLeg
oben. Dieses Feld kann leer sein, wenn die Strecke nicht bekannt ist.duration
enthält eine Schätzung der Zeit, die zum Abschließen des Schritts bis zum nächsten Schritt benötigt wird (alsDuration
-Objekt). Weitere Informationen finden Sie in der Beschreibung zuDirectionsLeg
oben. Dieses Feld kann leer sein, wenn die Dauer nicht bekannt ist.start_location
enthält den geocodiertenLatLng
-Wert des Startpunkts dieses Schritts.end_location
enthält den geocodiertenLatLng
-Wert des Endpunkts dieses Schritts.polyline
enthält ein einzelnespoints
-Objekt mit einer codierten Polylinie zum Darstellen des Schritts. Die Polylinie ist der annähernde (geglättete) Pfad des Schritts.steps[]
ist einDirectionsStep
-Objektliteral, das detaillierte Anleitungen für Geh- und Fahrstrecken in Routen für öffentliche Verkehrsmittel enthält. Teilschritte sind nur für Routen für öffentliche Verkehrsmittel verfügbar.travel_mode
enthält den in diesem Schritt verwendetenTravelMode
. Routen für öffentliche Verkehrsmittel können Gehstrecken und Strecken mit öffentlichen Verkehrsmitteln enthalten.path
enthält ein Array mitLatLngs
-Werten zur Beschreibung des Verlaufs dieses Schritts.transit
enthält spezifische Informationen zu öffentlichen Verkehrsmitteln, z. B. Ankunfts- und Abfahrtszeiten sowie den Namen der ÖPNV-Linie.
Spezifische Informationen zu öffentlichen Verkehrsmitteln
Bei Routen für öffentliche Verkehrsmittel werden zusätzliche Informationen zurückgegeben, die für andere Mobilitätsformen nicht relevant sind. Diese zusätzlichen Eigenschaften werden über das Objekt TransitDetails
bereitgestellt, das als Eigenschaft von DirectionsStep
zurückgegeben wird. Über das Objekt TransitDetails
können Sie, wie unten beschrieben, auf zusätzliche Informationen für die Objekte TransitStop
, TransitLine
, TransitAgency
und VehicleType
zugreifen.
Details zu öffentlichen Verkehrsmitteln
Das Objekt TransitDetails
stellt die folgenden Eigenschaften bereit:
arrival_stop
enthält einTransitStop
-Objekt, das die Zielhaltestelle mit den folgenden Eigenschaften darstellt:name
ist der Name der Haltestelle, z. B. „Union Square“.location
ist der Standort der Haltestelle, angegeben alsLatLng
-Wert.
departure_stop
enthält einTransitStop
-Objekt, das die Starthaltestelle darstellt.arrival_time
enthält die Ankunftszeit und wird alsTime
-Objekt mit drei Eigenschaften angegeben:value
ist die Zeit und wird als JavaScript-Date
-Objekt angegeben.text
ist die als String angegebene Zeit. Sie wird in der Zeitzone der Haltestelle angegeben.time_zone
enthält die Zeitzone dieser Haltestelle. Dabei wird der entsprechende Wert aus der IANA-Zeitzonendatenbank verwendet, z. B. „Europe/Paris“.
departure_time
enthält die Abfahrtszeit und wird alsTime
-Objekt angegeben.headsign
gibt die Fahrtrichtung dieser Linie an, die auf dem Fahrzeug oder an der Haltestelle ausgewiesen ist. Oft ist das der Name der Endhaltestelle.headway
(sofern verfügbar) gibt die erwartete Anzahl Sekunden zwischen Abfahrten von derselben Haltestelle zu dieser Zeit an. Bei einemheadway
-Wert von 600 wäre z. B. mit einer Wartezeit von 10 Minuten zu rechnen, wenn man einen Bus verpasst.line
enthält einTransitLine
-Objektliteral, das Informationen zu der in diesem Schritt verwendeten ÖPNV-Linie enthält.TransitLine
gibt Namen und Betreiber der Linie sowie andere Eigenschaften, die in derTransitLine
-Referenzdokumentation beschrieben werden, an.num_stops
enthält die Anzahl der Haltestellen in diesem Schritt. Dabei wird die Zielhaltestelle mitgezählt, die Starthaltestelle aber nicht. Wenn Sie z. B. an Haltestelle A abfahren, die Haltestellen B und C durchfahren und bei Haltestelle D aussteigen, wird fürnum_stops
3 zurückgegeben.
ÖPNV-Linie
Das TransitLine
-Objekt umfasst folgende Eigenschaften:
name
enthält den vollständigen Namen der ÖPNV-Linie, z. B. „Hauptbahnhof“ oder „Altona“.short_name
enthält den Kurznamen der ÖPNV-Linie. Das ist normalerweise eine Nummer wie „2“ oder „M14“.agencies
ist ein Array mit einem einzelnenTransitAgency
-Objekt. DasTransitAgency
-Objekt stellt Informationen zum Betreiber der Linie bereit, darunter folgende Eigenschaften:name
enthält den Namen des Betreibers.phone
enthält die Telefonnummer des Betreibers.url
enthält die URL des Betreibers.
Hinweis: Wenn Sie Routen mit öffentlichen Verkehrsmitteln manuell rendern, statt das
DirectionsRenderer
-Objekt zu verwenden, müssen die Namen und URLs der Betreiber für die Ergebnisse angezeigt werden.url
enthält eine URL für die ÖPNV-Linie, die vom Betreiber bereitstellt wird.icon
enthält eine URL für das Symbol, das dieser Linie zugeordnet ist. In den meisten Städten sind das generische Symbole, die je nach Fahrzeugtyp variieren. Manche ÖPNV-Linien, z. B. die New Yorker U-Bahnen, haben spezifische Symbole.color
enthält die Farbe, die üblicherweise für die Beschilderung dieser Linie verwendet wird. Sie wird als hexadezimaler String angegeben, z. B. #FF0033.text_color
enthält die Textfarbe, die üblicherweise für die Beschilderung dieser Linie verwendet wird. Sie wird als hexadezimaler String angegeben.vehicle
enthält einVehicle
-Objekt mit folgenden Eigenschaften:name
enthält den Namen des Fahrzeugs, das auf dieser Linie eingesetzt wird, z. B. „U-Bahn“.type
enthält den Typ des Fahrzeugs, das auf dieser Linie eingesetzt wird. Eine vollständige Liste der unterstützten Werte finden Sie in der Dokumentation zum Fahrzeugtyp.icon
enthält eine URL für das Symbol, das diesem Fahrzeugtyp normalerweise zugeordnet ist.local_icon
enthält die URL für das Symbol, das diesem Fahrzeugtyp zugeordnet ist, und basiert auf der Beschilderung.
Fahrzeugtyp
Das VehicleType
-Objekt umfasst folgende Eigenschaften:
Wert | Definition |
---|---|
VehicleType.RAIL |
Bahn |
VehicleType.METRO_RAIL |
Stadtbahn |
VehicleType.SUBWAY |
U-Bahn |
VehicleType.TRAM |
Straßenbahn |
VehicleType.MONORAIL |
Einschienenbahn |
VehicleType.HEAVY_RAIL |
Eisenbahn |
VehicleType.COMMUTER_TRAIN |
Schnellbahn |
VehicleType.HIGH_SPEED_TRAIN |
Schnellzug |
VehicleType.BUS |
Bus |
VehicleType.INTERCITY_BUS |
Fernbus |
VehicleType.TROLLEYBUS |
Oberleitungsbus |
VehicleType.SHARE_TAXI |
Sammeltaxis sind eine Art Bus, bei dem Fahrgäste überall auf der Strecke ein- und aussteigen können. |
VehicleType.FERRY |
Fähre |
VehicleType.CABLE_CAR |
Ein Fahrzeug, das über Kabel betrieben wird, normalerweise am Boden. Luftseilbahnen haben den Typ VehicleType.GONDOLA_LIFT . |
VehicleType.GONDOLA_LIFT |
Eine Luftseilbahn. |
VehicleType.FUNICULAR |
Ein Fahrzeug, das mit einem Kabel eine starke Steigung hinaufgezogen wird. Eine Standseilbahn besteht normalerweise aus zwei Wagen, wobei jeder als Gegengewicht für den anderen dient. |
VehicleType.OTHER |
Bei allen anderen Fahrzeugen wird dieser Typ zurückgegeben. |
„DirectionsResults“ analysieren
Die DirectionsResults
-Komponenten (DirectionsRoute
, DirectionsLeg
, DirectionsStep
und TransitDetails
) können beim Parsen von Routenantworten analysiert und verwendet werden.
Wichtig: Wenn Sie Routen mit öffentlichen Verkehrsmitteln manuell rendern, statt das DirectionsRenderer
-Objekt zu verwenden, müssen die Namen und URLs der Betreiber für die Ergebnisse angezeigt werden.
Im folgenden Beispiel wird die Fußgängerroute zu bestimmten Touristenattraktionen in New York City dargestellt. Wir analysieren die DirectionsStep
s der Route, um Markierungen für die einzelnen Schritte und ein InfoWindow
mit Textanweisungen für den jeweiligen Schritt einzufügen.
Hinweis: Da eine Fußgängerroute berechnet wird, werden Nutzern potenzielle Warnungen in einem separaten <div>
-Bereich angezeigt.
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
Im HTML-Textkörper:
<div>
<strong>Start: </strong>
<select id="start">
<option value="penn station, new york, ny">Penn Station</option>
<option value="grand central station, new york, ny">Grand Central Station</option>
<option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option>
<option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option>
<option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
<option value="260 Broadway New York NY 10007">City Hall</option>
<option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option>
<option value="moma, New York, NY">MOMA</option>
<option value="350 5th Ave, New York, NY, 10118">Empire State Building</option>
<option value="253 West 125th Street, New York, NY">Apollo Theatre</option>
<option value="1 Wall St, New York, NY">Wall St</option>
</select>
<div>
Wegpunkte in Routen verwenden
Wie unter Routenanfragen erwähnt, können Sie beim Berechnen von Routen für Fußgänger, Radfahrer oder Autofahrer über den „Directions“-Dienst auch Wegpunkte (vom Typ DirectionsWaypoint
) angeben. Für Routen mit öffentlichen Verkehrsmitteln werden Wegpunkte nicht unterstützt.
Wenn Sie Wegpunkte angeben, verläuft die zurückgegebene Route durch die entsprechenden Orte.
Ein waypoint
besteht aus folgenden Feldern:
location
(erforderlich) gibt die Adresse des Wegpunkts an.stopover
(optional) gibt an, ob dieser Wegpunkt ein tatsächlicher Aufenthalt auf der Route ist (true
) oder nur ein Ort, durch den die Route bevorzugt verlaufen soll (false
). Aufenthalte sind standardmäßigtrue
.
Standardmäßig berechnet der „Directions“-Dienst die Route über die Wegpunkte in der angegebenen Reihenfolge. Optional können Sie optimizeWaypoints: true
in
DirectionsRequest
übergeben, damit der „Directions“-Dienst die Wegpunkte in eine effizientere Reihenfolge bringen kann, um die Route zu optimieren. Diese Optimierung ist eine Umsetzung des Rundreiseproblems. Die Route wird primär nach der Fahrzeit optimiert, es können aber auch andere Faktoren berücksichtigt werden, wie z. B. die Entfernung oder die Anzahl der Abzweige. Damit der „Directions“-Dienst die Route optimieren kann, müssen alle Wegpunkte als Aufenthalte definiert sein.
Wenn Sie den „Directions“-Dienst anweisen, die Reihenfolge der Wegpunkte zu optimieren, wird die Reihenfolge im Feld waypoint_order
im DirectionsResult
-Objekt zurückgegeben.
Im folgenden Beispiel werden Routen durch die USA mit verschiedenen Start-, End- und Wegpunkten berechnet. Durch Strg + Klicken können Sie mehrere Wegpunkte in der Liste gleichzeitig auswählen.
Wir analysieren routes.start_address
und routes.end_address
, um den Text für den Start- und Endpunkt jeder Route zu erhalten.
TypeScript
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
Limits und Einschränkungen für Wegpunkte
Für Wegpunkte gelten die folgenden Nutzungslimits und Einschränkungen:
- Bei Verwendung des „Directions“-Diensts in der Maps JavaScript API sind maximal 25 Wegpunkte plus Ausgangs- und Zielort zulässig. Die Limits gelten auch für den Directions API-Webdienst.
- Für den Directions API-Webdienst sind maximal 25 Wegpunkte plus Ausgangs- und Zielort zulässig.
- Für Kunden mit der Google Maps Platform-Premiumoption sind 25 Wegpunkte plus Ausgangs- und Zielort zulässig.
- Für Routen mit öffentlichen Verkehrsmitteln werden Wegpunkte nicht unterstützt.
Ziehbare Routen
Nutzer können Routen für Radfahrer, Fußgänger und Autofahrer, die mithilfe eines DirectionsRenderer
-Objekts angezeigt werden, dynamisch anpassen, wenn sie ziehbar sind. Dazu klicken sie die Pfade auf der Karte an und ziehen sie auf die gewünschten Positionen.
Damit Nutzer Routen so anpassen können, müssen Sie die draggable
-Eigenschaft des Renderers auf true
setzen. Für Routen für öffentliche Verkehrsmittel ist diese Option nicht verfügbar.
Wenn Routen ziehbar sind, kann der Nutzer einen beliebigen Punkt auf dem Pfad (oder Wegpunkt) des gerenderten Ergebnisses anklicken bzw. antippen und an eine neue Position ziehen. Der DirectionsRenderer
wird dynamisch aktualisiert, um den geänderten Pfad anzuzeigen. Lässt der Nutzer los, wird der Karte ein Zwischenwegpunkt hinzugefügt und durch eine kleine weiße Markierung gekennzeichnet. Wird ein Pfadsegment ausgewählt und verschoben, ändert sich der betreffende Abschnitt der Route. Beim Auswählen und Verschieben einer Wegpunktmarkierung (einschließlich Start- und Endpunkt) werden die Routenabschnitte geändert, die über diesen Wegpunkt verlaufen.
Da ziehbare Routen clientseitig angepasst und gerendert werden, sollten Sie das directions_changed
-Ereignis im DirectionsRenderer
beobachten und verarbeiten, damit eine Benachrichtigung ausgegeben wird, wenn der Nutzer die angezeigte Route ändert.
Mit folgendem Code wird eine Fahrt von Perth an der australischen Westküste nach Sydney an der Ostküste angezeigt. Dabei wird das directions_changed
-Ereignis beobachtet, um die Gesamtstrecke aller Routenabschnitte zu aktualisieren.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;