Optymalizacja punktów pośrednich to funkcja usługi Routes Preferred, która rozszerza ComputeRoutes.
Optymalizuje kolejność pośrednich punktów na trasie podróżnego, zapewniając mu jak najefektywniejszą trasę. ComputeRoutesWdrożenie optymalizacji punktów na trasie obsługuje te środki transportu:
- Samochód
- Zmotoryzowane pojazdy dwukołowe
- Kolarstwo
- Spacer
Dlaczego warto korzystać z optymalizacji punktów na trasie?
Podczas tworzenia aplikacji, która prowadzi użytkowników przez kilka punktów pośrednich w drodze do miejsca docelowego, ważne jest, aby podróżujący pokonywał te punkty w optymalnej kolejności. Dzięki temu podróżny dociera do każdego punktu pośredniego 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 ComputeRoutes zoptymalizować
trasę, zmieniając kolejność pośrednich punktów na trasie 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 uwzględnia też inne czynniki, takie jak odległość i liczba zakrętów.
Pobieranie zmienionych punktów pośrednich
Aby uzyskać trasę z punktami pośrednimi w innej kolejności, w treści żądania do usługi ComputeRoutes ustaw pole logiczne optimizeWaypointOrder na true. W masce pola umieść też pole optimizedIntermediateWaypointIndex. Treść odpowiedzi zawiera zoptymalizowaną kolejność punktów pośrednich w polach optimizedIntermediateWaypointIndex.
Uwaga: pole optimizedIntermediateWaypointIndex zwraca wartości liczone od zera.
Przykładowe żądanie
Ten przykładowy kod wysyła żądanie dotyczące trasy w pobliżu kampusu Uniwersytetu Stanforda. Punkty na trasie zostały podane w żądaniu kolejno. Żą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 zmienionych kolejności pośrednich punktów trasy znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w treści odpowiedzi. Zakodowana linia łamana jest taka sama jak w przypadku interfejsu 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 pośrednich odwraca ich pierwotną kolejność.
Zalecane metody
Przetwarzanie żądania z zoptymalizowanymi punktami na trasie trwa dłużej niż w przypadku prostego żądania routingu. Dlatego zalecamy ustawienie dłuższego czasu oczekiwania na wywołanie metody przez ustawienie wartości nagłówka żądania X-Server-Timeout na co najmniej 10 sekund. Jeśli nadal pojawiają 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 pośrednich, musisz przestrzegać tych ograniczeń i warunków użytkowania:
Na trasie możesz określić maksymalną liczbę punktów pośrednich:
- Do 98 punktów pośrednich z użyciem tylko współrzędnych geograficznych.
- Do 25 punktów pośrednich, jeśli określisz punkty pośrednie za pomocą identyfikatorów miejsc.
Wszystkie punkty pośrednie muszą być typu stopover. Żaden z Twoich punktów pośrednich nie może być typu via.
Musisz dodać
routes.optimizedIntermediateWaypointIndexdo pola mask.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. Ta odległość obejmuje zarówno miejsce wylotu,jak i miejsce docelowe.
Tryb podróży musi być ustawiony na DRIVE.