- Rappresentazione JSON
- Spedizione
- VisitRequest
- LatLng
- Waypoint
- Località
- TimeWindow
- Veicolo
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Intervallo
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- Obiettivo
- Tipo
- DurationDistanceMatrix
- Riga
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Un modello di spedizione contiene un insieme di spedizioni che devono essere eseguite da un insieme di veicoli, riducendo al minimo il costo complessivo, che è la somma di:
- il costo di pianificazione degli itinerari dei veicoli (somma del costo per tempo totale, del costo per tempo di viaggio e del costo fisso per tutti i veicoli).
- le sanzioni per spedizione non eseguita.
- il costo della durata globale delle spedizioni
| Rappresentazione JSON |
|---|
{ "shipments": [ { object ( |
| Campi | |
|---|---|
shipments[] |
Insieme di spedizioni che devono essere eseguite nel modello. |
vehicles[] |
Il set di veicoli che possono essere utilizzati per eseguire le visite. |
objectives[] |
L'insieme di obiettivi per questo modello, che trasformeremo in costi. Se non è vuoto, il modello di input deve essere senza costi. Per ottenere la richiesta modificata, utilizza Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
globalStartTime |
Ora di inizio e ora di fine globali del modello: non possono essere considerate valide ore al di fuori di questo intervallo. L'intervallo di tempo del modello deve essere inferiore a un anno, ovvero Quando utilizzi i campi Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
globalEndTime |
Se non viene impostato, viene utilizzato il valore predefinito 00:00:00 UTC, 1° gennaio 1971 (ovvero secondi: 31536000, nanosecondi: 0). Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
globalDurationCostPerHour |
La "durata globale" del piano complessivo è la differenza tra l'ora di inizio effettiva più recente e l'ora di fine effettiva più recente di tutti i veicoli. Gli utenti possono assegnare un costo orario a questa quantità per cercare di ottimizzare il completamento del lavoro nel più breve tempo possibile, ad esempio. Questo costo deve essere espresso nella stessa unità di |
durationDistanceMatrices[] |
Specifica le matrici di durata e distanza utilizzate nel modello. Se questo campo è vuoto, verranno utilizzate le distanze di Google Maps o geodetiche, a seconda del valore del campo Esempi di utilizzo:
|
durationDistanceMatrixSrcTags[] |
Tag che definiscono le origini delle matrici di durata e distanza; I tag corrispondono a |
durationDistanceMatrixDstTags[] |
Tag che definiscono le destinazioni delle matrici di durata e distanza; I tag corrispondono a |
transitionAttributes[] |
Attributi di transizione aggiunti al modello. |
shipmentTypeIncompatibilities[] |
Set di shipment_types non compatibili (vedi |
shipmentTypeRequirements[] |
Set di requisiti |
precedenceRules[] |
Insieme di regole di precedenza che devono essere applicate nel modello. IMPORTANTE: l'utilizzo delle regole di precedenza limita le dimensioni del problema che può essere ottimizzato. Le richieste che utilizzano regole di precedenza che includono molte spedizioni potrebbero essere rifiutate. |
maxActiveVehicles |
Limita il numero massimo di veicoli attivi. Un veicolo è attivo se il suo percorso esegue almeno una spedizione. Può essere utilizzato per limitare il numero di percorsi nel caso in cui ci siano meno autisti che veicoli e che il parco veicoli sia eterogeneo. L'ottimizzazione selezionerà quindi il miglior sottoinsieme di veicoli da utilizzare. Deve essere strettamente positivo. |
Spedizione
La spedizione di un singolo articolo, da uno dei suoi ritiri a una delle sue consegne. Affinché la spedizione venga considerata eseguita, un veicolo univoco deve visitare una delle sue sedi di ritiro (e ridurre di conseguenza le sue capacità di riserva), quindi visitare una delle sue sedi di consegna in un secondo momento (e quindi aumentare di nuovo le sue capacità di riserva di conseguenza).
| Rappresentazione JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Campi | |
|---|---|
displayName |
Il nome visualizzato della spedizione definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8. |
pickups[] |
Insieme di alternative di ritiro associate alla spedizione. Se non specificato, il veicolo deve visitare solo una località corrispondente alle consegne. |
deliveries[] |
Insieme di alternative di consegna associate alla spedizione. Se non specificato, il veicolo deve visitare solo una località corrispondente ai ritiri. |
loadDemands |
Requisiti di carico della spedizione (ad esempio peso, volume, numero di pallet e così via). Le chiavi nella mappa devono essere identificatori che descrivono il tipo di carico corrispondente, idealmente includendo anche le unità. Ad esempio: "weight_kg", "volume_gallons", "pallet_count" e così via. Se una determinata chiave non viene visualizzata nella mappa, il carico corrispondente viene considerato nullo. |
allowedVehicleIndices[] |
L'insieme dei veicoli che possono eseguire questa spedizione. Se è vuoto, tutti i veicoli possono eseguirlo. I veicoli sono indicati in base al loro indice nell'elenco |
costsPerVehicle[] |
Specifica il costo sostenuto quando questa spedizione viene consegnata da ciascun veicolo. Se specificato, deve avere UNO dei seguenti valori:
Questi costi devono essere nella stessa unità di |
costsPerVehicleIndices[] |
Indici dei veicoli a cui si applica |
pickupToDeliveryAbsoluteDetourLimit |
Specifica il tempo massimo di deviazione assoluto rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Ad esempio, sia t il tempo più breve necessario per andare dall'alternativa di ritiro selezionata direttamente all'alternativa di consegna selezionata. Quindi, l'impostazione Se per la stessa spedizione vengono specificati limiti relativi e assoluti, viene utilizzato il limite più restrittivo per ogni possibile coppia di ritiro/consegna. A partire dal 10/2017, le deviazioni sono supportate solo quando le durate del viaggio non dipendono dai veicoli. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
pickupToDeliveryTimeLimit |
Specifica la durata massima dall'inizio del ritiro all'inizio della consegna di una spedizione. Se specificato, deve essere non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Ciò non dipende dalle alternative selezionate per il ritiro e la consegna, né dalla velocità del veicolo. Questo valore può essere specificato insieme ai vincoli di deviazione massima: la soluzione rispetterà entrambe le specifiche. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
shipmentType |
Stringa non vuota che specifica un "tipo" per questa spedizione. Questa funzionalità può essere utilizzata per definire incompatibilità o requisiti tra Differisce da |
label |
Specifica un'etichetta per questa spedizione. Questa etichetta viene riportata nella risposta nel |
ignore |
Se il valore è true, ignora questa spedizione, ma non applicare un L'ignoramento di una spedizione genera un errore di convalida quando nel modello sono presenti È consentito ignorare una spedizione eseguita in |
penaltyCost |
Se la spedizione non viene completata, questa sanzione viene aggiunta al costo complessivo dei percorsi. Una spedizione è considerata completata se viene visitata una delle alternative di ritiro e consegna. Il costo può essere espresso nella stessa unità utilizzata per tutti gli altri campi correlati ai costi nel modello e deve essere positivo. IMPORTANTE: se questa penalità non è specificata, viene considerata infinita, ovvero la spedizione deve essere completata. |
pickupToDeliveryRelativeDetourLimit |
Specifica il tempo di deviazione relativo massimo rispetto al percorso più breve dal ritiro alla consegna. Se specificato, deve essere non negativo e la spedizione deve contenere almeno un ritiro e una consegna. Ad esempio, sia t il tempo più breve necessario per andare dall'alternativa di ritiro selezionata direttamente all'alternativa di consegna selezionata. Quindi, l'impostazione Se per la stessa spedizione vengono specificati limiti relativi e assoluti, viene utilizzato il limite più restrittivo per ogni possibile coppia di ritiro/consegna. A partire dal 10/2017, le deviazioni sono supportate solo quando le durate del viaggio non dipendono dai veicoli. |
VisitRequest
Richiesta di una visita che può essere effettuata da un veicolo: ha una geolocalizzazione (o due, vedi sotto), orari di apertura e chiusura rappresentati da finestre temporali e una durata del servizio (tempo trascorso dal veicolo una volta arrivato per il ritiro o la consegna delle merci).
| Rappresentazione JSON |
|---|
{ "arrivalLocation": { object ( |
| Campi | |
|---|---|
arrivalLocation |
La posizione geografica in cui arriva il veicolo quando esegue questa |
arrivalWaypoint |
Il waypoint in cui arriva il veicolo quando esegue questo |
departureLocation |
La posizione geografica da cui parte il veicolo dopo aver completato questo |
departureWaypoint |
Il waypoint da cui il veicolo parte dopo aver completato questo |
tags[] |
Specifica i tag allegati alla richiesta di visita. Non sono consentite stringhe vuote o duplicate. |
timeWindows[] |
Finestre temporali che vincolano l'ora di arrivo a una visita. Tieni presente che un veicolo può partire al di fuori dell'intervallo di tempo di arrivo, ovvero l'ora di arrivo e la durata non devono rientrare in un intervallo di tempo. Ciò può comportare tempi di attesa se il veicolo arriva prima delle L'assenza di Le finestre temporali devono essere disgiunte, ovvero nessuna finestra temporale deve sovrapporsi a un'altra o essere adiacente a un'altra e devono essere in ordine crescente.
|
duration |
Durata della visita, ovvero il tempo trascorso dal veicolo tra l'arrivo e la partenza (da aggiungere all'eventuale tempo di attesa; vedi Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
cost |
Costo per gestire questa richiesta di visita su un percorso del veicolo. Può essere utilizzato per pagare costi diversi per ogni alternativa di ritiro o consegna di una spedizione. Questo costo deve essere espresso nella stessa unità di |
loadDemands |
Carica le richieste di questo visitatore. È come il campo |
visitTypes[] |
Specifica i tipi di visita. Può essere utilizzato per allocare il tempo aggiuntivo necessario a un veicolo per completare la visita (vedi Un tipo può essere visualizzato una sola volta. |
label |
Specifica un'etichetta per questo |
avoidUTurns |
Specifica se in questa posizione devono essere evitate le inversioni a U nei percorsi in auto. L'evitamento delle inversioni a U è il risultato del massimo impegno e l'evitamento completo non è garantito. Questa è una funzionalità sperimentale e il comportamento è soggetto a modifiche. Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
LatLng
Un oggetto che rappresenta una coppia di coordinate di latitudine e longitudine. Questo valore è espresso come una coppia di numeri double per rappresentare i gradi di latitudine e longitudine. Se non diversamente specificato, questo oggetto deve essere conforme allo standard WGS84. I valori devono rientrare negli intervalli normalizzati.
| Rappresentazione JSON |
|---|
{ "latitude": number, "longitude": number } |
| Campi | |
|---|---|
latitude |
La latitudine in gradi. Deve essere compresa nell'intervallo [-90,0, +90,0]. |
longitude |
La longitudine in gradi. Deve essere compreso nell'intervallo [-180.0, +180.0]. |
Waypoint
Contiene un waypoint. I waypoint indicano le posizioni di arrivo e di partenza delle VisitRequest e le posizioni di partenza e di arrivo dei veicoli.
| Rappresentazione JSON |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| Campi | |
|---|---|
sideOfRoad |
Facoltativo. Indica che la posizione di questa tappa deve avere una preferenza per il veicolo per fermarsi su un lato particolare della strada. Quando imposti questo valore, il percorso passerà per la posizione in modo che il veicolo possa fermarsi sul lato della strada verso cui la posizione è orientata dal centro della strada. Questa opzione non funziona per la modalità di viaggio "A PIEDI". |
vehicleStopover |
Indica che la tappa è destinata ai veicoli che devono fermarsi per caricare o scaricare qualcosa. Questa opzione funziona solo per la modalità di viaggio "GUIDA" e quando "locationType" è "location". Sperimentale: il comportamento o l'esistenza di questo campo potrebbero cambiare in futuro. |
Campo unione location_type. Diversi modi per rappresentare una località. location_type può essere solo uno dei seguenti: |
|
location |
Un punto specificato utilizzando le coordinate geografiche, inclusa un'intestazione facoltativa. |
placeId |
L'ID luogo POI associato al waypoint. Quando utilizzi un ID luogo per specificare la posizione di arrivo o partenza di una VisitRequest, utilizza un ID luogo sufficientemente specifico per determinare una posizione LatLng per la navigazione verso il luogo. Ad esempio, un ID luogo che rappresenta un edificio è adatto, ma un ID luogo che rappresenta una strada è sconsigliato. |
Località
Contiene una posizione (un punto geografico e un'intestazione facoltativa).
| Rappresentazione JSON |
|---|
{
"latLng": {
object ( |
| Campi | |
|---|---|
latLng |
Le coordinate geografiche del waypoint. |
heading |
L'orientamento della bussola associato alla direzione del flusso del traffico. Questo valore viene utilizzato per specificare il lato della strada da utilizzare per il ritiro e la riconsegna. I valori di direzione possono essere compresi tra 0 e 360, dove 0 specifica una direzione verso nord, 90 specifica una direzione verso est e così via. |
TimeWindow
Le finestre temporali limitano l'ora di un evento, ad esempio l'ora di arrivo di una visita o l'ora di inizio e di fine di un veicolo.
I limiti della finestra temporale rigida, startTime e endTime, impongono l'orario di inizio e di fine dell'evento, in modo che startTime <= event_time <=
endTime. Il limite inferiore della finestra temporale soft, softStartTime, esprime una preferenza per l'evento che si verifica in corrispondenza o dopo softStartTime sostenendo un costo proporzionale al tempo che precede softStartTime. Il limite superiore della finestra temporale flessibile, softEndTime, esprime una preferenza per l'evento che si verifichi entro o prima di softEndTime sostenendo un costo proporzionale al tempo trascorso dopo softEndTime. startTime, endTime, softStartTime e softEndTime devono rispettare i limiti di tempo globali (vedi ShipmentModel.global_start_time e ShipmentModel.global_end_time) e:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| Rappresentazione JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| Campi | |
|---|---|
startTime |
L'ora di inizio della finestra temporale rigida. Se non specificato, il valore predefinito è Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
endTime |
L'ora di fine della finestra temporale rigida. Se non specificato, il valore predefinito è Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
softStartTime |
L'ora di inizio soft dell'intervallo di tempo. Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
softEndTime |
L'ora di fine flessibile della finestra temporale. Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
costPerHourBeforeSoftStartTime |
Un costo orario aggiunto agli altri costi nel modello se l'evento si verifica prima di softStartTime, calcolato come: Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato softStartTime. |
costPerHourAfterSoftEndTime |
Un costo orario aggiunto agli altri costi del modello se l'evento si verifica dopo le ore Questo costo deve essere positivo e il campo può essere impostato solo se è stato impostato |
Veicolo
Modella un veicolo in un problema di spedizione. La risoluzione di un problema di spedizione creerà un percorso che inizia da startLocation e termina a endLocation per questo veicolo. Un percorso è una sequenza di visite (vedi ShipmentRoute).
| Rappresentazione JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| Campi | |
|---|---|
displayName |
Il nome visualizzato del veicolo definito dall'utente. Può contenere fino a 63 caratteri e può utilizzare caratteri UTF-8. |
travelMode |
La modalità di viaggio che influisce sulle strade utilizzabili dal veicolo e sulla sua velocità. Vedi anche |
routeModifiers |
Un insieme di condizioni da soddisfare che influiscono sul modo in cui vengono calcolati i percorsi per il veicolo specificato. |
startLocation |
Posizione geografica in cui il veicolo inizia il percorso prima di ritirare le spedizioni. Se non specificato, il veicolo inizia dal primo ritiro. Se il modello di spedizione contiene matrici di durata e distanza, |
startWaypoint |
Waypoint che rappresenta una posizione geografica in cui il veicolo inizia il percorso prima di ritirare le spedizioni. Se non vengono specificati né |
endLocation |
Posizione geografica in cui si trova il veicolo al termine dell'ultimo |
endWaypoint |
Waypoint che rappresenta una posizione geografica in cui il veicolo termina dopo aver completato l'ultimo |
startTags[] |
Specifica i tag allegati all'inizio del percorso del veicolo. Non sono consentite stringhe vuote o duplicate. |
endTags[] |
Specifica i tag allegati alla fine del percorso del veicolo. Non sono consentite stringhe vuote o duplicate. |
startTimeWindows[] |
Intervalli di tempo durante i quali il veicolo può partire dalla posizione iniziale. Devono rispettare i limiti di tempo globali (vedi i campi Le finestre temporali appartenenti allo stesso campo ripetuto devono essere disgiunte, ovvero nessuna finestra temporale può sovrapporsi o essere adiacente a un'altra e devono essere in ordine cronologico.
|
endTimeWindows[] |
Intervalli di tempo durante i quali il veicolo potrebbe arrivare alla destinazione finale. Devono rispettare i limiti di tempo globali (vedi i campi Le finestre temporali appartenenti allo stesso campo ripetuto devono essere disgiunte, ovvero nessuna finestra temporale può sovrapporsi o essere adiacente a un'altra e devono essere in ordine cronologico.
|
unloadingPolicy |
Policy di scarico applicata al veicolo. |
loadLimits |
Capacità del veicolo (peso, volume, numero di pallet, ad esempio). Le chiavi nella mappa sono gli identificatori del tipo di carico, coerenti con le chiavi del campo |
costPerHour |
Costi del veicolo: tutti i costi si sommano e devono essere nella stessa unità di misura di Costo orario dell'itinerario del veicolo. Questo costo viene applicato al tempo totale impiegato per il percorso e include il tempo di viaggio, il tempo di attesa e il tempo di visita. L'utilizzo di |
costPerTraveledHour |
Costo per ora di viaggio dell'itinerario del veicolo. Questo costo viene applicato solo al tempo di percorrenza del percorso (ovvero quello riportato in |
costPerKilometer |
Costo per chilometro dell'itinerario del veicolo. Questo costo viene applicato alla distanza indicata in |
fixedCost |
Costo fisso applicato se questo veicolo viene utilizzato per gestire una spedizione. |
usedIfRouteIsEmpty |
Questo campo si applica solo ai veicoli quando il loro percorso non serve spedizioni. Indica se il veicolo deve essere considerato usato o meno in questo caso. Se è true, il veicolo va dalla posizione iniziale a quella finale anche se non serve spedizioni e vengono presi in considerazione i costi di tempo e distanza derivanti dal viaggio dalla posizione iniziale a quella finale. In caso contrario, non si sposta dalla posizione di partenza a quella di arrivo e non sono previsti |
routeDurationLimit |
Limite applicato alla durata totale del percorso del veicolo. In un determinato |
travelDurationLimit |
Limite applicato alla durata del viaggio del percorso del veicolo. In un determinato |
routeDistanceLimit |
Limite applicato alla distanza totale del percorso del veicolo. In un determinato |
extraVisitDurationForVisitType |
Specifica una mappa dalle stringhe visitTypes alle durate. La durata è il tempo aggiuntivo a Se una richiesta di visita ha più tipi, verrà aggiunta una durata per ogni tipo nella mappa. |
breakRule |
Descrive il programma delle pause da applicare a questo veicolo. Se è vuoto, non verranno programmate pause per questo veicolo. |
label |
Specifica un'etichetta per questo veicolo. Questa etichetta viene riportata nella risposta come |
ignore |
Se è true, Se una spedizione viene eseguita da un veicolo ignorato in Se una spedizione viene eseguita da un veicolo ignorato in |
travelDurationMultiple |
Specifica un fattore moltiplicativo che può essere utilizzato per aumentare o diminuire i tempi di percorrenza di questo veicolo. Ad esempio, se imposti questo valore su 2.0, significa che questo veicolo è più lento e ha tempi di percorrenza doppi rispetto a quelli dei veicoli standard. Questo moltiplicatore non influisce sulla durata delle visite. Influisce sui costi se vengono specificati AVVERTENZA: i tempi di percorrenza verranno arrotondati al secondo più vicino dopo l'applicazione di questo multiplo, ma prima di eseguire qualsiasi operazione numerica. Pertanto, un multiplo piccolo potrebbe comportare una perdita di precisione. Vedi anche |
TravelMode
Modalità di viaggio che possono essere utilizzate dai veicoli.
Questi devono essere un sottoinsieme delle modalità di viaggio dell'API Routes della piattaforma Google Maps. Vedi: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
Nota: i percorsi WALKING sono in versione beta e a volte potrebbero non avere marciapiedi o percorsi pedonali ben definiti. Devi mostrare questo avviso all'utente per tutti i percorsi a piedi visualizzati nella tua app.
| Enum | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
Modalità di viaggio non specificata, equivalente a DRIVING. |
DRIVING |
Modalità di viaggio corrispondente alle indicazioni stradali (auto, ecc.). |
WALKING |
Modalità di viaggio corrispondente alle indicazioni a piedi. |
RouteModifiers
Contiene un insieme di condizioni facoltative da soddisfare durante il calcolo degli itinerari dei veicoli. Questo è simile a RouteModifiers nell'API Routes Preferred di Google Maps Platform. Vedi: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| Rappresentazione JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Campi | |
|---|---|
avoidTolls |
Specifica se evitare le strade a pedaggio, ove ragionevole. Verrà data la preferenza ai percorsi che non includono strade a pedaggio. Valido solo per le modalità di trasporto motorizzate. |
avoidHighways |
Specifica se evitare le autostrade, se ragionevole. Verrà data la precedenza ai percorsi che non includono autostrade. Valido solo per le modalità di trasporto motorizzate. |
avoidFerries |
Specifica se evitare i traghetti, se ragionevole. Verrà data la preferenza ai percorsi che non prevedono viaggi in traghetto. Valido solo per le modalità di trasporto motorizzate. |
avoidIndoor |
Facoltativo. Specifica se evitare la navigazione al chiuso, ove ragionevole. Verrà data la precedenza ai percorsi che non includono la navigazione indoor. Si applica solo alla modalità di viaggio |
UnloadingPolicy
Norme su come può essere scaricato un veicolo. Si applica solo alle spedizioni con ritiro e consegna.
Gli altri spostamenti possono avvenire ovunque lungo il percorso, indipendentemente da unloadingPolicy.
| Enum | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
Norme di scarico non specificate; le consegne devono avvenire solo dopo i ritiri corrispondenti. |
LAST_IN_FIRST_OUT |
Le consegne devono avvenire in ordine inverso rispetto ai ritiri |
FIRST_IN_FIRST_OUT |
Le consegne devono avvenire nello stesso ordine dei ritiri |
LoadLimit
Definisce un limite di carico applicabile a un veicolo, ad esempio "questo camion può trasportare solo fino a 3500 kg". Leggi i loadLimits.
| Rappresentazione JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Campi | |
|---|---|
softMaxLoad |
Un limite flessibile del carico. Leggi i |
costPerUnitAboveSoftMax |
Se il carico supera |
startLoadInterval |
L'intervallo di carico accettabile del veicolo all'inizio del percorso. |
endLoadInterval |
L'intervallo di carico accettabile del veicolo alla fine del percorso. |
maxLoad |
Il carico massimo accettabile. |
costPerKilometer |
Costo dello spostamento di un'unità di carico per un chilometro per questo veicolo. Può essere utilizzato come proxy per il consumo di carburante: se il carico è un peso (in newton), allora carico*chilometro ha la dimensione di un'energia. Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
costPerTraveledHour |
Costo del viaggio con un'unità di carico durante un'ora per questo veicolo. Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request. |
Intervallo
Intervallo di importi di ricarica accettabili.
| Rappresentazione JSON |
|---|
{ "min": string, "max": string } |
| Campi | |
|---|---|
min |
Un carico minimo accettabile. Deve essere ≥ 0. Se sono specificati entrambi, |
max |
Un carico massimo accettabile. Deve essere ≥ 0. Se non specificato, il carico massimo non è limitato da questo messaggio. Se sono specificati entrambi, |
LoadCost
Costo dello spostamento di un'unità di carico durante un Transition. Per un determinato carico, il costo è la somma di due parti:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
Con questo costo, le soluzioni preferiscono soddisfare prima le richieste elevate o, in modo equivalente, ritirare le richieste elevate per ultime. Ad esempio, se un veicolo ha
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
e il suo percorso è inizio,ritiro,ritiro,consegna,consegna,fine con le transizioni:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
allora il costo sostenuto da questo LoadCost è (costo_sotto * carico_sotto * chilometri + costo_sopra * carico_sopra * km)
- transizione 0: 0.0
- transizione 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- transizione 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 4: 0.0
Quindi il LoadCost sul percorso è 120.0.
Tuttavia, se l'itinerario è inizio,ritiro,consegna,ritiro,consegna,fine con transizioni:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
allora il costo sostenuto da questo LoadCost è
- transizione 0: 0.0
- transizione 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 2: 0.0
- transizione 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- transizione 4: 0.0
Qui il LoadCost sull'itinerario è 40.0.
LoadCost rende più costose le soluzioni con transizioni a carico elevato.
Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.
| Rappresentazione JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Campi | |
|---|---|
loadThreshold |
Quantità di carico al di sopra della quale il costo di spostamento di un'unità di carico cambia da costPerUnitBelowThreshold a costPerUnitAboveThreshold. Deve essere >= 0. |
costPerUnitBelowThreshold |
Costo dello spostamento di un'unità di carico, per ogni unità compresa tra 0 e la soglia. Deve essere un valore finito e maggiore o uguale a 0. |
costPerUnitAboveThreshold |
Costo dello spostamento di un'unità di carico, per ogni unità superiore alla soglia. Nel caso speciale in cui la soglia è pari a 0, si tratta di un costo fisso per unità. Deve essere un valore finito e maggiore o uguale a 0. |
DurationLimit
Un limite che definisce una durata massima del percorso di un veicolo. Può essere duro o morbido.
Quando viene definito un campo limite soft, devono essere definiti insieme sia la soglia massima soft sia il costo associato.
| Rappresentazione JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| Campi | |
|---|---|
maxDuration |
Un limite rigido che vincola la durata a un massimo di maxDuration. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
softMaxDuration |
Un limite soft che non impone un limite di durata massima, ma che, se violato, comporta un costo per l'itinerario. Questo costo si somma agli altri costi definiti nel modello, con la stessa unità. Se definito, Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
quadraticSoftMaxDuration |
Un limite soft che non impone un limite di durata massima, ma che, se violato, fa sì che il percorso comporti un costo quadratico in base alla durata. Questo costo si somma agli altri costi definiti nel modello, con la stessa unità. Se definito,
Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
costPerHourAfterSoftMax |
Costo orario sostenuto se viene violata la soglia Il costo deve essere non negativo. |
costPerSquareHourAfterQuadraticSoftMax |
Costo per ora quadrata sostenuto se viene violata la soglia Il costo aggiuntivo è pari a 0 se la durata è inferiore alla soglia, altrimenti dipende dalla durata come segue: Il costo deve essere non negativo. |
DistanceLimit
Un limite che definisce una distanza massima percorribile. Può essere duro o morbido.
Se è definito un limite soft, devono essere definiti sia softMaxMeters che costPerKilometerAboveSoftMax e devono essere non negativi.
| Rappresentazione JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Campi | |
|---|---|
maxMeters |
Un limite rigido che vincola la distanza a un massimo di maxMeters. Il limite non può essere negativo. |
softMaxMeters |
Un limite soft che non impone un limite di distanza massimo, ma che, se violato, comporta un costo che si somma agli altri costi definiti nel modello, con la stessa unità. Se definito, softMaxMeters deve essere inferiore a maxMeters e non negativo. |
costPerKilometerBelowSoftMax |
Costo per chilometro sostenuto, in aumento fino a Questo costo non è supportato in |
costPerKilometerAboveSoftMax |
Costo per chilometro sostenuto se la distanza supera il limite di Il costo deve essere non negativo. |
BreakRule
Regole per generare pause per un veicolo (ad es. pause pranzo). Una pausa è un periodo di tempo continuo durante il quale il veicolo rimane inattivo nella sua posizione attuale e non può effettuare alcuna visita. Una pausa può verificarsi:
- durante il viaggio tra due visite (che include il tempo immediatamente prima o dopo una visita, ma non nel mezzo di una visita), nel qual caso estende il tempo di transito corrispondente tra le visite,
- o prima dell'avvio del veicolo (il veicolo potrebbe non avviarsi a metà di una pausa), nel qual caso non influisce sull'ora di avvio del veicolo.
- o dopo la fine del viaggio (stessa cosa, con l'ora di fine del viaggio).
| Rappresentazione JSON |
|---|
{ "breakRequests": [ { object ( |
| Campi | |
|---|---|
breakRequests[] |
Sequenza di interruzioni. Vedi il messaggio |
frequencyConstraints[] |
Potrebbero essere applicati diversi |
BreakRequest
La sequenza di pause (ovvero il numero e l'ordine) che si applicano a ogni veicolo deve essere nota in anticipo. Le BreakRequest ripetute definiscono la sequenza, nell'ordine in cui devono verificarsi. Le finestre temporali (earliestStartTime / latestStartTime) possono sovrapporsi, ma devono essere compatibili con l'ordine (questo viene verificato).
| Rappresentazione JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| Campi | |
|---|---|
earliestStartTime |
Obbligatorio. Limite inferiore (incluso) all'inizio della pausa. Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
latestStartTime |
Obbligatorio. Limite superiore (incluso) dell'inizio della pausa. Utilizza RFC 3339, in cui l'output generato è sempre normalizzato in base al fuso orario UTC e utilizza 0, 3, 6 o 9 cifre frazionarie. Sono accettati anche offset diversi da "Z". Esempi: |
minDuration |
Obbligatorio. Durata minima della pausa. Deve essere positivo. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
FrequencyConstraint
È possibile limitare ulteriormente la frequenza e la durata delle pause specificate in precedenza applicando una frequenza minima per le pause, ad esempio "Deve essere presente una pausa di almeno 1 ora ogni 12 ore". Supponendo che questo possa essere interpretato come "In qualsiasi finestra temporale mobile di 12 ore, deve esserci almeno una pausa di almeno un'ora", questo esempio si tradurrebbe nel seguente FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
La tempistica e la durata delle pause nella soluzione rispetteranno tutti questi vincoli, oltre alle finestre temporali e alle durate minime già specificate nel BreakRequest.
Un FrequencyConstraint può essere applicato in pratica alle pause non consecutive. Ad esempio, la seguente pianificazione rispetta l'esempio "1 ora ogni 12 ore":
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| Rappresentazione JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| Campi | |
|---|---|
minBreakDuration |
Obbligatorio. Durata minima della pausa per questo vincolo. Non negativo. Visualizza la descrizione di Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
maxInterBreakDuration |
Obbligatorio. Durata massima consentita di qualsiasi intervallo di tempo nel percorso che non include almeno parzialmente una pausa di Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
Obiettivo
Gli obiettivi sostituiscono completamente il modello di costo e sono quindi incompatibili con i costi preesistenti. Ogni obiettivo è associato a una serie di costi predefiniti per, ad esempio, veicoli, spedizioni o attributi di transizione.
Sperimentale: per ulteriori dettagli, consulta la pagina https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request.
| Rappresentazione JSON |
|---|
{
"type": enum ( |
| Campi | |
|---|---|
type |
Il tipo di obiettivo. |
weight |
Il peso relativo di questo obiettivo rispetto agli altri. Può essere qualsiasi numero non negativo; la somma dei pesi non deve essere pari a 1. I pesi hanno valore predefinito 1.0. |
Tipo
Il tipo di obiettivo che verrà mappato a un insieme di costi.
| Enum | |
|---|---|
DEFAULT |
Verrà utilizzato un insieme predefinito di costi per garantire una soluzione ragionevole. Nota: questo obiettivo può essere utilizzato da solo, ma verrà sempre aggiunto con un peso di 1,0, come base di riferimento, agli obiettivi specificati dall'utente, se non è già presente. |
MIN_DISTANCE |
Obiettivi "MIN". Ridurre al minimo la distanza totale percorsa. |
MIN_WORKING_TIME |
Ridurre al minimo il tempo di lavoro totale, sommato per tutti i veicoli. |
MIN_TRAVEL_TIME |
Come sopra, ma concentrandosi solo sul tempo di percorrenza. |
MIN_NUM_VEHICLES |
Riduci al minimo il numero di veicoli utilizzati. |
DurationDistanceMatrix
Specifica una matrice di durata e distanza dalle posizioni di partenza della visita e del veicolo alle posizioni di fine della visita e del veicolo.
| Rappresentazione JSON |
|---|
{
"rows": [
{
object ( |
| Campi | |
|---|---|
rows[] |
Specifica le righe della matrice di durata e distanza. Deve contenere lo stesso numero di elementi di |
vehicleStartTag |
Tag che definisce a quali veicoli si applica questa matrice di durata e distanza. Se è vuoto, si applica a tutti i veicoli e può essere presente una sola matrice. Ogni avvio del veicolo deve corrispondere esattamente a una matrice, ovvero esattamente uno dei suoi campi Tutte le matrici devono avere un |
Riga
Specifica una riga della matrice di durata e distanza.
| Rappresentazione JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| Campi | |
|---|---|
durations[] |
Valori di durata per una determinata riga. Deve contenere lo stesso numero di elementi di Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
meters[] |
Valori di distanza per una determinata riga. Se nel modello non sono presenti costi o vincoli che fanno riferimento alle distanze, questo campo può essere lasciato vuoto; in caso contrario, deve contenere tanti elementi quanti sono i |
TransitionAttributes
Specifica gli attributi delle transizioni tra due visite consecutive su un percorso. Diverse TransitionAttributes possono essere applicate alla stessa transizione: in questo caso, tutti i costi aggiuntivi si sommano e si applica il vincolo o il limite più rigoroso (seguendo la semantica "AND" naturale).
| Rappresentazione JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Campi | |
|---|---|
srcTag |
Tag che definiscono l'insieme di transizioni (src->dst) a cui si applicano questi attributi. Una visita all'origine o l'avvio del veicolo corrisponde se il relativo |
excludedSrcTag |
Leggi i |
dstTag |
Una visita a una destinazione o un viaggio termina se il relativo |
excludedDstTag |
Leggi i |
cost |
Specifica un costo per l'esecuzione di questa transizione. Questa unità è la stessa di tutti gli altri costi nel modello e non deve essere negativa. Viene applicata in aggiunta a tutti gli altri costi esistenti. |
costPerKilometer |
Specifica un costo per chilometro applicato alla distanza percorsa durante l'esecuzione di questa transizione. Si aggiunge a qualsiasi |
distanceLimit |
Specifica un limite alla distanza percorsa durante l'esecuzione di questa transizione. A partire da giugno 2021, sono supportati solo i limiti soft. |
delay |
Specifica un ritardo che si verifica durante l'esecuzione di questa transizione. Questo ritardo si verifica sempre dopo il completamento della visita alla sorgente e prima dell'inizio della visita alla destinazione. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
ShipmentTypeIncompatibility
Specifica le incompatibilità tra le spedizioni in base al relativo shipmentType. L'aspetto delle spedizioni incompatibili sullo stesso percorso è limitato in base alla modalità di incompatibilità.
| Rappresentazione JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| Campi | |
|---|---|
types[] |
Elenco dei tipi incompatibili. Due spedizioni con |
incompatibilityMode |
Modalità applicata all'incompatibilità. |
IncompatibilityMode
Modalità che definiscono come viene limitato l'aspetto delle spedizioni incompatibili sullo stesso percorso.
| Enum | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Modalità di incompatibilità non specificata. Questo valore non deve mai essere utilizzato. |
NOT_PERFORMED_BY_SAME_VEHICLE |
In questa modalità, due spedizioni con tipi incompatibili non possono mai condividere lo stesso veicolo. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
In questa modalità, due spedizioni con tipi incompatibili non possono mai trovarsi sullo stesso veicolo contemporaneamente:
|
ShipmentTypeRequirement
Specifica i requisiti tra le spedizioni in base al relativo shipmentType. I dettagli del requisito sono definiti dalla modalità del requisito.
| Rappresentazione JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| Campi | |
|---|---|
requiredShipmentTypeAlternatives[] |
Elenco dei tipi di spedizione alternativi richiesti da |
dependentShipmentTypes[] |
Tutte le spedizioni con un tipo nel campo NOTA: non sono consentite catene di requisiti in cui un |
requirementMode |
Modalità applicata al requisito. |
RequirementMode
Modalità che definiscono l'aspetto delle spedizioni dipendenti su un percorso.
| Enum | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Modalità di requisito non specificata. Questo valore non deve mai essere utilizzato. |
PERFORMED_BY_SAME_VEHICLE |
In questa modalità, tutte le spedizioni "dipendenti" devono condividere lo stesso veicolo di almeno una delle spedizioni "obbligatorie". |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
Con la modalità Il ritiro di una spedizione "dipendente" deve quindi avere:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Come prima, tranne che le spedizioni "dipendenti" devono avere una spedizione "obbligatoria" sul veicolo al momento della consegna. |
PrecedenceRule
Una regola di precedenza tra due eventi (ogni evento è il ritiro o la consegna di una spedizione): l'evento "secondo" deve iniziare almeno offsetDuration dopo l'inizio dell'evento "primo".
Diverse precedenze possono fare riferimento agli stessi eventi (o a eventi correlati), ad esempio: "il ritiro di B avviene dopo la consegna di A" e "il ritiro di C avviene dopo il ritiro di B".
Inoltre, le precedenze vengono applicate solo quando vengono eseguite entrambe le spedizioni e vengono ignorate in caso contrario.
| Rappresentazione JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| Campi | |
|---|---|
firstIsDelivery |
Indica se il primo evento è una consegna. |
secondIsDelivery |
Indica se il "secondo" evento è una consegna. |
offsetDuration |
L'offset tra il "primo" e il "secondo" evento. Può essere negativo. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
firstIndex |
Indice di spedizione del primo evento. Questo campo deve essere specificato. |
secondIndex |
Indice di spedizione del "secondo" evento. Questo campo deve essere specificato. |