Ottimizza i punti di percorso del percorso

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

  • In auto
  • Moto a due ruote
  • Ciclismo
  • Camminata

Perché utilizzare l'ottimizzazione delle tappe?

Quando crei un'app che guidi gli utenti attraverso una serie di tappe lungo il percorso verso una destinazione, è importante che il viaggiatore attraversi le tappe nell'ordine ottimale. In questo modo, il viaggiatore arriverà a ogni tappa nel più breve tempo possibile.

Come funziona

Per impostazione predefinita, ComputeRoutes calcola un percorso attraverso le relative tappe, nell'ordine in cui erano originariamente forniti. Puoi ottenere ComputeRoutes per ottimizzare 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.

Visualizza tappe riordinate

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

Nota: il campo optimizedIntermediateWaypointIndex restituisce valori in base zero.

Esempio di richiesta

La richiesta di esempio seguente 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 di waypoint intermedi riordinati nei campi optimizedIntermediateWaypointIndex all'interno dell'oggetto route 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 delle tappe inverti l'ordine originale.

Una richiesta con tappe ottimizzate impiega più tempo a essere elaborata rispetto a una semplice richiesta di routing. Di conseguenza, ti consigliamo di impostare un timeout più elevato per la chiamata al metodo impostando un valore di almeno dieci secondi per l'intestazione della richiesta X-Server-Timeout. Se continui a ricevere errori di timeout, puoi aggiungere un altro secondo e riprovare.

Limiti di utilizzo

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

  • Puoi specificare il limite di utilizzo per le tappe intermedie lungo il percorso:

    • Fino a 98 tappe utilizzando soltanto le coordinate di latitudine e longitudine.
    • Fino a 25 tappe se specifichi le tappe utilizzando gli ID luogo.
  • Tutte le tappe devono essere del tipo stopover. Nessuno dei waypoint può essere del tipo tramite.

  • Devi aggiungere routes.optimizedIntermediateWaypointIndex alla maschera di campo.

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

    • La distanza in rettilineo accumulata tra tutte le tappe deve essere inferiore a 1000 km. Questa distanza include sia il punto di partenza sia la destinazione.

    • La modalità di spostamento deve essere Drive.