Optymalizacja punktów pośrednich to funkcja Preferowana tras, która rozszerza możliwości ComputeRoutes
.
Optymalizuje kolejność pośrednich punktów pośrednich na trasie użytkownika, co pozwala podróżować najlepszą możliwą trasą. Implementacja optymalizacji punktów pośrednich za pomocą ComputeRoutes
obsługuje te środki transportu:
- Samochód
- Motocykl
- Kolarstwo
- Spacer
Dlaczego warto korzystać z optymalizacji punktów pośrednich?
Gdy tworzysz aplikację, która prowadzi użytkowników przez wiele punktów na trasie do celu, ważne jest, aby podróżny przemierzał punkty na trasie w odpowiedniej kolejności. Dzięki temu podróżny dociera do wszystkich punktów pośrednich w najkrótszym czasie.
Jak to działa
Domyślnie ComputeRoutes
oblicza trasę przez swoje punkty na drodze w kolejności, w jakiej zostały one podane. Możesz uzyskać ComputeRoutes
, aby zoptymalizować trasę, przełączając pośrednie punkty na trasie w bardziej wydajną kolejność.
Otrzymasz trasę ze zoptymalizowanymi punktami pośrednimi, jeśli w polu optimizeWaypointOrder
w treści żądania ustawisz true
.
Uwaga: optymalizacja punktów pośrednich opiera się głównie na czasie podróży, ale funkcja uwzględnia również inne czynniki, takie jak odległość i liczba skrętów.
Pobierz zmienioną kolejność punktów na trasie
Aby wyznaczyć trasę ze zmienioną kolejnością punktów na trasie, ustaw w treści żądania pole wartości logicznej optimizeWaypointOrder
na true
na wartość ComputeRoutes
. Dodaj też pole optimizedIntermediateWaypointIndex
do maski pola. Treść odpowiedzi zawiera w polach optimizedIntermediateWaypointIndex
zoptymalizowaną kolejność punktów pośrednich.
Uwaga: pole optimizedIntermediateWaypointIndex
zwraca wartości liczone od zera.
Przykładowe żądanie
Przykład poniżej wskazuje trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty na trasie zostały podane po kolei w żądaniu. Żądanie zawiera punkt początkowy i miejsce docelowe z 2 pośrednimi 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ź
Zmienione indeksy pośrednich punktów pośrednich znajdziesz w polach optimizedIntermediateWaypointIndex
w obiekcie tras w treści odpowiedzi. Zakodowana linia łamana jest taka sama jak w interfejsach 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ę na to, że optymalizacja punktów pośrednich w tym przykładzie odwraca ich pierwotną kolejność.
Zalecane metody
Przetwarzanie żądania ze zoptymalizowanymi punktami pośrednimi trwa dłużej niż proste żądanie routingu. Dlatego zalecamy ustawienie dłuższego limitu czasu wywołania metody przez ustawienie wartości nagłówka żądania X-Server-Timeout
na co najmniej 10 sekund. Jeśli nadal będą pojawiać się błędy limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.
Ograniczenia dotyczące wykorzystania
Aby korzystać z optymalizacji punktów pośrednich, musisz przestrzegać tych ograniczeń i warunków:
Możesz określić limit wykorzystania pośrednich punktów na trasie:
- Maksymalnie 98 punktów pośrednich przy użyciu tylko szerokości i długości geograficznej.
- Do 25 punktów pośrednich, jeśli określisz punkty na drodze za pomocą identyfikatorów miejsc.
Wszystkie punkty na trasie muszą być typu stopover. Żaden z punktów pośrednich nie może być typu przez.
Musisz dodać
routes.optimizedIntermediateWaypointIndex
do maski pola.Jeśli żądanie zawiera co najmniej 25 pośrednich punktów pośrednich, musi też spełniać te warunki:
Skumulowana odległość w linii prostej między wszystkimi punktami drogowymi musi być mniejsza niż 1000 km. Obejmuje ona zarówno punkt początkowy,jak i docelowy.
Środek transportu musi być drive.