La ruta de un vehículo se puede descomponer, a lo largo del eje de tiempo, de la siguiente manera (suponemos que hay n visitas):
| | | | | 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
Ten en cuenta que marcamos la diferencia entre los siguientes puntos:
- "eventos puntuales", como el inicio y la finalización del vehículo, y el inicio y la finalización de cada visita (también conocidas como la llegada y la salida) Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre visitas. Aunque los intervalos de tiempo a veces pueden tener una duración de cero, es decir, comienzan y terminan en el mismo segundo, a menudo tienen una duración positiva.
Invariantes:
- Si hay n visitas, se trata de transiciones n + 1.
- Una visita siempre está rodeada por una transición anterior (mismo índice) y una transición posterior (índice + 1).
- Al inicio del vehículo, siempre le sigue la transición n° 0.
- La transición n.o n precedida siempre por la finalización del vehículo.
Acercando la imagen, esto es lo que sucede durante una Transition
y una 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
Por último, a continuación te explicamos cómo se pueden organizar los VIAJES, LAS PAUSAS, LOS RETRASOS y LA ESPERA durante una transición.
- No se superponen.
- El RETRASO es único y debe ser un período continuo justo antes de la próxima visita (o la finalización del vehículo). Por lo tanto, es suficiente conocer la duración del retraso para conocer su hora de inicio y finalización.
- Las RUTAS son períodos de tiempo contiguos y no superpuestos. La respuesta especifica la hora de inicio y la duración de cada pausa.
- TRAVEL y WAIT son “interrumpibles”: pueden interrumpirse varias veces durante esta transición. Los clientes pueden suponer que los viajes se realizan "lo antes posible" y que "esperar" ocupa el tiempo restante.
Un ejemplo (complejo):
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 | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Representación JSON |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
Campos | |
---|---|
vehicleIndex |
El vehículo que realiza la ruta, identificado por su índice en el origen |
vehicleLabel |
Etiqueta del vehículo que realiza esta ruta, que equivale a |
vehicleStartTime |
Hora a la que el vehículo comienza su recorrido. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
vehicleEndTime |
Hora a la que el vehículo finaliza su recorrido. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
visits[] |
Secuencia ordenada de visitas que representan una ruta. Visits[i] es la i-ésima visita de la ruta. Si este campo está vacío, se considera que el vehículo no está en uso. |
transitions[] |
Lista ordenada de transiciones para la ruta. |
hasTrafficInfeasibilities |
Cuando el valor de
Es probable que la llegada a next_visit sea posterior a su período actual debido a la mayor estimación del tiempo de viaje |
routePolyline |
Representación de polilínea codificada de la ruta. Este campo solo se propaga si se configura |
breaks[] |
Hay descansos programados para el vehículo que realiza esta ruta. La secuencia |
metrics |
Métricas de duración, distancia y carga para esta ruta. Los campos de |
routeCosts |
Costo de la ruta, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de acceso proto, relacionadas con la entrada OptimizeToursRequest, p.ej., "model.shipments.pickups.cost", y los valores son el costo total generado por el campo de costo correspondiente, agregado en toda la ruta. En otras palabras, costos["model.shipments.pickups.cost"] es la suma de todos los costos de retiro a lo largo de la ruta. Todos los costos definidos en el modelo se informan en detalle aquí, a excepción de los costos relacionados con TransitionAttributes que solo se informan de manera agregada a partir del 2022/01. Es un objeto que contiene una lista de pares |
routeTotalCost |
Costo total de la ruta. Es la suma de todos los costos en el mapa de costos. |
Visitar
Una visita realizada durante una ruta. Esta visita corresponde a un retiro o una entrega de un Shipment
.
Representación JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Campos | |
---|---|
shipmentIndex |
Índice del campo |
isPickup |
Si es verdadero, la visita corresponde a una partida de un |
visitRequestIndex |
Índice de |
startTime |
Hora a la que comienza la visita. Ten en cuenta que el vehículo puede llegar antes de esa fecha a la ubicación de la visita. Los horarios coinciden con Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
loadDemands |
La demanda de carga total de visitas como la suma del envío y la solicitud de visita Es un objeto que contiene una lista de pares |
detour |
Tiempo adicional de desvío debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera que inducen los períodos. Si la visita es una entrega, el desvío se calcula a partir de la visita de retiro correspondiente y equivale a lo siguiente:
De lo contrario, se calcula a partir del vehículo
Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
shipmentLabel |
Copia del |
visitLabel |
Copia del |
Transición
Realizar la transición entre dos eventos de la ruta Consulta la descripción de ShipmentRoute
.
Si el vehículo no tiene startLocation
ni endLocation
, las métricas de viaje correspondientes son 0.
Representación JSON |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
Campos | |
---|---|
travelDuration |
Duración del viaje durante esta transición. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
travelDistanceMeters |
Distancia recorrida durante la transición. |
trafficInfoUnavailable |
Cuando se solicita tráfico a través de |
delayDuration |
Suma de las duraciones de los retrasos aplicadas a esta transición. Si corresponde, el retraso comienza exactamente Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
breakDuration |
Es la suma de la duración de las pausas que ocurren durante esta transición, si las hubiera. Los detalles sobre la hora de inicio y la duración de cada pausa se almacenan en Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
waitDuration |
Tiempo de espera durante esta transición. La duración de espera corresponde al tiempo de inactividad y no incluye el tiempo de descanso. Además, ten en cuenta que este tiempo de espera puede dividirse en varios intervalos no contiguos. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
totalDuration |
Es la duración total de la transición, que se proporciona para tu comodidad. Equivale a lo siguiente:
Una duración en segundos con hasta nueve dígitos decimales que terminen en " |
startTime |
Es la hora de inicio de esta transición. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
routePolyline |
Representación codificada de polilínea de la ruta seguida durante la transición. Este campo solo se propaga si se configura |
vehicleLoads |
Los vehículos se cargan durante esta transición para cada tipo que aparece en la Las cargas de la primera transición son las cargas iniciales de la ruta del vehículo. Luego, después de cada visita, se agregan o se restan los Es un objeto que contiene una lista de pares |
EncodedPolyline
Es la representación codificada de una polilínea. Para obtener más información sobre la codificación de polilíneas, consulta la siguiente información: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Representación JSON |
---|
{ "points": string } |
Campos | |
---|---|
points |
Es una cadena que representa puntos codificados de la polilínea. |
Receso
Datos que representan la ejecución de un salto.
Representación JSON |
---|
{ "startTime": string, "duration": string } |
Campos | |
---|---|
startTime |
Hora de inicio del descanso. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
duration |
Es la duración de la pausa. Una duración en segundos con hasta nueve dígitos decimales que terminen en " |