Грузовая маршрутизация (Truck Routing) в HERE Maps API предназначена для построения маршрутов с учётом ограничений, характерных для грузового транспорта. В отличие от стандартной автомобильной навигации, такие маршруты учитывают:
Использование специализированной маршрутизации позволяет избежать ситуаций, когда транспортное средство оказывается перед мостом с недостаточной грузоподъёмностью, тоннелем с ограничением по высоте или дорогой, закрытой для грузового транспорта.
Для построения грузовых маршрутов используется сервис Routing API v8.
Запросы отправляются на сервер HERE, где производится анализ дорожной сети и рассчитывается оптимальный маршрут с учётом заданных характеристик транспорта.
Общая схема выглядит следующим образом:
Создание объекта платформы начинается с инициализации API-ключа.
const platform = new H.service.Platform({
apikey: "YOUR_API_KEY"
});
Создание экземпляра Routing Service:
const router = platform.getRoutingService(null, 8);
Объект router используется для отправки запросов к
Routing API v8.
Минимальный запрос включает координаты начала и конца маршрута.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
return: "polyline,summary"
};
Важнейшим параметром является:
transportMode: "truck"
Он сообщает системе, что расчёт должен выполняться для грузового транспорта.
Отправка запроса:
router.calculateRoute(
routingParameters,
onSuccess,
onError
);
Обработка результата:
function onSuccess(result) {
console.log(result);
}
Наиболее важная часть грузовой маршрутизации — описание транспортного средства.
HERE позволяет задавать множество параметров.
truck[grossWeight]=18000
Значение указывается в килограммах.
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[grossWeight]": 18000,
return: "polyline"
};
Система автоматически исключит дороги, на которых действуют ограничения по массе.
truck[height]=4
Высота указывается в метрах.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[height]": 4
};
Если на пути встретится тоннель высотой 3.8 метра, маршрут будет перестроен.
truck[width]=2.6
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[width]": 2.6
};
Учитываются узкие улицы и дорожные ограничения.
truck[length]=12
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[length]": 12
};
Маршрут будет учитывать ограничения для длинномерного транспорта.
truck[shippedHazardousGoods]
Для некоторых стран число осей влияет на допустимость проезда по отдельным дорогам.
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[axleCount]": 4
};
HERE поддерживает маршрутизацию для перевозки опасных материалов.
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[shippedHazardousGoods]": "flammable"
};
Некоторые допустимые категории:
explosive
gas
flammable
combustible
organic
poison
radioactive
corrosive
poisonousInhalation
harmfulToWater
Система автоматически исключает дороги и тоннели, запрещённые для выбранной категории груза.
Для перевозки опасных веществ особое значение имеют категории тоннелей.
Пример:
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
tunnelCategory: "B"
};
Допустимые значения:
A
B
C
D
E
Категории соответствуют европейским нормам ADR.
При расчёте маршрута исключаются тоннели, запрещённые для выбранной категории.
Грузовые перевозчики часто стремятся минимизировать дорожные сборы.
Для этого используются специальные параметры исключений.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
avoid: {
features: ["tollRoad"]
}
};
Также можно исключать:
avoid: {
features: [
"ferry",
"tunnel",
"dirtRoad",
"controlledAccessHighway"
]
}
По умолчанию сервис стремится построить наиболее быстрый маршрут.
const routingParameters = {
transportMode: "truck",
routingMode: "fast",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297"
};
Режимы:
fast
short
Поиск маршрута с минимальным временем движения.
routingMode: "fast"
Поиск кратчайшего пути.
routingMode: "short"
routingMode: "short"
Такой маршрут не всегда является самым быстрым.
Маршрут может проходить через несколько обязательных пунктов.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
via: [
"50.2546,28.6587",
"49.4229,26.9871"
],
destination: "49.8397,24.0297"
};
Промежуточные точки помогают моделировать реальные логистические маршруты.
Для анализа перевозки часто требуется расширенная информация.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
return: "summary,polyline,actions,instructions"
};
Описание параметров:
| Параметр | Назначение |
|---|---|
| summary | сводная информация |
| polyline | геометрия маршрута |
| actions | список манёвров |
| instructions | текстовые инструкции |
После расчёта маршрута можно получить статистику.
function onSuccess(result) {
const section = result.routes[0].sections[0];
console.log(
section.summary.length
);
console.log(
section.summary.duration
);
}
Пример результата:
{
length: 532481,
duration: 23456
}
Где:
length — расстояние в метрах;duration — время в секундах.HERE возвращает геометрию маршрута в сжатом формате Polyline.
const lineString =
H.geo.LineString.fromFlexiblePolyline(
section.polyline
);
Создание объекта линии:
const routeLine = new H.map.Polyline(
lineString,
{
style: {
lineWidth: 5
}
}
);
Добавление на карту:
map.addObject(routeLine);
Полный пример визуализации.
function showRoute(result) {
const route =
result.routes[0];
route.sections.forEach(section => {
const linestring =
H.geo.LineString
.fromFlexiblePolyline(
section.polyline
);
const polyline =
new H.map.Polyline(
linestring,
{
style: {
lineWidth: 6
}
}
);
map.addObject(polyline);
});
}
Каждый участок маршрута содержит действия водителя.
section.actions.forEach(action => {
console.log(
action.instruction
);
});
Пример:
Поверните направо
Через 300 метров держитесь левее
Съезд на автомагистраль
Такие данные используются для создания собственных навигационных интерфейсов.
Сервис способен возвращать альтернативные варианты.
const routingParameters = {
transportMode: "truck",
alternatives: 3,
origin: "50.4501,30.5234",
destination: "49.8397,24.0297"
};
В ответе будет несколько допустимых маршрутов.
result.routes.forEach(route => {
console.log(route);
});
Это позволяет сравнивать:
На основе данных маршрута легко вычислять примерную стоимость рейса.
const distanceKm =
section.summary.length / 1000;
const fuelCost =
distanceKm * 0.35;
console.log(fuelCost);
Более реалистичная модель может учитывать:
На практике параметры обычно используются совместно.
const routingParameters = {
transportMode: "truck",
origin: "50.4501,30.5234",
destination: "49.8397,24.0297",
"truck[grossWeight]": 26000,
"truck[height]": 4.2,
"truck[width]": 2.6,
"truck[length]": 14,
"truck[axleCount]": 5,
"truck[shippedHazardousGoods]":
"flammable",
routingMode: "fast",
return:
"summary,polyline,actions"
};
Подобная конфигурация позволяет строить маршруты, максимально приближённые к реальным условиям грузовых перевозок, учитывать особенности транспортного средства и соблюдать дорожные ограничения, действующие на всём протяжении маршрута.