Дорожная обстановка в HERE Maps API формируется на основе нескольких потоков данных, объединённых в единый аналитический слой. Основу составляют телематические данные от мобильных устройств, автомобильных датчиков и партнёрских навигационных систем. Эти данные агрегируются, очищаются и нормализуются, после чего преобразуются в структурированные индикаторы трафика.
Ключевые типы информации:
Каждый сегмент дорожной сети представляет собой отдельный объект с временными и статистическими характеристиками, которые могут быть запрошены через Routing API и дополнительные сервисы платформы HERE.
В JavaScript API учет дорожной обстановки чаще всего активируется на уровне маршрутизации. Основной принцип заключается в том, что алгоритм расчёта пути перестаёт быть статичным и начинает учитывать изменяющиеся веса графа дорог.
При создании маршрута параметр включения трафика передаётся в объект конфигурации:
const routingParameters = {
routingMode: 'fast',
transportMode: 'car',
origin: '52.5200,13.4050',
destination: '52.5300,13.3840',
return: 'polyline,summary',
traffic: 'enabled'
};
Параметр traffic: 'enabled' активирует использование
текущих и прогнозных данных загруженности дорог.
Внутри системы каждая дорога рассматривается как ребро графа с динамическим весом:
Формально время движения можно представить как:
t =
где:
При отсутствии актуальных данных используется смешанная модель:
v_{traffic} = v_{current} + (1-) v_{historical}
Коэффициент α определяется качеством и свежестью данных.
В JavaScript API дорожная обстановка может отображаться как отдельный визуальный слой поверх карты.
Типичные слои:
Пример подключения слоя:
const trafficLayer = platform.getTrafficService().createTrafficLayer();
map.addLayer(trafficLayer);
Каждый слой обновляется асинхронно, без блокировки основного потока карты. Это важно для обеспечения плавной визуализации при изменении условий движения.
Потоки трафика обычно кодируются цветами, отражающими скорость:
Каждый сегмент дороги получает атрибут скорости, который интерпретируется визуализатором.
Пример запроса слоя с визуализацией:
const trafficTiles = platform.getMapTileService({
type: 'vector'
}).createTileLayer('traffic.flow');
map.addLayer(trafficTiles);
При наличии нескольких точек маршрута система пересчитывает оптимальное время прибытия с учётом динамических изменений.
const waypoints = [
'52.5200,13.4050',
'52.5250,13.3900',
'52.5300,13.3840'
];
const routingParameters = {
routingMode: 'fast',
transportMode: 'car',
origin: waypoints[0],
destination: waypoints[2],
via: waypoints[1],
traffic: 'enabled',
return: 'summary'
};
Каждый сегмент между точками рассматривается отдельно, что позволяет системе перераспределять приоритеты маршрута при изменении дорожной ситуации.
Инциденты в дорожной сети представляют собой отдельный тип данных, который влияет на веса графа сильнее, чем обычное снижение скорости.
Типы инцидентов:
При наличии инцидента сегмент может быть:
Логика обработки основана на приоритетах:
Дорожная обстановка не является статической. В JavaScript API используются механизмы периодического обновления:
Пример обновления маршрута:
setInterval(() => {
router.calculateRoute(routingParameters, result => {
const route = result.routes[0];
map.removeObjects(map.getObjects());
map.addObject(new H.map.Polyline(route.sections[0].polyline));
});
}, 30000);
Такой подход позволяет адаптировать маршрут при изменении условий движения.
Система использует исторические профили загруженности дорог, которые формируются на основе наблюдений за длительный период.
Историческая модель особенно важна в случаях:
Прогноз строится на основе временных паттернов:
Комбинированная модель позволяет заранее учитывать будущие изменения загруженности.
Вместо минимизации расстояния система оптимизирует время прибытия.
Целевая функция может быть выражена как:
T = _{i=1}^{n}
где каждый сегмент дороги имеет собственную динамическую скорость, зависящую от времени.
Такой подход позволяет получать маршруты, которые в реальных условиях оказываются быстрее, несмотря на возможное увеличение расстояния.
JavaScript API поддерживает события, связанные с изменением состояния дорожной обстановки.
Типовые события:
Пример обработки:
router.addEventListener('trafficchange', event => {
console.log('Изменение трафика:', event);
});
Событийная модель снижает необходимость постоянного опроса сервера и позволяет реагировать только на значимые изменения.
Полноценная работа с дорожной обстановкой достигается при совместном использовании:
Такой стек позволяет одновременно:
Архитектура взаимодействия строится вокруг разделения ответственности между слоями данных и слоем визуализации, что снижает нагрузку на клиентскую часть и обеспечивает стабильную работу при высоком количестве обновлений.