Optymalizacja punktów kontrolnych to funkcja Preferowane trasy, która rozszerza ComputeRoutes
.
Optymalizuje kolejność punktów pośrednich na trasie podróży, zapewniając tym samym jak najkrótszą możliwą trasę. ComputeRoutes
Wdrożenie optymalizacji punktów pośrednich obsługuje te tryby podróży:
- Samochód
- Motocykle dwukołowe
- 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 na drodze do celu, ważne jest, aby podróżujący przemierzał te punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu kontrolnego w najkrótszym możliwym czasie.
Jak to działa
Domyślnie ComputeRoutes
oblicza trasę przez punkty drogi w kolejności, w jakiej zostały one pierwotnie podane. Możesz użyć ComputeRoutes
, aby zoptymalizować trasę, zmieniając kolejność pośrednich punktów pośrednich na bardziej efektywną.
Jeśli w polu optimizeWaypointOrder
w ciele żądania ustawisz wartość true
, otrzymasz trasę z zoptymalizowanymi punktami pośrednimi.
Uwaga: obliczenie optymalizacji punktów drogi opiera się głównie na czasie przejazdu, ale funkcja uwzględnia też inne czynniki, takie jak odległość i liczba zakrętów.
Pobieranie przestawionych punktów pośrednich
Aby uzyskać trasę z przetasowanymi punktami drogi, w ciele żądania ustaw pole logiczne optimizeWaypointOrder
na true
, a w polu ComputeRoutes
na ComputeRoutes
. W polu maski pola umieść też pole optimizedIntermediateWaypointIndex
. Treść odpowiedzi zawiera zoptymalizowany układ punktów drogowych w polach optimizedIntermediateWaypointIndex
.
Uwaga: pole optimizedIntermediateWaypointIndex
zwraca wartości liczone od zera.
Przykładowe żądanie
Poniższe przykładowe żądanie podaje trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty pośrednie trasy zostały podane w kolejności w żądaniu. Żądanie zawiera punkt początkowy i miejsce docelowe z 2 punktami pośrednimi.
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ź
Ponowo posortowane indeksy punktów pośrednich znajdziesz w polach optimizedIntermediateWaypointIndex
w obiekcie routes w ciele odpowiedzi. Zakodowana polilinia jest taka sama jak w interfejsie 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
}
W tym przykładzie widać, że zoptymalizowanie punktów drogi odwraca ich pierwotny porządek.
Zalecane metody
Żądanie z zoptymalizowanymi punktami drogi zajmuje więcej czasu na przetworzenie niż zwykłe żądanie routingu. Dlatego zalecamy ustawienie dłuższego limitu czasu wywołania metody, podając w polu nagłówka X-Server-Timeout
co najmniej 10 sekund. Jeśli nadal otrzymujesz błędy limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.
Ograniczenia dotyczące użytkowania
Aby korzystać z optymalizacji punktów kontrolnych, musisz przestrzegać tych ograniczeń i warunków:
Możesz określić limit wykorzystania dla pośrednich punktów kontrolnych na trasie:
- Do 98 punktów pośrednich z użyciem wyłącznie 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 przesiadka. Żaden z punktów kontrolnych nie może być typu via.
Do pola maski musisz dodać
routes.optimizedIntermediateWaypointIndex
.Jeśli Twoja prośba zawiera co najmniej 25 punktów pośrednich, musi też spełniać te warunki:
Zbiorzona odległość w linii prostej między wszystkimi punktami kontrolnymi 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”.