В системе маршрутизации HERE Technologies ключевая концепция альтернативных маршрутов заключается в вычислении нескольких возможных путей между одной точкой отправления и точкой назначения с учётом различных критериев оптимизации: времени, расстояния, дорожных условий, трафика и ограничений транспортной среды.
В JavaScript SDK для картографических сервисов HERE Maps API альтернативные маршруты формируются через расширенные параметры запроса к Routing API v8, позволяя получать не один оптимальный путь, а набор конкурентных вариантов с различными характеристиками.
При построении маршрута система рассматривает граф дорожной сети как взвешенный ориентированный граф:
Альтернативные маршруты формируются путём поиска не одного кратчайшего пути, а множества допустимых решений, удовлетворяющих условиям:
В JavaScript-запросах через router.calculateRoute или
REST-параметры ключевую роль играют следующие настройки:
alternativesОпределяет количество альтернативных маршрутов:
alternatives: 0 — только оптимальный маршрутalternatives: 1–3 — генерация дополнительных путейreturnОпределяет, какие данные возвращаются:
summarypolylineactionsinstructionstravelSummaryroutingModefast — приоритет времениshort — приоритет расстоянияbalanced — компромиссtransportModecartruckpedestrianbicycleconst platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const router = platform.getRoutingService(null, 8);
const routingParameters = {
origin: '52.5200,13.4050',
destination: '52.5206,13.3862',
transportMode: 'car',
routingMode: 'fast',
alternatives: 2,
return: 'polyline,summary,actions,instructions'
};
router.calculateRoute(routingParameters, result => {
const routes = result.routes;
routes.forEach((route, index) => {
console.log(`Маршрут ${index + 1}`);
console.log(route.sections[0].summary);
});
}, error => {
console.error(error);
});
Каждый маршрут в ответе представляет собой отдельный объект:
{
"routes": [
{
"sections": [
{
"summary": {
"duration": 900,
"length": 7200
},
"polyline": "...",
"actions": []
}
]
}
]
}
fast)Обычно возвращает:
Альтернативы при этом часто отличаются:
short)Оптимизируется по расстоянию:
Альтернативы могут включать:
balanced)Комбинирует:
Альтернативы здесь наиболее разнообразны по геометрии.
Система генерации альтернатив использует эвристику “diversity penalty”, которая увеличивает стоимость повторного использования уже задействованных сегментов.
Факторы различимости:
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
center: { lat: 52.52, lng: 13.405 },
zoom: 12
}
);
result.routes.forEach(route => {
const lineString = H.geo.LineString.fromFlexiblePolyline(
route.sections[0].polyline
);
const routeLine = new H.map.Polyline(lineString, {
style: { strokeColor: 'blue', lineWidth: 4 }
});
map.addObject(routeLine);
});
После получения маршрутов часто применяется дополнительная фильтрация:
Отсев маршрутов, превышающих основной более чем на X%:
const baseDuration = routes[0].sections[0].summary.duration;
const filtered = routes.filter(route => {
const duration = route.sections[0].summary.duration;
return duration <= baseDuration * 1.2;
});
Используется при логистике:
В транспортных приложениях:
При включении параметра:
traffic: true
алгоритм начинает учитывать:
Это приводит к динамическому изменению набора альтернатив:
Дополнительный уровень вариативности достигается через промежуточные точки:
via: '52.51,13.40'
или несколько точек:
waypoint0: '52.52,13.40',
waypoint1: '52.53,13.41'
Каждая комбинация промежуточных точек может порождать собственный набор альтернатив.
Система не всегда возвращает строго фиксированное количество маршрутов:
Рост числа альтернатив влияет на:
Практически:
Альтернативные маршруты усиливаются параметрами исключений:
avoid[features]=tollRoadsavoid[features]=ferriesavoid[features]=seasonalClosureЭто приводит к генерации структурно различных маршрутов даже в одной географии.
const routingParameters = {
origin: '52.5200,13.4050',
destination: '52.5300,13.4200',
transportMode: 'car',
routingMode: 'fast',
alternatives: 3,
'avoid[features]': 'tollRoads,ferries',
traffic: true,
return: 'polyline,summary,actions'
};
Обычно интерфейс:
Логика ранжирования:
Каждый маршрут можно представить как полилинию в пространстве координат:
При визуализации важно учитывать:
HERE использует сжатый формат:
Каждая альтернатива содержит собственную полилинию, требующую отдельной декодировки перед отрисовкой.