Ottimizza i punti di percorso del percorso

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

  • Auto
  • Motocicli
  • 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 attraversi i waypoint nell'ordine ottimale. In questo modo, il viaggiatore arriva a ogni waypoint nel minor tempo possibile.

Come funziona

Per impostazione predefinita, ComputeRoutes calcola un percorso attraverso i waypoint, nell'ordine in cui sono stati forniti originariamente. Puoi ottenere ComputeRoutes per ottimizzare il percorso riorganizzando le tappe intermedie in un ordine più efficiente. Riceverai un itinerario con waypoint 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.

Recupera i waypoint riordinati

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

Nota: il campo optimizedIntermediateWaypointIndex restituisce valori in base zero.

Esempio di richiesta

La seguente richiesta di esempio fornisce un percorso vicino al campus dell'Università di Stanford. I waypoint del percorso sono stati forniti in sequenza nella richiesta. La richiesta contiene un'origine e una 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. La polilinea codificata è la stessa dell'API Directions e di 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, nota che l'ottimizzazione dei waypoint inverte il loro ordine originale.

L'elaborazione di una richiesta con tappe ottimizzate richiede più tempo rispetto a una semplice richiesta di routing. Pertanto, ti consigliamo di impostare un timeout più lungo 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 di utilizzo

Per utilizzare l'ottimizzazione delle tappe, devi rispettare le seguenti limitazioni e condizioni di utilizzo:

  • Puoi specificare fino al limite di utilizzo per i waypoint intermedi del tuo itinerario:

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

  • Devi aggiungere routes.optimizedIntermediateWaypointIndex alla maschera del campo.

  • Se la richiesta ha 25 o più tappe intermedie, deve rispettare anche le seguenti condizioni:

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

    • La modalità di viaggio deve essere DRIVE.