Optymalizacja punktów na trasie to funkcja Routes Preferred, która rozszerza ComputeRoutes.
Optymalizuje kolejność pośrednich punktów na trasie podróżnego, zapewniając mu najbardziej efektywną trasę. Implementacja optymalizacji punktów na trasie w ComputeRoutes obsługuje te tryby podróży:
- Samochód
- Jazda motocyklem
- Kolarstwo
- Spacer
Dlaczego warto korzystać z optymalizacji punktów na trasie?
Podczas tworzenia aplikacji, która prowadzi użytkowników przez kilka punktów na trasie do miejsca docelowego, ważne jest, aby podróżny przechodził przez punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu na trasie w najkrótszym czasie.
Jak to działa
Domyślnie ComputeRoutes oblicza trasę przez punkty pośrednie w kolejności, w jakiej zostały pierwotnie podane. Możesz poprosić ComputeRoutes o zoptymalizowanie trasy przez zmianę kolejności punktów pośrednich na bardziej efektywną.
Jeśli w treści żądania ustawisz pole optimizeWaypointOrder na true, otrzymasz trasę ze zoptymalizowanymi punktami pośrednimi.
Uwaga: obliczenia optymalizacji punktów pośrednich opierają się głównie na czasie podróży, ale funkcja bierze pod uwagę również inne czynniki, takie jak odległość i liczba zakrętów.
Pobieranie punktów orientacyjnych ze zmienioną kolejnością
Aby uzyskać trasę ze zmienioną kolejnością punktów pośrednich, ustaw pole logiczne optimizeWaypointOrder na true w treści żądania do ComputeRoutes. Uwzględnij też pole optimizedIntermediateWaypointIndex w masce pola. Treść odpowiedzi zawiera zoptymalizowaną kolejność punktów na trasie w polach optimizedIntermediateWaypointIndex.
Uwaga: pole optimizedIntermediateWaypointIndex zwraca wartości zaczynające się od 0.
Przykładowe żądanie
Przykładowe żądanie poniżej zawiera trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty pośrednie trasy zostały podane w żądaniu sekwencyjnie. Żądanie zawiera miejsce początkowe i docelowe oraz 2 punkty pośrednie.
POST /v1alpha:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Server-Timeout: 10
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex,routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
"origin":{
"location":{
"latLng":{
"latitude": 37.418956,
"longitude": -122.160815
}
}
},
"intermediates": [
{
"location":{
"latLng":{
"latitude": 37.4176423,
"longitude":-122.1102246
}
}
},
{
"location":{
"latLng":{
"latitude": 37.407689,
"longitude": -122.1360597
}
}
}
],
"destination":{
"location":{
"latLng":{
"latitude": 37.4032137,
"longitude": -122.0349119
}
}
},
"travelMode": "DRIVE",
"optimizeWaypointOrder": true,
"routingPreference": "TRAFFIC_AWARE"}
Przykładowa odpowiedź
Indeksy pośrednich punktów orientacyjnych po zmianie kolejności znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w treści odpowiedzi. Zakodowana linia łamana jest taka sama jak w Directions API i ComputeRoutes.
routes {
distance_meters: 17647
duration {
seconds: 1866
}
polyline {
encoded_polyline: "wkkcFvorhVU{@Ec@C}CG}@Mm@[}@i@y@[[g@_@Tk@BSjCgGfF|D\\Pv@Lj@@XaCTeC\\aCTs@`ByD`@k@h@e@x@Yh@GtADhBF|@G`AWpAs@lAsAdA{A`BmDr@cBmUqQoS}OyGmFiBsAgEwD}CaCU_@Og@@e@Hy@nGkO~@sBr@cBlDqIlByEp@}AjIfGnBbBHLLd@^p@~ErDfNrKrA~@DIhEeBTQ~AqDlE{KjBgE|FnEh@aAi@`A}FoE~AmD`A}BcAm@mHwFwD}CkLwIsDqCgF_EG[GKnCsDrA_BrC_CnCoBpEkD`EyClCsBcBeBIAkGkH]k@eJmKQKsAuA_@g@wCoDGQmEmFmIqROKaDuHvBkBxAgANCRH^f@v@dBHDD?`AUiBqEhBpEaATMCQYm@wAY]SIOByAfAwBjB_ByDaAwBiCeIA[c@aBqEuNOm@IQbA{c@p@aZFmCTuBLg@Tc@BUAKxOeV~Vy_@nBoDv@_BvAcDzA_EdG{RdC{HtIsY|B{Hx@mDbAuFdBsMbKsv@TaBf@}AdF{Sn@_DJq@Lo@aE`@]GUQmAmAQk@@g@RK`Ce@d@UDEPc@f@cCrAyGJs@X{AbIem@bA{JD_AIaAMg@o@{A_Ad@y@NaCLCsCK_FGI"
}
optimizedIntermediateWaypointIndex: 1
optimizedIntermediateWaypointIndex: 0
}
Zwróć uwagę, że w tym przykładzie optymalizacja punktów orientacyjnych odwraca ich pierwotną kolejność.
Zalecane metody
Przetwarzanie żądania ze zoptymalizowanymi punktami na trasie trwa dłużej niż w przypadku prostego żądania wyznaczania trasy. Dlatego zalecamy ustawienie dłuższego limitu czasu wywołania metody przez ustawienie wartości nagłówka żądania X-Server-Timeout na co najmniej 10 sekund. Jeśli nadal będą pojawiać się błędy przekroczenia limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.
Ograniczenia dotyczące korzystania
Aby korzystać z optymalizacji punktów na trasie, musisz przestrzegać tych limitów wykorzystania i warunków:
Możesz określić maksymalną liczbę punktów pośrednich na trasie, aż do limitu wykorzystania:
- Do 98 punktów orientacyjnych przy użyciu tylko współrzędnych geograficznych.
- Do 25 punktów pośrednich, jeśli określisz je za pomocą identyfikatorów miejsc.
Wszystkie punkty pośrednie muszą być typu stopover. Żaden z punktów pośrednich nie może być typu via.
Musisz dodać
routes.optimizedIntermediateWaypointIndexdo maski pola.Jeśli żądanie zawiera co najmniej 25 punktów pośrednich, musi też spełniać te warunki:
Łączna odległość w linii prostej między wszystkimi punktami pośrednimi musi być mniejsza niż 1000 km. Odległość ta obejmuje zarówno miejsce początkowe,jak i docelowe.
Tryb podróży musi być ustawiony na DRIVE.