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ę. ComputeRoutes
Wdroż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.optimizedIntermediateWaypointIndex
do 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.