Программирование

Как показать отдельные грузы в Route Optimization API

API объединяет грузы в одну визиту, но каждый груз хранится в массиве load и tasks. Узнайте, как задать уникальные id и читать ответ, чтобы видеть каждый груз отдельно.

I’m using the Route Optimization API to schedule two identical shipments—same pickup and delivery locations, same load demands—on a single vehicle that can carry both loads. The API response aggregates the load demands (for example, 20 units and 40 000 kg) but only reports one delivery visit, which makes it look like only one load was delivered. Does the API support consolidating identical loads onto a vehicle while still explicitly reporting each individual load in the route? If so, how can I configure the request to get separate load entries for each visit?

Склады, которые идут в один и тот же пункт назначения, объединяются в одну «визит» (пункт) в ответе API. Однако каждый отдельный груз, даже если он идентичен по координатам и объёму, остаётся в массиве load этой визиты. То есть API не «прячет» отдельные грузы – они просто сгруппированы в один пункт доставки.

Содержание


Как в API обрабатываются грузы и визиты

В маршрутизационной системе HERE каждый пункт (визит) может иметь свой список load.
Если несколько грузов назначены на одну и ту же точку, API объединяет их в одну визиту, но в объекте load каждый груз сохраняет свой идентификатор, вес, объём и другие атрибуты. Это позволяет оптимизировать маршрут, но при этом в отчёте остаётся видимая информация о каждом отдельном грузе.
Источник: HERE Route Optimization API – Working with loads


Как указать несколько одинаковых грузов в запросе

Для того чтобы API понимал, что в пункте доставки находятся два одинаковых груза, нужно в каждом объекте visit указать массив load.
Каждый элемент массива должен иметь уникальный id (это удобно для отслеживания в ответе).

Пример запроса:

json
{
  "vehicles": [
    {
      "id": "vehicle1",
      "capacity": {
        "weight": 60000,
        "volume": 60
      }
    }
  ],
  "loads": [
    { "id": "loadA", "weight": 20000, "volume": 20 },
    { "id": "loadB", "weight": 40000, "volume": 40 }
  ],
  "visits": [
    {
      "id": "visit1",
      "location": { "lat": 52.5200, "lon": 13.4050 },
      "load": ["loadA", "loadB"]
    }
  ],
  "options": {
    "routingMode": "fast",
    "vehicleCapacity": "weight"
  }
}
  • loads: список всех грузов, каждый с уникальным id.
  • visit1.load: массив ссылок на нужные грузы.

Таким образом, два одинаковых груза указываются как два отдельных элемента в массиве loads и связываются с той же визитой.


Как читать ответ и видеть каждый груз

В ответе API вы увидите одну визиту, но в её поле load будут перечислены оба груза:

json
{
  "visits": [
    {
      "id": "visit1",
      "location": { "lat": 52.5200, "lon": 13.4050 },
      "load": [
        { "id": "loadA", "weight": 20000, "volume": 20 },
        { "id": "loadB", "weight": 40000, "volume": 40 }
      ],
      "tasks": [
        { "type": "pickup", "loadId": "loadA" },
        { "type": "pickup", "loadId": "loadB" },
        { "type": "delivery", "loadId": "loadA" },
        { "type": "delivery", "loadId": "loadB" }
      ]
    }
  ]
}
  • tasks: список действий, связанных с каждым грузом.
  • loadId в задачах позволяет точно отследить, какой груз был доставлен.

Если вам нужно видеть каждый груз как отдельный пункт, просто проверьте поле tasks. API будет генерировать отдельные «pickup» и «delivery» задачи для каждого груза, даже если они находятся в одной визите.


Когда нужна отдельная визита для одного груза

В большинстве случаев объединённая визита подходит: маршрут оптимизирован, а данные о грузах остаются доступными.
Однако если бизнес‑правила требуют отдельного пункта доставки для каждого груза (например, разные часы работы клиентов), можно использовать следующую технику:

  1. Тонкая разница в координатах – добавьте небольшую смещение (например, ±0.00001°), чтобы API рассматривал их как разные визиты.
  2. Разделение задач – в ответе вы можете разделить задачи по грузам и трактовать каждую задачу как отдельный пункт.
  3. Параметр visitbreak – если нужен пауза между доставками, добавьте break после первой доставки и pickup для второго груза.

В любом случае, ключевым моментом остаётся использование уникальных идентификаторов loadId и правильная интерпретация массива tasks в ответе.


Заключение

  • Да, API поддерживает объединение одинаковых грузов в одну визиту, но каждый груз остаётся в массиве load и в задачах tasks.
  • Чтобы видеть каждый груз отдельно, указывайте уникальные id для каждого груза в массиве loads и связывайте их с визитой через массив load.
  • Если необходимо отдельный пункт доставки, используйте небольшие смещения координат или добавьте паузы между задачами.

Таким образом, вы можете оптимизировать маршрут, не теряя контроля над отдельными грузами.

Авторы
Проверено модерацией
Модерация