Zoptymalizuj punkty na trasie

Optymalizacja punktów kontrolnych to funkcja Preferowane trasy, która rozszerza ComputeRoutes. Optymalizuje kolejność punktów pośrednich na trasie podróży, zapewniając tym samym jak najkrótszą możliwą trasę. ComputeRoutesWdrożenie optymalizacji punktów pośrednich obsługuje te tryby podróży:

  • Samochód
  • Motocykle dwukołowe
  • 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 na drodze do celu, ważne jest, aby podróżujący przemierzał te punkty w optymalnej kolejności. Dzięki temu podróżny dotrze do każdego punktu kontrolnego w najkrótszym możliwym czasie.

Jak to działa

Domyślnie ComputeRoutes oblicza trasę przez punkty drogi w kolejności, w jakiej zostały one pierwotnie podane. Możesz użyć ComputeRoutes, aby zoptymalizować trasę, zmieniając kolejność pośrednich punktów pośrednich na bardziej efektywną. Jeśli w polu optimizeWaypointOrder w ciele żądania ustawisz wartość true, otrzymasz trasę z zoptymalizowanymi punktami pośrednimi.

Uwaga: obliczenie optymalizacji punktów drogi opiera się głównie na czasie przejazdu, ale funkcja uwzględnia też inne czynniki, takie jak odległość i liczba zakrętów.

Pobieranie przestawionych punktów pośrednich

Aby uzyskać trasę z przetasowanymi punktami drogi, w ciele żądania ustaw pole logiczne optimizeWaypointOrder na true, a w polu ComputeRoutes na ComputeRoutes. W polu maski pola umieść też pole optimizedIntermediateWaypointIndex. Treść odpowiedzi zawiera zoptymalizowany układ punktów drogowych w polach optimizedIntermediateWaypointIndex.

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

Przykładowe żądanie

Poniższe przykładowe żądanie podaje trasę w pobliżu kampusu Uniwersytetu Stanforda. Punkty pośrednie trasy zostały podane w kolejności w żądaniu. Żądanie zawiera punkt początkowy i miejsce docelowe z 2 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ź

Ponowo posortowane indeksy punktów pośrednich znajdziesz w polach optimizedIntermediateWaypointIndex w obiekcie routes w ciele odpowiedzi. Zakodowana polilinia jest taka sama jak w interfejsie 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
}

W tym przykładzie widać, że zoptymalizowanie punktów drogi odwraca ich pierwotny porządek.

Żądanie z zoptymalizowanymi punktami drogi zajmuje więcej czasu na przetworzenie niż zwykłe żądanie routingu. Dlatego zalecamy ustawienie dłuższego limitu czasu wywołania metody, podając w polu nagłówka X-Server-Timeout co najmniej 10 sekund. Jeśli nadal otrzymujesz błędy limitu czasu, możesz dodać kolejną sekundę i spróbować ponownie.

Ograniczenia dotyczące użytkowania

Aby korzystać z optymalizacji punktów kontrolnych, musisz przestrzegać tych ograniczeń i warunków:

  • Możesz określić limit wykorzystania dla pośrednich punktów kontrolnych na trasie:

    • Do 98 punktów pośrednich z użyciem wyłącznie 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 przesiadka. Żaden z punktów kontrolnych nie może być typu via.

  • Do pola maski musisz dodać routes.optimizedIntermediateWaypointIndex.

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

    • Zbiorzona odległość w linii prostej między wszystkimi punktami kontrolnymi 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”.