Zoptymalizuj punkty na trasie

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

  • Samochód
  • Jazda na zmotoryzowanych jednośladach
  • 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 w drodze do miejsca docelowego, ważne jest, aby podróżujący pokonywał te punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu pośredniego 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 ComputeRoutes zoptymalizować trasę, zmieniając kolejność pośrednich punktów 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 uwzględnia też inne czynniki, takie jak odległość i liczba zakrętów.

Pobieranie zmienionych punktów pośrednich

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

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

Przykładowe żądanie

Poniższy przykładowy kod wysyła żądanie trasy w pobliżu kampusu Uniwersytetu Stanforda. Punkty na trasie zostały podane w żądaniu kolejno. Żądanie zawiera punkt początkowy i miejsce 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 zmienionych kolejnością pośrednich punktów na trasie znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w treści odpowiedzi. Zakodowana linia łamana jest taka sama jak w przypadku interfejsu Directions APIComputeRoutes.

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

Przetwarzanie żądania z optymalizacją punktów pośrednich trwa dłużej niż zwykłego żą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 pojawiają się błędy przekroczenia limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.

Ograniczenia dotyczące użytkowania

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

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

    • Do 98 punktów pośrednich z użyciem 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 Twoich punktów na trasie nie może być typu via.

  • Musisz dodać routes.optimizedIntermediateWaypointIndex do pola mask.

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

    • Łączna odległość w linii prostej między wszystkimi punktami pośrednimi 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.