Zoptymalizuj punkty na trasie

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ść.

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.