Metoda computeRoutes (REST) i metoda ComputeRoutes (gRPC) zwracają trasę reprezentowaną przez linię łamaną jako część . Te interfejsy API zwracają 2 typy linii łamanych:
Podstawowa linia łamana (domyślnie) oznacza trasę, ale bez natężenia ruchu. umieszczone na linii łamanej. Żądania zwracające podstawową linię łamaną są rozliczane według stawki podstawowej Trasy. Więcej informacji o płatności za interfejs Routes API.
Polilinia uwzględniająca natężenie ruchu, która zawiera informacje o warunkach na drodze. Warunki na drogach są wyrażane w kategoriach prędkości (
NORMAL
,SLOW
,TRAFFIC_JAM
) obowiązujących na danym odcinku ścieżki wielokąta. Żądania dotyczące wielokątów uwzględniających natężenie ruchu są rozliczane według stawki preferencyjnej dla tras. Więcej informacji o płatnościach w interfejsie Routes API. Więcej informacji znajdziesz w artykule Konfigurowanie jakości ścieżki wielopunktowej.
Więcej informacji o poliliniach:
Interaktywne narzędzie do kodowania łamanymi umożliwia tworzenie zakodowanych linii łamanych w interfejsie użytkownika lub dekodowanie linii łamanych do wyświetlenia mapę. Za pomocą tego narzędzia możesz na przykład zdekodować linię łamaną utworzoną poniżej.
Żądanie podstawowej linii łamanej dla trasy, nogi lub kroku
Linia łamana jest reprezentowana przez obiekt Polyline (REST) lub Polyline (gRPC). Możesz zwrócić linię łamaną w odpowiedzi na poziomie trasy, etapu i kroku.
Określ, która linia łamana ma zostać zwrócona, za pomocą funkcji maska pola odpowiedzi:
Na poziomie trasy zwracaj w odpowiedzi ścieżkę wieloliniową, podając w polu maski odpowiedzi wartość
routes.polyline
.Na poziomie odcinka zwracaj w odpowiedzi ścieżkę wieloliniową dla każdego odcinka trasy, podając
routes.legs.polyline
.Na poziomie kroku zwracaj w odpowiedzi ścieżkę wieloliniową dla każdego kroku w ramach etapu, uwzględniając
routes.legs.steps.polyline
.
Aby na przykład zwrócić linię łamaną na całej trasie, dla każdego etapu oraz każdy etap każdego etapu:
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'
To żądanie zwraca następującą odpowiedź zawierającą linię łamaną dla dla każdego odcinka trasy i każdego etapu:
{ "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_@@_@?" } } ] }
Ponieważ to żądanie zawiera tylko punkt początkowy i docelowy, zwrócona trasa zawiera tylko 1 odcinek. Dlatego też linia łamana dla nogi i są takie same.
Jeśli dodasz do żądania pośredni punkt pośredni, funkcja trasa ma dwa etapy:
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'
To zapytanie zwraca 2 odcinki, z których każdy ma niepowtarzalny wielokąt oraz wielokąt dla całego szlaku:
{ "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" } } ] }
Jakość linii łamanej
Jakość linii łamanej można opisać za pomocą tych określeń:
Precyzja punktów w postaci liczb zmiennoprzecinkowych
Punkty są określane jako wartości szerokości i długości geograficznej, które są reprezentowane w formacie zmiennoprzecinkowym o pojedynczej precyzji. Sprawdza się to w przypadku małych wartości (co można precyzyjnie przedstawić), ale precyzja zmniejsza się w miarę z powodu błędów zaokrąglania zmiennoprzecinkowego.
W computeRoutes (REST) i ComputeRoutes, Ta zasada jest kontrolowane przez
polylineEncoding
.Liczba punktów tworzących polilinię
Im więcej jest punktów, tym gładsza jest linia łamana (szczególnie krzywe).
W computeRoutes (REST) i ComputeRoutes, Ta zasada jest kontrolowane przez
polylineQuality
.
Konfigurowanie typu kodowania linii złożonej
Aby kontrolować typ wielokąta, użyj opcji polylineEncoding
.
Właściwość polylineEncoding
określa, czy linia łamana będzie zakodowana jako
ENCODED_POLYLINE
(domyślna), co oznacza
Format algorytmu linii łamanej z kodowaniem
zostanie użyty lub GEO_JSON_LINESTRING
, co oznacza
Format ciągu znaków GeoJSON
.
Na przykład w treści żądania:
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'
Konfigurowanie jakości linii złożonej
polylineQuality
określa jakość polilinii jako HIGH_QUALITY
lub OVERVIEW
(domyślnie). W funkcji OVERVIEW
linia łamana jest składać się z małego
liczby punktów i ma krótszy czas oczekiwania na żądanie niż HIGH_QUALITY
.
Na przykład w treści żądania:
{ "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", ... }
Prośba o linie łamane uwzględniające natężenie ruchu
Wszystkie przykłady pokazane powyżej zwracają podstawowe wielokąty, czyli wielokąty bez informacji o ruchu. Możesz też poprosić o to, aby linia wielokąta zawierała informacje o ruchu drogowym na trasie i na poszczególnych odcinkach.
Wielokąty uwzględniające natężenie ruchu zawierają informacje o warunkach na drodze na całej trasie. Warunki na drogach są wyrażone w postaci kategorii prędkości
(NORMAL
, SLOW
, TRAFFIC_JAM
) w danym przedziale czasu odpowiedzi
linia łamana. Przedziały są definiowane przez indeksy punktów początkowych (włącznie) i końcowych (wyłącznie) ścieżki wielokąta.
Na przykład odpowiedź poniżej pokazuje NORMAL
ruch między punktami 2 i 4 łańcucha ścieżek:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Aby wysłać żądanie obliczenia linii łamanej wykrywającej ruch, ustaw następujące wartości właściwości w żądaniu:
Aby włączyć obliczenie ruchu, ustaw pole tablicy
extraComputations
naTRAFFIC_ON_POLYLINE
.Ustaw wartość
travelMode
naDRIVE
lubTWO_WHEELER
. Zapytania dotyczące innych trybów podróży zwracają błąd.Określ routing
TRAFFIC_AWARE
lubTRAFFIC_AWARE_OPTIMAL
wybrane w żądaniu. Więcej informacji znajdziesz w artykule Konfigurowanie jakości i opóźnienia.Ustaw maskę pola odpowiedzi, która określa zwracanie właściwości odpowiedzi:
Na poziomie trasy zwracaj wszystkie informacje o podróży w odpowiedzi, podając
routes.travelAdvisory
w polu odpowiedzi. Aby zwrócić tylko informacje o ruchu drogowym,routes.travelAdvisory.speedReadingIntervals
Na poziomie nogi podaj w odpowiedzi wszystkie informacje dotyczące podróży. każdy etap trasy, dodając
routes.legs.travelAdvisory
. Aby zwrócić tylko informacje o ruchu drogowym,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'
Przykładowa odpowiedź dla linii łamanej wykrywającej ruch
W odpowiedzi dane o ruchu są kodowane na linii łamanej i znajdują się w
Pole travelAdvisory
, typu
RouteLegTravelAdvisory
(każdą nogę) i
Obiekt RouteTravelAdvisory (trasa).
Na przykład:
{ "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" } ] } } ] }
Zarówno tabela RouteTravelAdvisory
, jak i tabela RouteLegTravelAdvisory
zawierają pole tablicy o nazwie speedReadingIntervals
, które zawiera informacje o prędkości ruchu. Każdy
obiekt w tablicy jest reprezentowany przez
SpeedReadingInterval (REST) lub
SpeedReadingInterval
(gRPC).
Obiekt SpeedReadingInterval
zawiera odczyt prędkości dla przedziału trasy,
taki jak NORMAL
, SLOW
lub TRAFFIC_JAM
. Cały zbiór obiektów obejmuje całą wielokątną ścieżkę bez nakładania się. Punkt początkowy określonego argumentu
jest taki sam jak punkt końcowy poprzedniego przedziału.
Każdy przedział jest opisany przez startPolylinePointIndex
,
endPolylinePointIndex
i odpowiadającą kategorię prędkości.
Zwróć uwagę, że brak indeksu początkowego w przedziale odpowiada indeksowi 0
zgodnie z
metod Proto3.
Wartości startPolylinePointIndex
i endPolylinePointIndex
nie są
zawsze następujących po sobie. Na przykład:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
W tym przypadku warunki ruchu były takie same od indeksu 2 do indeksu 4.
Renderowanie linii łamanych z uwzględnieniem natężenia ruchu za pomocą pakietu SDK Map Google
Zalecamy wyświetlanie na mapie linii łamanych z uwzględnieniem natężenia ruchu za pomocą różnych funkcje oferowane przez pakiety SDK Map Google, w tym niestandardowe kolory, kreski i na rozciąganiu linii łamanej. Więcej informacji o używaniu linii łamanych zobacz Funkcje linii łamanej na Androidzie i Funkcje linii łamanej na iOS.
Przykład renderowania za pomocą linii łamanych
Użytkownicy pakietu Maps SDK mają możliwość zdefiniowania niestandardowego mapowania logikę między kategoriami szybkości a schematami renderowania linii łamanych. Jako można na przykład wyświetlić „NORMAL” prędkość jako pogrubiona niebieska linia na podczas gdy „WOLNO” prędkość może być wyświetlana np. w postaci grubej pomarańczowej linii.
Poniższe fragmenty kodu dodają grubą niebieską linię łamaną z segmentami geodezyjnymi z z Melbourne do Perth. Więcej informacji: Dostosowywanie wyglądu (w Androidzie) oraz Dostosowywanie linii łamanej (w 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