Optymalizacja punktów na trasie to funkcja Routes Preferred, która rozszerza
ComputeRoutes.
Optymalizuje ona kolejność punktów pośrednich na trasie podróżnego, zapewniając mu najkrótszą możliwą trasę. Implementacja optymalizacji punktów na trasie w ComputeRoutes obsługuje te tryby podróży:
- Samochód
- Motocykl
- Jazda na rowerze
- 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 pokonywał te punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu na trasie w najkrótszym możliwym czasie.
Jak to działa
Domyślnie ComputeRoutes oblicza trasę przez punkty na trasie w kolejności, w jakiej zostały pierwotnie podane. Możesz skonfigurować ComputeRoutes tak, aby optymalizował trasę, zmieniając kolejność punktów pośrednich na trasie na bardziej efektywną.
Jeśli w treści żądania ustawisz pole optimizeWaypointOrder na true, otrzymasz trasę ze zoptymalizowanymi punktami na trasie.
Uwaga: obliczanie optymalizacji punktów na trasie opiera się głównie na czasie podróży, ale funkcja uwzględnia też inne czynniki, takie jak odległość i liczba zakrętów.
Pobieranie punktów na trasie w zmienionej kolejności
Aby uzyskać trasę z punktami na trasie w zmienionej kolejności, ustaw w treści żądania wysyłanego do ComputeRoutes pole logiczne optimizeWaypointOrder na true. W masce pola umieść też pole optimizedIntermediateWaypointIndex. Treść odpowiedzi zawiera zoptymalizowaną kolejność punktów na trasie w polach optimizedIntermediateWaypointIndex.
Uwaga: Pole optimizedIntermediateWaypointIndex zwraca wartości oparte na zerze.
Przykładowe żądanie
Ten przykładowy kod żądania podaje trasę 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 na trasie.
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 punktów pośrednich na trasie w zmienionej kolejności znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w treści odpowiedzi. Zakodowana
linia łamana
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 optymalizacja punktów na trasie powoduje odwrócenie ich pierwotnej kolejności.
Zalecane metody
Przetwarzanie żądania ze zoptymalizowanymi punktami na trasie trwa dłużej niż zwykłego żądania routingu. Dlatego zalecamy ustawienie dłuższego limitu czasu dla wywołania metody przez ustawienie wartości nagłówka żądania X-Server-Timeout na co najmniej 10 sekund. Jeśli nadal będziesz otrzymywać błędy przekroczenia limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.
Ograniczenia użytkowania
Aby korzystać z optymalizacji punktów na trasie, musisz przestrzegać tych ograniczeń i warunków użytkowania:
Możesz określić maksymalną liczbę punktów pośrednich na trasie, aż do limitu wykorzystania:
- Do 98 punktów na trasie przy użyciu tylko współrzędnych geograficznych.
- Do 25 punktów na trasie, jeśli określisz punkty na trasie za pomocą identyfikatorów miejsc.
Wszystkie punkty na trasie muszą być typu stopover. Żaden z punktów na trasie nie może być typu via.
Musisz dodać
routes.optimizedIntermediateWaypointIndexdo maski pola.Jeśli żądanie zawiera co najmniej 25 punktów pośrednich na trasie, musi też spełniać te warunki:
Łączna odległość w linii prostej między wszystkimi punktami na trasie musi być mniejsza niż 1000 km. Ta odległość obejmuje zarówno miejsce początkowe,jak i docelowe.
Tryb podróży musi być ustawiony na DRIVE.