Zoptymalizuj punkty na trasie

Optymalizacja punktów pośrednich to funkcja Preferowane trasy, która rozszerza możliwości ComputeRoutes. Optymalizuje kolejność pośrednich punktów na trasie podróży, zapewniając, że podróżują one najwydajniejszą możliwą trasą. Implementacja optymalizacji punktów pośrednich (ComputeRoutes) obsługuje te środki transportu:

  • Samochód
  • Motocyklowe
  • Kolarstwo
  • Spacer

Dlaczego warto korzystać z optymalizacji punktów pośrednich?

Gdy tworzysz aplikację, która prowadzi użytkowników przez różne punkty na trasie do celu, ważne jest, aby podróżny przemierzał je w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu pośredniego w jak najkrótszym czasie.

Jak to działa

Domyślnie ComputeRoutes oblicza trasę przy użyciu punktów pośrednich w kolejności, w jakiej zostały podane. Możesz uzyskać ComputeRoutes, aby zoptymalizować trasę, zmieniając kolejność pośrednich punktów pośrednich na bardziej efektywne. Otrzymasz trasę ze zoptymalizowanymi punktami pośrednimi, jeśli w polu optimizeWaypointOrder w treści żądania ustawisz wartość true.

Uwaga: obliczanie optymalizacji punktu pośredniego opiera się głównie na czasie podróży, ale funkcja uwzględnia też inne czynniki, takie jak odległość i liczba skrętów.

Pobierz ponownie uporządkowane punkty pośrednie

Aby uzyskać trasę ze zmienionymi punktami pośrednimi, ustaw pole wartości logicznej optimizeWaypointOrder na true w treści żądania na ComputeRoutes. Dodaj też do maski pola pole optimizedIntermediateWaypointIndex. Treść odpowiedzi zawiera w polach optimizedIntermediateWaypointIndex zoptymalizowaną kolejność punktów pośrednich.

Uwaga: pole optimizedIntermediateWaypointIndex zwraca wartości liczone od zera.

Przykładowe żądanie

Żądanie poniżej dostarcza trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty na trasie zostały przesłane po kolei w żądaniu. Żądanie zawiera punkt początkowy i miejsce docelowe oraz 2 pośrednie 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ź

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 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 pośrednich odwraca ich pierwotną kolejność.

Przetwarzanie żądania ze zoptymalizowanymi punktami pośrednimi trwa dłużej niż przetwarzanie prostego żą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 będą pojawiać się błędy przekroczenia limitu czasu, możesz dodać kolejną sekundę i spróbować jeszcze raz.

Ograniczenia dotyczące wykorzystania

Aby korzystać z optymalizacji punktów pośrednich, musisz przestrzegać tych ograniczeń i warunków wykorzystania:

  • Na trasie możesz określić maksymalny limit wykorzystania dla pośrednich punktów pośrednich:

    • Maksymalnie 98 punktów na trasie za pomocą współrzędnych geograficznych.
    • Maksymalnie 25 punktów pośrednich, jeśli określisz punkty pośrednie za pomocą identyfikatorów miejsc.
  • Wszystkie punkty na trasie muszą być typu przystanek. Żaden z punktów na trasie nie może być typu przez.

  • Do maski pola musisz dodać atrybut routes.optimizedIntermediateWaypointIndex.

  • Jeśli żądanie zawiera 25 lub więcej pośrednich punktów pośrednich, musi również spełniać następujące warunki:

    • Łączna odległość w linii prostej między wszystkimi punktami na trasie musi być mniejsza niż 1000 km. Obejmuje ona zarówno miejsce wylotu,jak i cel podróży.

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