- JSON-представление
- Посещать
- Тип посещения
- Переход
- Закодированная полилиния
- Перерыв
- Заполненность транспортных средств
Маршрут транспортного средства можно разложить по временной оси следующим образом (предположим, что имеется n посещений):
| | | | | 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
Обратите внимание, что мы различаем:
- «Одновременные события», такие как начало и окончание движения транспортного средства, а также начало и окончание каждого визита (иначе говоря, прибытие и отправление). Они происходят в заданную секунду.
- «Временные интервалы», такие как сами визиты и переходы между визитами. Хотя временные интервалы иногда могут иметь нулевую длительность, то есть начинаться и заканчиваться в одну и ту же секунду, они часто имеют положительную длительность.
Инварианты:
- Если количество посещений равно n, то количество переходов равно n+1.
- Каждый визит всегда окружен переходом до него (тот же индекс) и переходом после него (индекс + 1).
- Запуск двигателя всегда сопровождается переходом №0.
- Конец транспортного средства всегда предваряется переходом № n.
Присмотритесь внимательнее, и вот что происходит во время Transition и 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
И наконец, вот как можно организовать поездки, перерывы, задержки и ожидание во время пересадки.
- Они не пересекаются.
- Задержка уникальна и должна представлять собой непрерывный период времени непосредственно перед следующим визитом (или окончанием движения транспортного средства). Таким образом, достаточно знать продолжительность задержки, чтобы определить время ее начала и окончания.
- Перерывы представляют собой смежные, непересекающиеся периоды времени. В ответе указывается время начала и продолжительность каждого перерыва.
- Путешествие и ожидание являются «прерываемыми»: они могут быть прерваны несколько раз в течение этого переходного периода. Клиенты могут предположить, что путешествие состоится «как можно скорее», а оставшееся время будет заполнено «ожиданием».
Пример (сложный):
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 | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
| JSON-представление |
|---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
| Поля | |
|---|---|
vehicleIndex | Транспортное средство, выполняющее маршрут, идентифицируется по его индексу в исходной |
vehicleLabel | Метка транспортного средства, выполняющего данный маршрут, равная значению |
vehicleStartTime | Время начала движения транспортного средства по маршруту. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
vehicleEndTime | Время, когда транспортное средство завершает свой маршрут. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
visits[] | Упорядоченная последовательность посещений, представляющая маршрут. visits[i] — это i-е посещение в маршруте. Если это поле пустое, транспортное средство считается неиспользованным. |
transitions[] | Упорядоченный список переходов для маршрута. |
hasTrafficInfeasibilities | Если Прибытие в пункт следующего визита, вероятно, произойдет позже текущего временного окна из-за увеличения расчетного времени в пути |
routePolyline | Закодированное полилинейное представление маршрута. Это поле заполняется только в том случае, если для |
breaks[] | Запланированные перерывы для транспортного средства, следующего по данному маршруту. Последовательность |
metrics | Показатели продолжительности, расстояния и загрузки для этого маршрута. Поля |
vehicleFullness | Поле Экспериментальный: Поведение или существование данной области может измениться в будущем. |
routeCosts | Стоимость маршрута, разбитая по полям запроса, связанным со стоимостью. Ключами являются пути прототипов относительно входного параметра OptimizeToursRequest, например, "model.shipments.pickups.cost", а значениями — общая стоимость, сгенерированная соответствующим полем стоимости, агрегированная по всему маршруту. Другими словами, costs["model.shipments.pickups.cost"] — это сумма всех затрат на погрузку и разгрузку по маршруту. Все затраты, определенные в модели, подробно указаны здесь, за исключением затрат, связанных с TransitionAttributes, которые по состоянию на январь 2022 года отображаются только в агрегированном виде. |
routeTotalCost | Общая стоимость маршрута. Сумма всех затрат, указанных на карте затрат. |
Посещать
Визит, совершаемый в ходе маршрута. Этот визит соответствует приему или доставке Shipment .
| JSON-представление |
|---|
{ "shipmentIndex": integer, "isPickup": boolean, "visitRequestIndex": integer, "startTime": string, "loadDemands": { string: { object ( |
| Поля | |
|---|---|
shipmentIndex | Индекс поля |
isPickup | Если это так, то визит соответствует получению |
visitRequestIndex | Индекс объекта |
startTime | Время начала визита. Обратите внимание, что транспортное средство может прибыть в место визита раньше указанного времени. Время соответствует Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
loadDemands | Общая потребность в загрузке при посещении определяется как сумма потребностей в загрузке при отправке и |
detour | Дополнительное время на объезд обусловлено доставкой грузов по маршруту до визита и возможным временем ожидания, связанным с временными окнами. Если визит представляет собой доставку, объезд рассчитывается исходя из соответствующего визита по приему груза и равен: В противном случае, оно вычисляется на основе Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
shipmentLabel | Копия соответствующей |
visitLabel | Копия соответствующего объекта |
visitType | Необязательный параметр. Указывает тип визита. Переопределяет поле |
injectedSolutionLocationToken | Непрозрачный токен, представляющий информацию о месте посещения. Это поле может быть заполнено в результатах посещений маршрутов, если для данного посещения Экспериментальная функция: подробности см. на странице https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request . |
Тип посещения
Указывает, является ли визит посадкой, доставкой или посещением Stop . Посещения Stop используются только при включенной многомодальной оптимизации.
| Перечисления | |
|---|---|
VISIT_TYPE_UNSPECIFIED | Тип визита не указан. |
PICKUP_SHIPMENT | Визит соответствует получению посылки. |
DELIVER_SHIPMENT | Визит соответствует доставке груза. |
Переход
Переход между двумя событиями на маршруте. См. описание ShipmentRoute .
Если у транспортного средства отсутствуют startLocation и/или endLocation , соответствующие показатели перемещения равны 0.
| JSON-представление |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| Поля | |
|---|---|
travelDuration | Продолжительность поездки в течение этого переходного периода. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
travelDistanceMeters | Расстояние, пройденное во время перехода. |
trafficInfoUnavailable | Когда запрос на получение информации о дорожном движении поступает через |
delayDuration | Сумма задержек, примененных к этому переходу. Если таковая имеется, задержка начинается ровно Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
breakDuration | Сумма продолжительности перерывов, произошедших во время этого перехода, если таковые имелись. Подробная информация о времени начала и продолжительности каждого перерыва хранится в Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
waitDuration | Время, затраченное на ожидание во время этого перехода. Продолжительность ожидания соответствует времени простоя и не включает время перерыва. Также следует отметить, что это время ожидания может быть разделено на несколько несмежных интервалов. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
totalDuration | Общая продолжительность переходного периода, указанная для удобства, равна:
Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
startTime | Время начала этого перехода. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
routePolyline | Закодированное полилинейное представление маршрута, пройденного во время перехода. Это поле заполняется только в том случае, если |
routeToken | Только для вывода. Непрозрачный токен, который можно передать в Navigation SDK для восстановления маршрута во время навигации и, в случае перенаправления, для сохранения первоначального намерения при создании маршрута. Рассматривайте этот токен как непрозрачный объект. Не сравнивайте его значение между запросами, поскольку оно может измениться, даже если сервис возвращает один и тот же маршрут. Это поле заполняется только в том случае, если |
vehicleLoads | Загрузка транспортных средств во время этого перехода для каждого типа, который либо указан в На первом этапе маршрута грузы представляют собой начальные нагрузки транспортного средства. Затем, после каждого посещения, |
Закодированная полилиния
Закодированное представление полилинии. Более подробную информацию о кодировании полилиний можно найти здесь: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding .
| JSON-представление |
|---|
{ "points": string } |
| Поля | |
|---|---|
points | Строка, представляющая закодированные точки полилинии. |
Перерыв
Данные, отражающие выполнение перерыва.
| JSON-представление |
|---|
{ "startTime": string, "duration": string } |
| Поля | |
|---|---|
startTime | Время начала перерыва. Используется RFC 3339, согласно которому генерируемый вывод всегда будет Z-нормализован и будет содержать 0, 3, 6 или 9 дробных знаков. Допускаются также смещения, отличные от "Z". Примеры: |
duration | Продолжительность перерыва. Длительность в секундах, содержащая до девяти знаков после запятой, заканчивающаяся на « |
Заполненность транспортных средств
VehicleFullness — это метрика, которая вычисляет степень заполненности транспортного средства. Каждое поле VehicleFullness принимает значения от 0 до 1 и вычисляется как отношение значения поля метрики с ограничением (например, AggregatedMetrics.travel_distance_meters ) к соответствующему ограничению для транспортного средства (например, Vehicle.route_distance_limit ), если таковое существует. В противном случае коэффициент заполненности остается неустановленным. Если ограничение равно 0, поле устанавливается равным 1. Примечание: если маршрут подвержен пробкам, некоторые значения коэффициента заполненности могут превышать 1,0, например, транспортное средство может превысить допустимое расстояние. В таких случаях мы ограничиваем значения коэффициента заполненности значением 1,0.
| JSON-представление |
|---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
| Поля | |
|---|---|
maxFullness | Максимальное значение из всех остальных полей в этом сообщении. |
distance | Соотношение между |
travelDuration | Соотношение между [AggregatedMetrics.travel_duration_seconds][] и |
activeDuration | Соотношение между [AggregatedMetrics.total_duration_seconds][] и |
maxLoad | Максимальное соотношение между всеми типами [AggregatedMetrics.max_load][] и соответствующими им |
activeSpan | Отношение (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) для данного транспортного средства. Если знаменатель отсутствует, используется ( |