La ruta de un vehículo puede desglosarse 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 hacemos una diferencia entre lo siguiente:
- “eventos puntuales”, como el inicio y la finalización del vehículo, y el comienzo y el final de cada visita (es decir, de llegada y salida). Ocurren en un segundo determinado.
- "intervalos de tiempo", como las visitas en sí y la transición entre ellas. Si bien 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.
Invariables:
- Si hay n visitas, hay transiciones de n + 1.
- Una visita siempre está rodeada por una transición antes de ella (mismo índice) y una transición después de ella (índice + 1).
- El inicio del vehículo siempre va seguido de la transición #0.
- El final del vehículo siempre está precedido por la transición n.
Si acercamos la imagen, esto es lo que sucede durante un Transition
y 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
Por último, aquí te mostramos cómo se pueden organizar los VIAJES, LOS DESCANSO, LA RETRASO y la ESPERA durante una transición.
- No se superponen.
- El DELAY es único y debe ser un período contiguo justo antes de la próxima visita (o el final del vehículo). Por lo tanto, es suficiente conocer la duración del retraso para conocer la hora de inicio y finalización.
- Las PAUSAS 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": se pueden interrumpir varias veces durante esta transición. Los clientes pueden suponer que el viaje se realiza “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 |
Es el vehículo que realiza la ruta, identificado por su índice en el |
vehicleLabel |
Etiqueta del vehículo que realiza esta ruta, igual a |
vehicleStartTime |
Hora a la que el vehículo empieza su ruta. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
vehicleEndTime |
Hora a la que el vehículo termina su ruta. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
visits[] |
Secuencia ordenada de visitas que representa una ruta. visit[i] es la enésima visita de la ruta. Si este campo está vacío, se considerará que el vehículo no está en uso. |
transitions[] |
Lista ordenada de transiciones para la ruta. |
hasTrafficInfeasibilities |
Cuando la opción
Es probable que la llegada a next_visit se produzca más tarde que el período actual debido al aumento de la estimación del tiempo de viaje |
routePolyline |
Representación de polilínea codificada de la ruta. Este campo solo se propaga si se establece |
breaks[] |
Pausas programadas para el vehículo que realiza esta ruta La secuencia |
metrics |
Métricas de duración, distancia y carga de esta ruta. Los campos de |
routeCosts |
Es el costo de la ruta, desglosado por campos de solicitud relacionados con el costo. Las claves son rutas de proto, en relación 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, costs["model.shipments.pickups.cost"] es la suma de todos los costos de retiro en la ruta. Todos los costos definidos en el modelo se informan aquí en detalle, excepto los costos relacionados con TransitionAttributes que solo se informan de forma agregada a partir de 2022/01. |
routeTotalCost |
Es el costo total de la ruta. Es la suma de todos los costos del mapa de costos. |
Visitar
Es una visita realizada durante una ruta. Esta visita corresponde a la recolección o entrega de un Shipment
.
Representación JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Campos | |
---|---|
shipmentIndex |
Es el índice del campo |
isPickup |
Si es verdadero, la visita corresponde a la recolección de un |
visitRequestIndex |
Índice de |
startTime |
Hora en la que comienza la visita. Ten en cuenta que el vehículo puede llegar antes a la ubicación de la visita. Los horarios coinciden con el Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
loadDemands |
Demanda total de carga de visitas como la suma del envío y la solicitud de visita |
detour |
Tiempo de desvío adicional debido a los envíos visitados en la ruta antes de la visita y al posible tiempo de espera inducido por los períodos. Si la visita es una entrega, el desvío se calcula a partir de la visita de retiro correspondiente y es igual a lo siguiente:
De lo contrario, se calcula a partir del
Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
shipmentLabel |
Copia del |
visitLabel |
Es la copia del |
Transición
Transición entre dos eventos en la ruta Consulta la descripción de ShipmentRoute
.
Si el vehículo no tiene un startLocation
o un 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 terminan en “ |
travelDistanceMeters |
Distancia recorrida durante la transición. |
trafficInfoUnavailable |
Cuando se solicita el tráfico a través de |
delayDuration |
Es la suma de las duraciones de retraso aplicadas a esta transición. Si hay alguna, la demora comienza exactamente Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
breakDuration |
Es la suma de la duración de las pausas que se producen durante esta transición, si corresponde. 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 terminan en “ |
waitDuration |
Tiempo de espera durante esta transición. La duración de la espera corresponde al tiempo inactivo 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 terminan en “ |
totalDuration |
Es la duración total de la transición, que se proporciona para mayor comodidad. Es igual a lo siguiente:
Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
startTime |
Es la hora de inicio de esta transición. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
routePolyline |
La representación de polilínea codificada de la ruta que se siguió durante la transición. Este campo solo se propaga si se establece |
routeToken |
Solo salida. Es un token opaco que se puede pasar al SDK de Navigation para reconstruir la ruta durante la navegación y, en caso de que se redireccione, respetar la intención original cuando se creó la ruta. Trata este token como un blob opaco. No compares su valor entre las solicitudes, ya que puede cambiar incluso si el servicio muestra exactamente la misma ruta. Este campo solo se propaga si |
vehicleLoads |
Cargas de vehículos durante esta transición, para cada tipo que aparezca en el Las cargas durante 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 |
EncodedPolyline
Representación codificada de una polilínea. Puedes encontrar más información sobre la codificación de polilíneas aquí: 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 |
Cadena que representa puntos codificados de la polilínea. |
Receso
Datos que representan la ejecución de una pausa.
Representación JSON |
---|
{ "startTime": string, "duration": string } |
Campos | |
---|---|
startTime |
Es la hora de inicio de un descanso. Una marca de tiempo en formato RFC3339 UTC “Zulú”, con una resolución de nanosegundos y hasta nueve dígitos fraccionarios. Ejemplos: |
duration |
Duración de la pausa. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |