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 pośrednich obsługuje te tryby podróży:
- Samochód
- Jazda na zmotoryzowanych jednośladach
- Kolarstwo
- Spacer
Dlaczego warto korzystać z optymalizacji punktów pośrednich?
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 dotrze 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 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 zmienioną kolejnością punktów pośrednich, w treści żądania do
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
Poniższy przykładowy kod wysyła żądanie trasy w pobliżu kampusu Uniwersytetu Stanforda. Punkty na trasie zostały podane w żądaniu kolejno. Żądanie zawiera punkt początkowy i miejsce 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 na trasie 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 optymalizacją punktów pośrednich trwa dłużej niż zwykłego żą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 użytkowania
Aby korzystać z optymalizacji punktów pośrednich, musisz przestrzegać tych ograniczeń i warunków użytkowania:
Możesz określić maksymalną liczbę punktów pośrednich na trasie:
- Do 98 punktów pośrednich z użyciem 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 Twoich punktów na trasie nie może być typu via.
Musisz dodać
routes.optimizedIntermediateWaypointIndexdo pola mask.Jeśli Twoje żądanie zawiera co najmniej 25 pośrednich punktów trasy, musi ono również 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.