Die Methode computeRoutes (REST) und die ComputeRoutes (gRPC) geben beide die durch eine Polylinie als Teil des Antwort. Diese APIs geben zwei Typen 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 – enthalten Informationen zur Verkehrslage entlang der Route. Die Verkehrslage wird in Bezug auf die Geschwindigkeit angegeben. Kategorien (
NORMAL
,SLOW
,TRAFFIC_JAM
) in einem bestimmten Intervall der Polylinie auf. Anfragen für verkehrsabhängige Polylinien werden zum Preis für bevorzugte Routen abgerechnet. Weitere Informationen zur Abrechnung für die Routes API Weitere Informationen finden Sie unter Polylinienqualität 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 Dienstprogramm können Sie beispielsweise eine Polylinie decodieren, die vom Code unten.
Einfache Polylinie für eine Route, einen Abschnitt oder einen Schritt anfordern
Eine Polylinie wird durch ein Polyline-Objekt (REST) oder ein Polyline-Objekt (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 eine Polylinie in der Antwort zurück, indem Sie
routes.polyline
in der Antwortfeldmaske.Auf Beinebene wird in der Antwort für jeden Abschnitt des unter Berücksichtigung von
routes.legs.polyline
berechnet.Auf Schrittebene wird in der Antwort für jeden Schritt von das Etappen durch Einfügen von
routes.legs.steps.polyline
.
So geben Sie beispielsweise eine Polylinie für die gesamte Route, für jeden Abschnitt und für jeden Schritt jedes Abschnitts zurück:
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, wird die zurückgegebene enthält nur einen einzigen Streckenabschnitt. Daher sind die Polylinien für den Abschnitt und für die Route identisch.
Wenn Sie der Anfrage einen Wegpunkt hinzufügen, wird der zurückgegebene Route enthält zwei Streckenabschnitte:
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 Anforderung gibt zwei Streckenabschnitte mit jeweils einer eindeutigen Polylinie sowie eine Polylinie für der gesamten Route:
{ "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" } } ] }
Polylinienqualität
Die Qualität einer Polylinie kann anhand der folgenden Kriterien beschrieben werden:
Die Gleitkommagenauigkeit der Punkte
Punkte werden als Breiten- und Längengradwerte angegeben, die durch im Gleitkommaformat mit einfacher Genauigkeit. 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 die Polylinie (insbesondere in Kurven).
Bei der Methode computeRoutes (REST) und ComputeRoutes wird dies durch
polylineQuality
gesteuert.
Codierungstyp für Polylinien konfigurieren
Mit der Anfrageoption polylineEncoding
können Sie den Polylinientyp 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.
Zum 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 von Polylinien konfigurieren
polylineQuality
gibt die Qualität der Polylinie als HIGH_QUALITY
oder OVERVIEW
(Standardeinstellung) an. Bei OVERVIEW
besteht die Polylinie aus einer kleinen Anzahl von Punkten und hat eine geringere 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 Verkehrsdaten anfordern
In den Beispielen oben werden grundlegende Polylinien zurückgegeben, d. h. Polylinien ohne Verkehrsinformationen. Darüber hinaus können Sie auch anfordern, dass die Polylinie Folgendes enthält: Verkehrsinformationen für die Route und für jeden Abschnitt der Route.
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 Antwortpolyliniens angegeben. Die Intervalle werden durch die Indexe der Polylinienpunkte am Anfang (inklusive) und am Ende (exklusiv) 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 zum Aktivieren das Array-Feld
extraComputations
aufTRAFFIC_ON_POLYLINE
fest die Traffic-Berechnung.Legen Sie
travelMode
aufDRIVE
oderTWO_WHEELER
fest. Anfragen für andere Mobilitätsform einen Fehler zurück.Geben Sie entweder die Weiterleitung
TRAFFIC_AWARE
oderTRAFFIC_AWARE_OPTIMAL
an in der Anfrage angeben. 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 einschließlich
routes.travelAdvisory
in der Antwortfeldmaske. Zurückgeben nur die Verkehrsinformationen,routes.travelAdvisory.speedReadingIntervals
Auf Beinebene: Alle Reiseinformationen in der Antwort für für jeden Abschnitt der Route, indem Sie
routes.legs.travelAdvisory
angeben. 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'
Beispielantwort für eine verkehrsorientierte Polylinie
In der Antwort sind die Verkehrsdaten in der Polylinie codiert und in der
Feld „travelAdvisory
“ vom Typ
RouteLegTravelAdvisory
-Objekt (jedes Bein) und
RouteTravelAdvisory-Objekt (route).
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 Arrayfeld
speedReadingIntervals
, die Informationen zur Verkehrsgeschwindigkeit enthält. Jedes Objekt im Array wird durch ein SpeedReadingInterval-Objekt (REST) oder ein SpeedReadingInterval-Objekt (gRPC) dargestellt.
Ein SpeedReadingInterval
-Objekt enthält Geschwindigkeitslesungen für ein Routenintervall, z. B. NORMAL
, SLOW
oder TRAFFIC_JAM
. Das gesamte Objekt-Array deckt
die gesamte Polylinie der Route ohne Überschneidung Der Startpunkt eines angegebenen
Intervall ist mit dem Endpunkt des vorhergehenden Intervalls identisch.
Jedes Intervall wird durch startPolylinePointIndex
, endPolylinePointIndex
und die entsprechende Geschwindigkeitskategorie beschrieben.
Beachten Sie, dass das Fehlen des Startindex innerhalb des Intervalls dem Index 0 entspricht.
gemäß der
proto3-Praktiken.
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 identisch.
Verkehrserkennungsbasierte Polylinien mit dem Maps SDK 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 Siehe Polylinienfunktionen für Android und Polylinienfunktionen für iOS.
Beispiel für das Rendern von Polylinien
Nutzer des Maps SDK können eine benutzerdefinierte Zuordnungslogik zwischen den Geschwindigkeitskategorien und den Polylinien-Rendering-Schemas definieren. Als könnte beispielsweise „NORMAL“ angezeigt werden, als dicke blaue Linie auf der Karte während "LANGSAM" kann beispielsweise als dicke orangefarbene Linie dargestellt werden.
Die folgenden Snippets fügen eine dicke blaue Polylinie mit geodätischen Segmenten aus Melbourne nach Perth. Weitere Informationen finden Sie unter Darstellung anpassen (Android) und Polylinie anpassen (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