Le trajet d'un véhicule peut être décomposé, le long de l'axe temporel, comme suit (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 les heures de début et de fin du véhicule, et les heures de début et de fin de chaque visite (arrivée et départ). Elles se produisent à une seconde donnée.
- "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 commencer et se terminer à 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
Pour finir, voici comment organiser les éléments TRAVEL, BREAKS, DELAY et WAIT 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 le trajet, 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 non utilisé. |
transitions[] |
Liste numérotée des transitions pour la route. |
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[] |
Arrêts prévus 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, costs["model.shipments.pickups.cost"] correspond à la somme de tous les coûts de prise en charge 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. |
routeTotalCost |
Coût total de l'itinéraire. Somme de tous les coûts de 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 récupération 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 |
detour |
Temps de déviation supplémentaire en raison des envois visités sur l'itinéraire avant la visite et du temps d'attente potentiel induit par les délais. 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 de l' |
Transition
Transition entre deux événements sur le parcours. Consultez la description de ShipmentRoute
.
Si le véhicule n'a pas de startLocation
ni 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 durées de retard appliquées à cette transition. Le cas échéant, le délai commence exactement Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
breakDuration |
Somme de la durée des pauses qui se produisent 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. Elle est égale à:
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 de la polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si |
routeToken |
Uniquement en sortie. Jeton opaque pouvant être transmis au SDK Navigation pour reconstruire l'itinéraire pendant la navigation et, en cas de recalcul d'itinéraire, respecter l'intention initiale lors de la création de l'itinéraire. Traitez ce jeton comme un blob opaque. Ne comparez pas sa valeur entre les requêtes, car sa valeur peut changer même si le service renvoie exactement le même itinéraire. Ce champ n'est renseigné que si |
vehicleLoads |
Chargements du véhicule pendant cette transition, pour chaque type qui apparaît dans la Les charges lors de la première transition correspondent aux charges de départ du trajet du véhicule. Ensuite, après chaque visite, les |
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 de la 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 " |