Die Methode computeRoutes (REST) und die ComputeRoutes (gRPC) geben beide die Route zurück, die durch eine Polylinie als Teil des Antwort. Diese APIs geben zwei Typen von Polylinien zurück:
Einfache Polylinie (Standardeinstellung): Für eine Route ohne Verkehr die in die Polylinie eingebettete Informationen enthalten. Anfragen, die eine einfache Polylinie zurückgeben werden zum „Routes Basic“-Tarif abgerechnet. Weitere Informationen zum 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 verkehrsorientierte Polylinien werden zum Tarif „Routes Preferred“ Weitere Informationen zur Abrechnung für Routes API Weitere Informationen finden Sie unter Qualität der Polylinie konfigurieren
Weitere Informationen zu Polylinien finden Sie unter:
Interaktives Dienstprogramm für die Codierung von Polylinien ermöglicht das Erstellen codierter Polylinien in einer Benutzeroberfläche oder das Decodieren von Polylinien für die Anzeige auf eine Karte. 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
Polylinien werden durch ein Polyline (REST) oder Polyline-Objekt (gRPC). Sie können in der Antwort eine Polylinie auf Routen-, Strecken- und Schrittebene zurückgeben.
Geben Sie an, welche Polylinie zurückgegeben werden soll. Verwenden Sie dazu den Antwortfeldmaske:
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
.
Wenn Sie beispielsweise eine Polylinie für die gesamte Route, für jeden Streckenabschnitt und für jeden Schritts jedes Abschnitts:
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 Anforderung gibt die folgende Antwort zurück, die die Polylinie für den für jeden Abschnitt der Route und für jeden Schritt des Streckenabschnitts:
{ "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. Dementsprechend ist die Polylinie für die Strecke für die Route identisch sind.
Wenn Sie der Anfrage einen Zwischenwegpunkt 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" } } ] }
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 durch im Gleitkommaformat mit einfacher Genauigkeit. Dies eignet sich gut für kleine Werte, (die präzise dargestellt werden können), aber die Genauigkeit nimmt mit den Werten ab. aufgrund von Rundungsfehlern mit Gleitkommazahlen zunimmt.
In computeRoutes (REST) und ComputeRoutes Dies wird von
polylineEncoding
gesteuert.Die Anzahl der Punkte, aus denen die Polylinie besteht
Je mehr Punkte vorhanden sind, desto glatter die Polylinie (insbesondere in Kurven).
In computeRoutes (REST) und ComputeRoutes Dies wird von
polylineQuality
gesteuert.
Codierungstyp für Polylinien konfigurieren
Verwenden Sie die Anfrageoption polylineEncoding
, um den Polylinientyp zu steuern.
Mit der Eigenschaft polylineEncoding
wird gesteuert, ob die Polylinie codiert wird:
ENCODED_POLYLINE
(Standard), d. h. die
Algorithmusformat für codierte Polylinien
oder GEO_JSON_LINESTRING
, d. h. das
GeoJSON-LineString-Format
verwendet werden.
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 der Polylinie konfigurieren
polylineQuality
gibt die Qualität der Polylinie als HIGH_QUALITY
oder
OVERVIEW
(Standard). Mit OVERVIEW
setzt sich die Polylinie aus einem
Punkte 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
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.
Polylinien mit Verkehrsinformationen enthalten Informationen zur Verkehrslage entlang
die Route berechnen. Die Verkehrslage wird in Form von Geschwindigkeitskategorien angegeben.
(NORMAL
, SLOW
, TRAFFIC_JAM
) für ein bestimmtes Intervall der Antwort
Polylinie. Die Intervalle werden durch die Startindexe (einschließlich) definiert.
und die (ausschließlichen) End-Polylinienpunkte.
Die folgende Antwort zeigt beispielsweise NORMAL
-Traffic zwischen Polylinien.
Punkte 2 und 4:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Legen Sie Folgendes fest, um eine Anfrage zur Berechnung einer verkehrsbezogenen Polylinie zu stellen: Eigenschaften in der Anfrage:
Legen Sie zum Aktivieren das Array-Feld
extraComputations
aufTRAFFIC_ON_POLYLINE
fest die Traffic-Berechnung.Setzen Sie
travelMode
aufDRIVE
oderTWO_WHEELER
. 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äts- und Latenz.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. Zurückgeben nur die Verkehrsinformationen,routes.legs.travelAdvisory.speedReadingIntervals
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
im Array wird durch ein
SpeedReadingInterval (REST) oder
SpeedReadingInterval
(gRPC)-Objekt.
Ein SpeedReadingInterval
-Objekt enthält Geschwindigkeitsmessungen für ein Routenintervall,
wie 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 seine startPolylinePointIndex
beschrieben,
endPolylinePointIndex
und die entsprechende Geschwindigkeitskategorie.
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, verkehrsbewusste Polylinien mithilfe der verschiedenen Funktionen der Google Maps SDKs wie benutzerdefinierte Farben, Striche sich die Muster entlang der Polylinie strecken. Weitere Informationen zur Verwendung von Polylinien Siehe Polylinienfunktionen für Android und Polylinienfunktionen für iOS.
Beispiel für das Rendering einer Polylinie
Nutzer des Maps SDK haben die Möglichkeit, eine benutzerdefinierte Karte zu definieren. Logik zwischen den Geschwindigkeitskategorien und den Polylinien-Renderingschemas 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 (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