Ottimizza i punti di percorso del percorso

L'ottimizzazione dei waypoint è una funzionalità di Percorsi preferiti che amplia ComputeRoutes. Ottimizza l'ordine delle tappe intermedie nel percorso di un viaggiatore, assicurando che percorra il percorso più efficiente possibile. L'ComputeRoutes implementazione dell'ottimizzazione dei waypoint supporta le seguenti modalità di viaggio:

  • In auto
  • Veicoli a due ruote motorizzati
  • Ciclismo
  • A piedi

Perché utilizzare l'ottimizzazione dei waypoint?

Quando crei un'app che guida gli utenti attraverso una serie di waypoint lungo il percorso verso una destinazione, è importante che il viaggiatore li attraversi nell'ordine ottimale. In questo modo, il viaggiatore arriva a ogni waypoint nel meno tempo possibile.

Come funziona

Per impostazione predefinita, ComputeRoutes calcola un percorso tramite i suoi waypoint nell'ordine in cui sono stati forniti in origine. Puoi chiedere a ComputeRoutes di ottimizzare il percorso riordinando le tappe intermedie in un ordine più efficiente. Riceverai un itinerario con punti di passaggio ottimizzati se imposti il campo optimizeWaypointOrder nel corpo della richiesta su true.

Nota: il calcolo dell'ottimizzazione dei waypoint si basa principalmente sul tempo di percorrenza, ma la funzionalità prende in considerazione anche altri fattori, come la distanza e il numero di svolte.

Visualizzare i waypoint riordinati

Per ottenere un itinerario con i waypoint riordinati, imposta il campo booleano optimizeWaypointOrder su true nel corpo della richiesta su ComputeRoutes. Includi anche il campo optimizedIntermediateWaypointIndex nella maschera di campo. Il corpo della risposta contiene l'ordine dei punti di passaggio ottimizzati nei campi optimizedIntermediateWaypointIndex.

Nota: il campo optimizedIntermediateWaypointIndex restituisce valori basati su zero.

Richiesta di esempio

La richiesta di esempio seguente fornisce un itinerario vicino al campus della Università di Stanford. I waypoint del percorso sono stati forniti in sequenza nella richiesta. La richiesta contiene un punto di partenza e un punto di destinazione, con due waypoint intermedi.

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"}

Esempio di risposta

Puoi trovare gli indici dei waypoint intermedi riordinati nei campi optimizedIntermediateWaypointIndex all'interno dell'oggetto routes nel corpo della risposta. Il polilinea codificato è lo stesso usato in API Directions e 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
}

In questo esempio, tieni presente che l'ottimizzazione dei waypoint ne inverte l'ordine originale.

L'elaborazione di una richiesta con waypoint ottimizzati richiede più tempo rispetto a una semplice richiesta di calcolo itinerario. Pertanto, ti consigliamo di impostare un timeout più elevato per la chiamata al metodo impostando un valore per l'intestazione della richiesta X-Server-Timeout di almeno dieci secondi. Se continui a ricevere errori di timeout, puoi aggiungere un altro secondo e riprovare.

Limitazioni d'uso

Per utilizzare l'ottimizzazione dei waypoint, devi rispettare queste limitazioni e condizioni di utilizzo:

  • Puoi specificare fino al limite di utilizzo per i waypoint intermedi nel percorso:

    • Fino a 98 waypoint utilizzando solo le coordinate di latitudine e longitudine.
    • Fino a 25 waypoint se ne specifichi utilizzando gli ID luogo.
  • Tutti i waypoint devono essere di tipo stopover. Nessuno dei tuoi waypoint può essere di tipo via.

  • Devi aggiungere routes.optimizedIntermediateWaypointIndex alla maschera del campo.

  • Se la richiesta contiene almeno 25 waypoint intermedi, deve anche essere conforme alle seguenti condizioni:

    • La distanza in linea retta accumulata tra tutti i waypoint deve essere inferiore a 1000 km. Questa distanza include sia la partenza sia la destinazione.

    • La modalità di viaggio deve essere AUTO.