Учет дорожной обстановки

Дорожная обстановка в HERE Maps API формируется на основе нескольких потоков данных, объединённых в единый аналитический слой. Основу составляют телематические данные от мобильных устройств, автомобильных датчиков и партнёрских навигационных систем. Эти данные агрегируются, очищаются и нормализуются, после чего преобразуются в структурированные индикаторы трафика.

Ключевые типы информации:

  • текущая скорость движения по сегментам дорог
  • исторически усреднённые скорости
  • уровень загруженности (congestion level)
  • дорожные инциденты (аварии, перекрытия, дорожные работы)
  • прогнозные модели движения

Каждый сегмент дорожной сети представляет собой отдельный объект с временными и статистическими характеристиками, которые могут быть запрошены через 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 =

где:

  • d — длина сегмента дороги
  • vₜᵣₐ??ᵢ? — актуальная скорость с учётом загруженности

При отсутствии актуальных данных используется смешанная модель:

v_{traffic} = v_{current} + (1-) v_{historical}

Коэффициент α определяется качеством и свежестью данных.


Работа с дорожными слоями (Traffic Layers)

В JavaScript API дорожная обстановка может отображаться как отдельный визуальный слой поверх карты.

Типичные слои:

  • поток движения (Traffic Flow)
  • инциденты (Traffic Incidents)
  • прогноз загруженности

Пример подключения слоя:

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'
};

Каждый сегмент между точками рассматривается отдельно, что позволяет системе перераспределять приоритеты маршрута при изменении дорожной ситуации.


Инциденты и их влияние на маршрутизацию

Инциденты в дорожной сети представляют собой отдельный тип данных, который влияет на веса графа сильнее, чем обычное снижение скорости.

Типы инцидентов:

  • аварии
  • перекрытия дорог
  • строительные работы
  • временные ограничения движения

При наличии инцидента сегмент может быть:

  • полностью исключён из маршрута
  • включён с высоким штрафом времени
  • помечен как альтернативный путь

Логика обработки основана на приоритетах:

  1. полное перекрытие
  2. критическое замедление
  3. частичное ограничение
  4. информационное событие

Обновление данных в реальном времени

Дорожная обстановка не является статической. В JavaScript API используются механизмы периодического обновления:

  • polling (регулярные запросы)
  • event-driven обновления
  • потоковые данные (streaming)

Пример обновления маршрута:

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}

где каждый сегмент дороги имеет собственную динамическую скорость, зависящую от времени.

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


Событийная модель обновления трафика в API

JavaScript API поддерживает события, связанные с изменением состояния дорожной обстановки.

Типовые события:

  • изменение плотности трафика
  • обновление инцидентов
  • пересчёт маршрута

Пример обработки:

router.addEventListener('trafficchange', event => {
  console.log('Изменение трафика:', event);
});

Событийная модель снижает необходимость постоянного опроса сервера и позволяет реагировать только на значимые изменения.


Комбинирование маршрутизации и визуализации трафика

Полноценная работа с дорожной обстановкой достигается при совместном использовании:

  • Routing API
  • Traffic Tile Layer
  • Incident Layer
  • Event listeners

Такой стек позволяет одновременно:

  • рассчитывать оптимальный маршрут
  • визуализировать ситуацию на карте
  • реагировать на изменения в реальном времени
  • перерасчитывать путь без перезагрузки карты

Архитектура взаимодействия строится вокруг разделения ответственности между слоями данных и слоем визуализации, что снижает нагрузку на клиентскую часть и обеспечивает стабильную работу при высоком количестве обновлений.