Zoptymalizuj punkty na trasie

Optymalizacja punktów na trasie to funkcja Routes Preferred, która rozszerza ComputeRoutes. Optymalizuje kolejność pośrednich punktów na trasie podróżnego, zapewniając mu najbardziej efektywną trasę. Implementacja optymalizacji punktów na trasie w ComputeRoutes obsługuje te tryby podróży:

  • Samochód
  • Jazda motocyklem
  • Kolarstwo
  • 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 przechodził przez punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu na trasie 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 poprosić ComputeRoutes o zoptymalizowanie trasy przez zmianę kolejności punktów pośrednich 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 bierze pod uwagę również inne czynniki, takie jak odległość i liczba zakrętów.

Pobieranie punktów orientacyjnych ze zmienioną kolejnością

Aby uzyskać trasę ze zmienioną kolejnością punktów pośrednich, ustaw pole logiczne optimizeWaypointOrder na true w treści żądania do ComputeRoutes. Uwzględnij też pole optimizedIntermediateWaypointIndex w masce pola. Treść odpowiedzi zawiera zoptymalizowaną kolejność punktów na trasie w polach optimizedIntermediateWaypointIndex.

Uwaga: pole optimizedIntermediateWaypointIndex zwraca wartości zaczynające się od 0.

Przykładowe żądanie

Przykładowe żądanie poniżej zawiera trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty pośrednie trasy zostały podane w żądaniu sekwencyjnie. Żądanie zawiera miejsce początkowe i 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 pośrednich punktów orientacyjnych po zmianie kolejności znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w treści odpowiedzi. Zakodowana linia łamana jest taka sama jak w 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 orientacyjnych odwraca ich pierwotną kolejność.

Przetwarzanie żądania ze zoptymalizowanymi punktami na trasie trwa dłużej niż w przypadku prostego żądania wyznaczania trasy. 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 przekroczenia limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.

Ograniczenia dotyczące korzystania

Aby korzystać z optymalizacji punktów na trasie, musisz przestrzegać tych limitów wykorzystania i warunków:

  • Możesz określić maksymalną liczbę punktów pośrednich na trasie, aż do limitu wykorzystania:

    • Do 98 punktów orientacyjnych przy użyciu 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 punktów pośrednich nie może być typu via.

  • Musisz dodać routes.optimizedIntermediateWaypointIndex do maski pola.

  • Jeśli żądanie zawiera co najmniej 25 punktów pośrednich, musi też spełniać te warunki:

    • Łączna odległość w linii prostej między wszystkimi punktami pośrednimi musi być mniejsza niż 1000 km. Odległość ta obejmuje zarówno miejsce początkowe,jak i docelowe.

    • Tryb podróży musi być ustawiony na DRIVE.