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 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). 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 entourée d'une transition avant (même index) et d'une transition après (index + 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.
En zoomant, voici ce qui se passe lors d'une Transition et d'une 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 pendant cette transition. Les clients peuvent supposer que le voyage a lieu « dès que possible » et que le « attente » remplit 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 ce trajet, égal à |
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 triée des transitions pour le parcours. |
hasTrafficInfeasibilities |
Lorsque L'arrivée à next_visit aura probablement lieu plus tard que la période de temps actuelle en raison de l'augmentation de l'estimation 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 de l'itinéraire, réparti selon les 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 de la carte des coûts. |
Accéder à la page
Visite effectuée lors d'un parcours. Cette visite correspond à un retrait ou à une livraison d'un Shipment.
| Représentation JSON |
|---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
| Champs | |
|---|---|
shipmentIndex |
Index 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 que le véhicule peut arriver plus tôt sur le lieu de la visite. Les heures sont cohérentes avec les 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 |
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, elle est calculée à 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 |
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 voyage 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 détails concernant l'heure de début et la durée de chaque coupure sont stockés 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 de la polyligne encodée de l'itinéraire suivi pendant la transition. Ce champ n'est renseigné que si |
vehicleLoads |
Charges de véhicules au cours de cette transition, pour chaque type qui apparaît dans le 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 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 " |