Ottimizza i punti di percorso del percorso

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

  • Auto
  • Motocicletta
  • Ciclismo
  • A piedi

Perché utilizzare l'ottimizzazione delle tappe?

Quando crei un'app che guida gli utenti attraverso una serie di tappe lungo il percorso verso una destinazione, è importante che il viaggiatore percorra le tappe nell'ordine ottimale. In questo modo, il viaggiatore arriva a ogni tappa nel minor tempo possibile.

Come funziona

Per impostazione predefinita, ComputeRoutes calcola un percorso attraverso le tappe, nell'ordine in cui sono state fornite originariamente. Puoi fare in modo che ComputeRoutes ottimizzi il percorso riorganizzando le tappe intermedie in un ordine più efficiente. Riceverai un percorso con tappe ottimizzate se imposti il campo optimizeWaypointOrder nel corpo della richiesta su true.

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

Recuperare le tappe riordinate

Per ottenere un percorso con tappe riordinate, imposta il campo booleano optimizeWaypointOrder su true nel corpo della richiesta a ComputeRoutes. Includi anche il campo optimizedIntermediateWaypointIndex nella maschera di campo. Il corpo della risposta contiene l'ordine delle tappe ottimizzato nei campi optimizedIntermediateWaypointIndex.

Nota: il campo optimizedIntermediateWaypointIndex restituisce valori basati su zero.

Esempio di richiesta

La seguente richiesta di esempio fornisce un percorso vicino al campus della Stanford University. Le tappe del percorso sono state fornite in sequenza nella richiesta. La richiesta contiene un'origine e una destinazione, con due tappe intermedie.

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 delle tappe intermedie riordinate nei campi optimizedIntermediateWaypointIndex all'interno dell'oggetto routes nel corpo della risposta. La polilinea codificata è la stessa di Directions API 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 delle tappe 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 le tappe intermedie sul tuo percorso:

    • Fino a 98 tappe utilizzando solo le coordinate di latitudine e longitudine.
    • Fino a 25 tappe se specifichi tappe utilizzando gli ID luogo.
  • Tutte le tappe devono essere di tipo stopover. Nessuna delle tappe può essere di tipo via.

  • Devi aggiungere routes.optimizedIntermediateWaypointIndex alla maschera di campo.

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

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

    • La modalità di viaggio deve essere DRIVE.