Die Methode computeRoutes (REST) und die Methode ComputeRoutes (gRPC) geben beide die Route zurück, die durch eine Polylinie als Teil der Antwort dargestellt wird. Diese APIs geben zwei Arten von Polylinien zurück:
Grundlegende Polylinie (Standard): Stellt eine Route dar, ohne dass in die Polylinie Verkehrsinformationen eingebettet sind. Anfragen, die eine einfache Polylinie zurückgeben, werden zum Basispreis für Routen abgerechnet. Weitere Informationen zur Abrechnung für die Routes API
Polylinie mit Verkehrserkennung: Enthält Informationen zur Verkehrslage entlang der Route. Die Verkehrslage wird in Form von Geschwindigkeitskategorien (
NORMAL
,SLOW
,TRAFFIC_JAM
) angegeben, die für ein bestimmtes Intervall der Polylinie gelten. Anfragen für Polylinien, die den Traffic berücksichtigen, werden zum Tarif „Routes Preferred“ abgerechnet. Weitere Informationen zur Abrechnung für die Routes API Weitere Informationen findest du unter Qualität von Polylinien konfigurieren.
Weitere Informationen zu Polylinien finden Sie unter:
Mit dem interaktiven Dienstprogramm zum Codieren von Polylinien können Sie codierte Polylinien in einer Benutzeroberfläche erstellen oder Polylinien decodieren, um sie auf einer Karte anzuzeigen. Mit diesem Dienst können Sie beispielsweise eine Polylinie decodieren, die mit dem folgenden Code erstellt wurde.
Grundlegende Polylinie für eine Route, einen Abschnitt oder einen Schritt anfordern
Polylinien werden durch ein Objekt vom Typ Polyline (REST) oder Polyline (gRPC) dargestellt. Sie können in der Antwort eine Polylinie auf Routen-, Strecken- und Schrittebene zurückgeben.
Geben Sie mithilfe der Antwortfeldmaske an, welche Polylinie zurückgegeben werden soll:
Auf Routenebene geben Sie in der Antwort eine Polylinie zurück, indem Sie
routes.polyline
in die Antwortfeldmaske aufnehmen.Auf Streckenabschnittsebene wird in der Antwort für jeden Abschnitt der Route eine Polylinie zurückgegeben, indem
routes.legs.polyline
einbezogen wird.Auf Schrittebene geben Sie in der Antwort für jeden Schritt des Abschnitts einen Polylinienzug zurück, indem Sie
routes.legs.steps.polyline
einfügen.
So wird beispielsweise eine Polylinie für die gesamte Route, für jeden Streckenabschnitt und für jeden Schritt jedes Abschnitts zurückgegeben:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.legs.steps.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
Diese Anfrage gibt die folgende Antwort zurück, die die Polylinie für die Route, für jeden Abschnitt der Route und für jeden Schritt des Abschnitts enthält:
{ "routes": [ { "legs": [ { "polyline": { "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?" } }, "steps": [ { "polyline": { "encodedPolyline": "kclcF...@sC@YIOKI" } }, { "polyline": { "encodedPolyline": "wblcF~...SZSF_@?" } }, ... ], "distanceMeters": 56901, "duration": "2420s", "polyline": { "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?" } } ] }
Da diese Anfrage nur einen Start- und einen Zielort enthält, enthält die zurückgegebene Route nur einen Abschnitt. Daher ist die Polylinie für den Streckenabschnitt und die Route identisch.
Wenn Sie der Anfrage einen Zwischenwegpunkt hinzufügen, enthält die zurückgegebene Route zwei Abschnitte:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "intermediates": [ { "address": "450 Serra Mall, Stanford, CA 94305, USA"}, ], "travelMode": "DRIVE", }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
Diese Anfrage gibt zwei Streckenabschnitte mit jeweils einer eindeutigen Polylinie und einer Polylinie für die gesamte Route zurück:
{ "routes": [ { "legs": [ { "polyline": { "encodedPolyline": "kclcFfqchV?A...?I@G?GAECCCEKICBAFG" } "steps": [ { "polyline": { "encodedPolyline": "kclcFfqch...YIOKI" } }, ... }, { "polyline": { "encodedPolyline": "ojmcFtethV?K...QOYQOGA?_@MUG[Ga@G" } "steps": [ { "polyline": { "encodedPolyline": "uypeFbo`jVgJq...PoBiC" } }, ... } ], "distanceMeters": 68403, "duration": "3759s", "polyline": { "encodedPolyline": "kclcFfqchV?A?CBKF[Ha...?GAECCCEKICBAFGJEBE" } } ] }
Qualität der Polylinie
Die Qualität einer Polylinie kann folgendermaßen beschrieben werden:
Die Gleitkommagenauigkeit der Punkte
Punkte werden als Breiten- und Längengradwerte angegeben, die im Gleitkommaformat mit einfacher Genauigkeit dargestellt werden. Das funktioniert gut für kleine Werte, die genau dargestellt werden können. Die Genauigkeit nimmt jedoch mit zunehmenden Werten aufgrund von Rundungsfehlern bei Gleitkommazahlen ab.
Bei der Methode computeRoutes (REST) und ComputeRoutes wird dies durch
polylineEncoding
gesteuert.Die Anzahl der Punkte, aus denen die Polylinie besteht
Je mehr Punkte vorhanden sind, desto glatter ist die Polylinie (insbesondere in Kurven).
In der Methode computeRoutes (REST) und ComputeRoutes wird dies von
polylineQuality
gesteuert.
Polyliniencodierungstyp konfigurieren
Verwenden Sie die Anfrageoption polylineEncoding
, um den Polylinientyp zu steuern.
Mit der Property polylineEncoding
wird festgelegt, ob die Polylinie als ENCODED_POLYLINE
(Standard) codiert wird, was bedeutet, dass das Algorithmusformat für codierte Polylinien verwendet wird, oder als GEO_JSON_LINESTRING
, was bedeutet, dass das GeoJSON-LineString-Format verwendet wird.
Beispiel im Anfragetext:
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE", "polylineEncoding": "ENCODED_POLYLINE" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
Qualität der Polylinie konfigurieren
polylineQuality
gibt die Qualität der Polylinie als HIGH_QUALITY
oder OVERVIEW
(Standardeinstellung) an. Mit OVERVIEW
setzt sich die Polylinie aus wenigen Punkten zusammen und hat eine niedrigere Anfragelatenz als HIGH_QUALITY
.
Zum Beispiel im Anfragetext:
{ "origin":{ "location":{ "latLng":{ "latitude": 37.419734, "longitude": -122.0827784 } } }, "destination":{ "location":{ "latLng":{ "latitude": 37.417670, "longitude": -122.079595 } } }, "travelMode": "DRIVE", "routingPreference": "TRAFFIC_AWARE", "polylineQuality": "HIGH_QUALITY", "polylineEncoding": "ENCODED_POLYLINE", "departureTime": "2023-10-15T15:01:23.045123456Z", ... }
Polylinie mit Verkehrserkennung anfordern
Bei allen oben gezeigten Beispielen werden grundlegende Polylinien zurückgegeben, d. h. Polylinien ohne Verkehrsinformationen. Außerdem können Sie angeben, dass die Polylinie Informationen zu den Verkehrsbehinderungen für die Route und für jeden Abschnitt der Route enthalten soll.
Verkehrsabhängige Polylinien enthalten Informationen zur Verkehrslage entlang der Route. Die Verkehrsbedingungen werden in Form von Geschwindigkeitskategorien (NORMAL
, SLOW
, TRAFFIC_JAM
) für ein bestimmtes Intervall des Antwortpolygons angegeben. Die Intervalle werden durch die Indexe ihrer Ausgangs- (einschließlich) und End-Polylinienpunkte (exklusive) definiert.
Die folgende Antwort zeigt beispielsweise NORMAL
-Traffic zwischen den Polylinienpunkten 2 und 4:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Wenn Sie eine Anfrage zum Berechnen einer verkehrsabhängigen Polylinie stellen möchten, legen Sie in der Anfrage die folgenden Eigenschaften fest:
Legen Sie das Array-Feld
extraComputations
aufTRAFFIC_ON_POLYLINE
fest, um die Besucherzahlberechnung zu aktivieren.Legen Sie
travelMode
aufDRIVE
oderTWO_WHEELER
fest. Anfragen für andere Mobilitätsformen geben einen Fehler zurück.Geben Sie in der Anfrage entweder die Routingeinstellung
TRAFFIC_AWARE
oderTRAFFIC_AWARE_OPTIMAL
an. Weitere Informationen finden Sie unter Qualität und Latenz konfigurieren.Legen Sie eine Antwortfeldmaske fest, die angibt, dass die Antworteigenschaften zurückgegeben werden sollen:
Auf Routenebene geben Sie alle Reiseinformationen in der Antwort zurück, indem Sie
routes.travelAdvisory
in die Antwortfeldmaske einfügen. Wenn nur die Verkehrsinformationen zurückgegeben werden sollen, geben Sieroutes.travelAdvisory.speedReadingIntervals
an.Auf Streckenabschnittsebene geben Sie in der Antwort für jeden Abschnitt der Route alle Reiseinformationen zurück, indem Sie
routes.legs.travelAdvisory
einschließen. Wenn nur die Verkehrsinformationen zurückgegeben werden sollen, geben Sieroutes.legs.travelAdvisory.speedReadingIntervals
an.
curl -X POST -d '{ "origin":{ "address": "1600 Amphitheatre Parkway, Mountain View, CA" }, "destination":{ "address": "24 Willie Mays Plaza, San Francisco, CA 94107" }, "travelMode": "DRIVE", "extraComputations": ["TRAFFIC_ON_POLYLINE"], "routingPreference": "TRAFFIC_AWARE_OPTIMAL" }' \ -H 'Content-Type: application/json' \ -H 'X-Goog-Api-Key: YOUR_API_KEY' \ -H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.travelAdvisory,routes.legs.travelAdvisory' \ 'https://routes.googleapis.com/directions/v2:computeRoutes'
Beispiel für eine Antwort für eine verkehrsabhängige Polylinie
In der Antwort sind die Verkehrsdaten in der Polylinie codiert und im Feld travelAdvisory
des Typs RouteLegTravelAdvisory-Objekt (jeder Abschnitt) und RouteTravelAdvisory-Objekt (Route) enthalten.
Beispiel:
{ "routes": [ { "legs": { "polyline": { "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD" }, // Traffic data for the leg. "travelAdvisory": { "speedReadingIntervals": [ { "endPolylinePointIndex": 1, "speed": "NORMAL" }, { "startPolylinePointIndex": 1, "endPolylinePointIndex": 2, "speed": "SLOW" }, { "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" } ] } }, "polyline": { "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD" }, // Traffic data for the route. "travelAdvisory": { "speedReadingIntervals": [ { "endPolylinePointIndex": 1, "speed": "NORMAL" }, { "startPolylinePointIndex": 1, "endPolylinePointIndex": 2, "speed": "SLOW" }, { "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" } ] } } ] }
Sowohl RouteTravelAdvisory
als auch RouteLegTravelAdvisory
enthalten ein Array-Feld mit dem Namen speedReadingIntervals
, das Informationen zur Verkehrsgeschwindigkeit enthält. Jedes Objekt im Array wird durch ein Objekt vom Typ SpeedReadingInterval (REST) oder SpeedReadingInterval (gRPC) dargestellt.
Ein SpeedReadingInterval
-Objekt enthält Geschwindigkeitsmessungen für ein Routenintervall wie NORMAL
, SLOW
oder TRAFFIC_JAM
. Die gesamte Anordnung der Objekte deckt die gesamte Polylinie der Route ab, ohne sich zu überschneiden. Der Startpunkt eines angegebenen Intervalls ist mit dem Endpunkt des vorhergehenden Intervalls identisch.
Jedes Intervall wird durch startPolylinePointIndex
, endPolylinePointIndex
und die entsprechende Geschwindigkeitskategorie beschrieben.
Beachten Sie, dass der fehlende Startindex im Intervall gemäß den proto3-Praktiken dem Index 0 entspricht.
Die Werte startPolylinePointIndex
und endPolylinePointIndex
sind nicht immer aufeinanderfolgend. Beispiel:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
In diesem Fall waren die Verkehrsbedingungen von Index 2 bis Index 4 gleich.
Mit dem Maps SDK verkehrsabhängige Polylinien rendern
Wir empfehlen, verkehrsabhängige Polylinien auf der Karte mithilfe der verschiedenen Funktionen der Google Maps SDKs anzuzeigen, einschließlich benutzerdefinierter Farben, Striche und Muster entlang der Polylinienabschnitte. Weitere Informationen zur Verwendung von Polylinien finden Sie unter Polylinien-Elemente für Android und Polylinien-Elemente für iOS.
Beispiel für das Rendering einer Polylinie
Nutzer des Maps SDK können eine benutzerdefinierte Zuordnungslogik zwischen den Geschwindigkeitskategorien und den Polylinien-Rendering-Schemas definieren. Beispielsweise könnte die Geschwindigkeit für „NORMAL“ als dicke blaue Linie auf der Karte und für „Langsame Geschwindigkeit“ als dicke orangefarbene Linie dargestellt werden.
Mit den folgenden Snippets wird eine dicke blaue Polylinie mit geodätischen Segmenten von Melbourne nach Perth hinzugefügt. Weitere Informationen finden Sie unter Darstellung anpassen (für Android) und Polylinie anpassen (für iOS).
Android
Java
Polyline line = map.addPolyline(new PolylineOptions() .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734)) .width(25) .color(Color.BLUE) .geodesic(true));
Kotlin
val line: Polyline = map.addPolyline( PolylineOptions() .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734)) .width(25f) .color(Color.BLUE) .geodesic(true) )
iOS
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 10.f; polyline.strokeColor = .blue; polyline.geodesic = YES; polyline.map = mapView;
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 10.0 polyline.geodesic = true polyline.map = mapView