L'itinéraire d'un véhicule peut être décomposé en fonction de l'axe temporel, comme ceci (nous supposons qu'il y a n visites):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Notez que nous faisons la différence entre:
- "Événements ponctuels", tels que le début et la fin du trajet du véhicule, ainsi que le début et la fin de chaque visite (arrivée et départ). Ils se produisent à un instant donné.
- "Intervalles de temps", comme les visites elles-mêmes et la transition entre les visites Bien que les intervalles de temps puissent parfois avoir une durée nulle (c'est-à-dire qu'ils commencent et se terminent à la même seconde), ils ont souvent une durée positive.
Règles invariantes :
- S'il y a n visites, il y a n+1 transitions.
- Une visite est toujours précédée d'une transition (même indice) et suivie d'une transition (indice + 1).
- Le démarrage du véhicule est toujours suivi de la transition n° 0.
- La fin du véhicule est toujours précédée de la transition n.
Voici ce qui se passe lors d'un Transition
et d'un Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Enfin, voici comment les éléments TRAVEL, BREAKS, DELAY et WAIT peuvent être organisés lors d'une transition.
- Ils ne se chevauchent pas.
- Le champ DELAY est unique et doit correspondre à une période contiguë juste avant la prochaine visite (ou la fin du véhicule). Il suffit donc de connaître la durée du délai pour connaître son heure de début et de fin.
- Les BREAKS sont des périodes de temps contiguës qui ne se chevauchent pas. La réponse spécifie l'heure de début et la durée de chaque coupure.
- TRAVEL et WAIT sont "préemptables" : ils peuvent être interrompus plusieurs fois au cours de cette transition. Les clients peuvent supposer que le trajet se fait "dès que possible" et que l'attente occupe le temps restant.
Exemple (complexe) :
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Représentation JSON |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
Champs | |
---|---|
vehicleIndex |
Véhicule effectuant l'itinéraire, identifié par son indice dans la source |
vehicleLabel |
Libellé du véhicule effectuant cet itinéraire (valeur égale à |
vehicleStartTime |
Heure à laquelle le véhicule commence son trajet. Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
vehicleEndTime |
Heure à laquelle le véhicule termine son itinéraire. Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
visits[] |
Séquence ordonnée de visites représentant un itinéraire. visits[i] correspond à la i e visite de l'itinéraire. Si ce champ est vide, le véhicule est considéré comme inutilisé. |
transitions[] |
Liste triée des transitions pour le parcours. |
hasTrafficInfeasibilities |
Lorsque
L'arrivée à next_visit se produira probablement plus tard que la période actuelle, en raison de l'augmentation estimée du temps de trajet |
routePolyline |
Représentation de l'itinéraire sous forme de polyligne encodée. Ce champ n'est renseigné que si |
breaks[] |
Pauses planifiées pour le véhicule effectuant cet itinéraire. La séquence |
metrics |
Métriques de durée, de distance et de charge pour cet itinéraire. Les champs de |
routeCosts |
Coût du trajet, réparti par champs de requête liés aux coûts. Les clés sont des chemins proto, par rapport à la requête OptimizeToursRequest d'entrée (par exemple, "model.shipments.pickups.cost"), et les valeurs correspondent au coût total généré par le champ de coût correspondant, agrégées sur l'ensemble du parcours. En d'autres termes, la valeur "cost["model.shipments.pickups.cost"] correspond à la somme de tous les coûts de retrait sur l'itinéraire. Tous les coûts définis dans le modèle sont indiqués ici en détail, à l'exception des coûts liés aux TransitionAttributes, qui ne sont consignés que de manière agrégée en date du 1er janvier 2022. Objet contenant une liste de paires |
routeTotalCost |
Coût total de l'itinéraire. Somme de tous les coûts dans la carte des coûts. |
Accéder à la page
Visite effectuée sur un itinéraire. Cette visite correspond à un retrait ou à la livraison d'un Shipment
.
Représentation JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Champs | |
---|---|
shipmentIndex |
Indice du champ |
isPickup |
Si la valeur est "true", la visite correspond à la prise en charge d'un |
visitRequestIndex |
Index de |
startTime |
Heure de début de la visite. Notez qu'il est possible que le véhicule arrive plus tôt au lieu de la visite. Les heures sont cohérentes avec le Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
loadDemands |
Demande de charge de visite totale en tant que somme de l'envoi et de la demande de visite Objet contenant une liste de paires |
detour |
Détour supplémentaire en raison du nombre de cargaisons visitées sur l'itinéraire avant la visite et du temps d'attente potentiel induit par les fenêtres de temps. Si la visite est une livraison, le détour est calculé à partir de la visite de retrait correspondante et est égal à :
Sinon, il est calculé à partir du
Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
shipmentLabel |
Copie de l' |
visitLabel |
Copie du |
injectedSolutionLocationToken |
Jeton opaque représentant des informations sur un lieu visité. Ce champ peut être renseigné dans les visites des itinéraires de résultats lorsque |
Transition
Transition entre deux événements sur la route. Consultez la description de ShipmentRoute
.
Si le véhicule ne dispose pas de startLocation
et/ou de endLocation
, les métriques de trajet correspondantes sont égales à 0.
Représentation JSON |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
Champs | |
---|---|
travelDuration |
Durée du trajet pendant cette transition. Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
travelDistanceMeters |
Distance parcourue pendant la transition. |
trafficInfoUnavailable |
Lorsque le trafic est demandé via |
delayDuration |
Somme des délais appliqués à cette transition. Le délai, le cas échéant, commence exactement Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
breakDuration |
Durée totale des coupures survenues pendant cette transition, le cas échéant. Les informations sur l'heure de début et la durée de chaque pause sont stockées dans Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
waitDuration |
Durée d'attente pendant cette transition. La durée d'attente correspond au temps d'inactivité et n'inclut pas le temps de pause. Notez également que ce temps d'attente peut être divisé en plusieurs intervalles non contigus. Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
totalDuration |
Durée totale de la transition, fournie à titre indicatif. Il est égal à :
Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
startTime |
Heure de début de cette transition. Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
routePolyline |
Représentation polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si |
vehicleLoads |
Chargements du véhicule pendant cette transition, pour chaque type qui apparaît dans la Les chargements effectués lors de la première transition sont les chargements de départ de l'itinéraire du véhicule. Ensuite, après chaque visite, les Objet contenant une liste de paires |
EncodedPolyline
Représentation encodée d'une polyligne. Pour en savoir plus sur l'encodage des polylignes, consultez cette page: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Représentation JSON |
---|
{ "points": string } |
Champs | |
---|---|
points |
Chaîne représentant les points encodés de la polyligne. |
Pause
Données représentant l'exécution d'une pause.
Représentation JSON |
---|
{ "startTime": string, "duration": string } |
Champs | |
---|---|
startTime |
Heure de début d'une pause. Horodatage au format RFC3339 UTC "Zulu", avec une résolution de l'ordre de la nanoseconde et jusqu'à neuf chiffres décimaux. Exemples : |
duration |
Durée d'une pause. Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |