Цель Route Optimization API – планировать маршруты для автопарка, чтобы посетить набор местоположений. Объект OptimizeToursRequest описывает свойства этих транспортных средств и местоположений и является основной структурой тела запроса для каждой конечной точки.
Базовая структура объекта OptimizeToursRequest выглядит следующим образом:
- Поле
modelсодержит сообщениеShipmentModel, в котором есть два ключевых поля:
В этом документе описаны следующие типы сообщений:
ShipmentModelсодержит список отправлений, доступных транспортных средств и других объектов, описывающих их взаимосвязи.Shipmentописывает места, которые должно посетить транспортное средство. Они могут представлять собой реальные посылки, которые нужно забрать и доставить, или места, где водитель транспортного средства оказывает услуги.Vehicle: описывает способ транспортировки между пунктами доставки. Каждое транспортное средство соответствует реальному транспортному средству или человеку, передвигающемуся пешком.
ShipmentModel
ShipmentModel содержит элементы задачи оптимизации маршрута. Он содержит набор отправок, которые могут быть выполнены набором транспортных средств с учетом ограничений и минимизации общих затрат.
В таблице ниже описаны некоторые важные свойства ShipmentModel:
| Свойства | Описание |
|---|---|
shipments и vehicles |
Обязательные объекты, содержащие сведения об одном или нескольких отправлениях и транспортных средствах. |
globalStartTime и globalEndTime |
Указывает начало и конец временного окна, в течение которого все транспортные средства должны доставить все грузы. Эти свойства не обязательны, но рекомендуется их добавить, поскольку оптимизатор лучше работает при соблюдении временных ограничений. |
Полный список свойств в ShipmentModel можно найти в справочной документации.
ShipmentModel Пример
В этом примере у вас есть служба дневного ухода за собаками, и вы начинаете создавать свой запрос. Вы хотите сначала указать часы работы и почасовые операционные расходы, а затем определить отправки и транспортные средства.
В этом примере значения свойства ShipmentModel в вашем запросе будут следующими:
| Свойство | Значение | Описание |
|---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | Дата и время начала рабочего дня. |
globalEndTime |
2024-02-14T06:00:00.000Z | Дата и время окончания рабочего дня. |
Ниже приведен пример кода сообщения ShipmentModel, в котором используются значения из описанного выше сценария.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
Тип сообщения Shipment определяет структуру свойств груза, который можно доставить, или услуги, которую можно оказать на маршруте.
Как показано на диаграмме:
- Сообщение
Shipmentсодержит всю информацию о реальной доставке или услуге. - Все сообщения
Shipmentуказываются в полеshipments. - Поле
shipmentsсодержит одно или несколько сообщенийShipment.
Для сообщения Shipment требуется хотя бы один объект pickups или deliveries.
Определения этих объектов приведены ниже.
pickupsопределяет место получения отправления.deliveriesопределяет место доставки отправления.- И
pickups, иdeliveriesсодержат тип сообщенияVisitRequest, который определяет местоположения и другие сведения.
В таблице ниже описаны различные сценарии на основе конфигурации pickups и deliveries в сообщении Shipment.
| Сценарий | Описание |
|---|---|
Только pickups |
Предполагается, что вы только забираете отправление. |
Только deliveries |
Предполагается, что вы заранее загрузили отправление или предоставляете услугу. |
pickups и deliveries |
Назначенный автомобиль должен сначала забрать посылку, а затем доставить ее. Доставку может выполнить только то транспортное средство, которое выполнило посадку. |
Несколько типов pickups или deliveries |
Если для отправления указано несколько возможных значений pickups или deliveries, оптимизатор выбирает один вариант получения и один вариант доставки, исходя из минимизации затрат и соблюдения ограничений. |
Полный список свойств Shipment приведен в справочной документации.
Пример использования разметки типа Shipment
В этом примере у вас есть служба дневного ухода за собаками, где вы забираете собак из их дома и доставляете их в свой детский сад. Вы хотите указать место, откуда нужно забрать двух собак, и место доставки – адрес вашей компании.
- Первый дом собаки находится в башне Койт в Сан-Франциско. Координаты этого местоположения: широта 37.8024 и долгота -122.4058.
- Вторая собака живет в парке South Sunset Playground в Сан-Франциско. Координаты этого места: 37.7359 (широта) и -122.5011 (долгота).
- Ваша передержка для собак находится в парке Мишн Долорес в Сан-Франциско. Координаты этого местоположения: широта – 37,759773, долгота – -122,427063.
Ниже приведен пример кода сообщения Shipment, в котором объект shipments содержит два типа сообщений Shipment с координатами.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ ... ] } }
Vehicle
Тип сообщения Vehicle определяет структуру свойств транспортного средства, которое может выполнить доставку по маршруту.
Как показано на диаграмме:
- Сообщение
Vehicleсодержит всю информацию о реальном транспортном средстве. - Все сообщения
Vehicleуказываются в полеvehicles. - Поле
vehiclesсодержит несколько сообщенийVehicle.
В таблице ниже описаны некоторые важные свойства элемента Vehicle.
| Свойства | Описание |
|---|---|
startLocation и endLocation |
Начальное и конечное местоположение транспортных средств, которые являются частью окончательного оптимизированного маршрута. Если они не заданы, по умолчанию используются местоположения первого забора и последней доставки груза. |
costPerHour, costPerKilometer, costPerTraveledHour |
Параметры стоимости, относящиеся к транспортным средствам. Чтобы API возвращал оптимизированный маршрут, рекомендуется указать в запросе хотя бы один параметр стоимости. Подробнее о модели затрат… |
startTimeWindows и endTimeWindows |
Укажите периоды времени, когда транспортное средство может следовать по маршруту. Они должны находиться в пределах временного окна globalStartTime и globalEndTime, заданного в ShipmentModel. Это свойство не является обязательным, но мы рекомендуем его использовать, поскольку оптимизатор работает лучше всего, когда соблюдаются временные ограничения. |
Пример использования разметки типа Vehicle
В этом примере у вас есть служба по уходу за собаками, и вы хотите определить местоположение вашего автомобиля в начале и в конце дня и сколько бензина он тратит. Указывать рабочее время транспортного средства не нужно, поскольку оно совпадает с часами, заданными в свойствах globalStartTime и globalEndTime объекта ShipmentModel.
В этом примере значения свойства Vehicle в запросе следующие:
| Свойство | Значение | Описание |
|---|---|---|
startLocation |
latitude: 37.759773, longitude: -122.427063 |
Начальные координаты маршрута для вашего транспортного средства. Они соответствуют местоположению вашего центра по уходу за собаками, который находится в парке Миссия-Долорес в Сан-Франциско. |
endLocation |
latitude: 37.759773, longitude: -122.427063 |
Конечные координаты маршрута для вашего транспортного средства. Они соответствуют местоположению вашего центра по уходу за собаками, который находится в парке Миссия-Долорес в Сан-Франциско. |
costPerHour |
27 | Сколько вы платите водителю за перевозку собак. Вы платите водителю 27 долларов в час. |
Ниже приведен пример кода сообщения Vehicle, в котором используются значения из описанного выше сценария.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
Полный список свойств Vehicle приведен в справочной документации.
Пример полного запроса
В приведенном ниже примере кода показан полный запрос, в котором объединены примеры ShipmentModel, Shipment и Vehicle, приведенные в этом документе.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }