Интеграция трафика в маршрутизацию

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

Платформа HERE предоставляет возможность интеграции актуальной дорожной информации непосредственно в процесс маршрутизации. Благодаря этому приложение может рассчитывать маршрут с учётом текущей ситуации на дорогах и автоматически выбирать наиболее быстрый путь.

Основными преимуществами такого подхода являются:

  • более точное время прибытия (ETA);
  • автоматический объезд заторов;
  • выбор альтернативных маршрутов;
  • динамическая перестройка маршрута при изменении обстановки;
  • возможность отображения пробок на карте одновременно с маршрутом.

Архитектура работы трафика в HERE

Интеграция трафика в HERE состоит из нескольких компонентов:

  1. Routing API — рассчитывает маршрут.
  2. Traffic Data — предоставляет информацию о дорожной ситуации.
  3. Map Rendering Engine — отображает трафик на карте.
  4. Traffic Incidents API — сообщает об авариях, перекрытиях и других событиях.

Типичная последовательность работы выглядит следующим образом:

  1. Пользователь выбирает начальную и конечную точки.
  2. Приложение отправляет запрос в Routing API.
  3. Сервис анализирует дорожную сеть и текущий трафик.
  4. Возвращается оптимальный маршрут.
  5. На карте отображаются маршрут и дорожная ситуация.
  6. При необходимости выполняется перерасчёт маршрута.

Включение учёта трафика при маршрутизации

В HERE Routing API учёт дорожной ситуации активируется параметром режима маршрутизации.

Пример формирования запроса:

const router = platform.getRoutingService(null, 8);

router.calculateRoute(
{
    routingMode: 'fast',
    transportMode: 'car',
    origin: '52.53086,13.38469',
    destination: '52.52698,13.43864',
    return: 'polyline,summary,actions,instructions'
},
onSuccess,
onError
);

Ключевые параметры:

Параметр Назначение
routingMode Режим построения маршрута
transportMode Тип транспорта
origin Начальная точка
destination Конечная точка
return Набор возвращаемых данных

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


Режимы маршрутизации

Параметр routingMode оказывает значительное влияние на расчёт маршрута.

Fast

Максимально быстрое прибытие.

routingMode: 'fast'

Алгоритм стремится минимизировать время поездки и активно использует данные о трафике.


Short

Минимальное расстояние.

routingMode: 'short'

Даже если маршрут короче, он может оказаться медленнее из-за пробок.


Разница между Fast и Short

Предположим:

  • маршрут А — 18 км;
  • маршрут Б — 24 км.

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


Получение времени в пути с учётом трафика

После расчёта маршрута сервис возвращает подробную статистику.

Пример обработки результата:

function onSuccess(result)
{
    const route = result.routes[0];
    const section = route.sections[0];

    console.log(
        'Время в пути:',
        section.summary.duration
    );

    console.log(
        'Расстояние:',
        section.summary.length
    );
}

Типичный объект:

{
  "summary": {
    "duration": 1850,
    "length": 15420
  }
}

Значения:

  • duration — время поездки в секундах;
  • length — длина маршрута в метрах.

Если трафик влияет на движение, длительность уже включает это влияние.


Расчёт ETA

ETA (Estimated Time of Arrival) — прогнозируемое время прибытия.

Пример вычисления:

const duration = section.summary.duration;

const eta = new Date(
    Date.now() + duration * 1000
);

console.log(eta);

Форматированный вывод:

const etaString =
    eta.toLocaleTimeString();

console.log(
    'Прибытие:',
    etaString
);

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


Получение нескольких альтернативных маршрутов

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

Пример:

router.calculateRoute(
{
    transportMode: 'car',
    routingMode: 'fast',
    alternatives: 3,
    origin: '52.53086,13.38469',
    destination: '52.52698,13.43864',
    return: 'polyline,summary'
},
onSuccess,
onError
);

Обработка результатов:

function onSuccess(result)
{
    result.routes.forEach(
        (route, index) =>
        {
            console.log(
                'Маршрут',
                index + 1
            );

            console.log(
                route.sections[0].summary
            );
        }
    );
}

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


Отображение дорожного трафика на карте

HERE предоставляет специальный слой дорожной информации.

Создание слоя:

const trafficLayer =
    platform
        .getMapTileService()
        .createTileLayer(
            'traffic.flow'
        );

Добавление на карту:

map.addLayer(trafficLayer);

После этого дороги начинают отображаться различными цветами.


Цветовая схема загруженности

Обычно используются следующие обозначения:

Цвет Состояние
Зелёный Свободное движение
Жёлтый Незначительное замедление
Оранжевый Средняя загруженность
Красный Сильная пробка
Тёмно-красный Практически остановившееся движение

Такая визуализация позволяет быстро оценить дорожную ситуацию.


Получение информации о дорожных происшествиях

Кроме плотности потока, HERE предоставляет данные о дорожных событиях.

Среди них:

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

Запрос может возвращать данные в виде географических объектов и метаданных.

Пример структуры:

{
  "incidents": [
    {
      "id": "12345",
      "type": "ACCIDENT",
      "criticality": "major"
    }
  ]
}

Отображение инцидентов на карте

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

Пример:

const marker =
    new H.map.Marker(
    {
        lat: incident.lat,
        lng: incident.lng
    });

map.addObject(marker);

Для повышения информативности можно использовать разные иконки для разных типов событий.


Анализ влияния трафика на маршрут

Нередко требуется определить, насколько пробки увеличивают продолжительность поездки.

Подход состоит из двух расчётов:

  1. маршрут без учёта трафика;
  2. маршрут с учётом трафика.

Затем сравниваются значения времени.

Пример:

const delay =
    trafficDuration -
    normalDuration;

console.log(
    'Задержка:',
    delay
);

Процент увеличения времени:

const percent =
(
    delay /
    normalDuration
) * 100;

console.log(percent);

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


Автоматический перерасчёт маршрута

Дорожная ситуация может меняться каждую минуту.

Поэтому многие приложения выполняют периодический пересчёт маршрута.

Пример таймера:

setInterval(
() =>
{
    calculateRoute();
},
60000
);

В данном случае новый маршрут строится каждую минуту.


Перестроение только при существенных изменениях

Постоянная перестройка может раздражать пользователей.

Поэтому обычно сравниваются:

  • новое ETA;
  • текущее ETA;
  • величина задержки.

Пример:

if (
    newDuration -
    currentDuration >
    300
)
{
    rebuildRoute();
}

Маршрут обновится только при задержке более пяти минут.


Использование путевых точек

Маршрут может проходить через несколько промежуточных мест.

Пример:

router.calculateRoute(
{
    transportMode: 'car',
    origin: '52.53086,13.38469',

    via: [
        '52.52000,13.41000',
        '52.51500,13.42000'
    ],

    destination: '52.52698,13.43864',

    routingMode: 'fast'
},
onSuccess,
onError
);

Трафик анализируется для каждого сегмента маршрута.


Ограничение определённых дорог

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

Пример:

router.calculateRoute(
{
    transportMode: 'car',
    avoid:
    {
        features:
        [
            'tollRoad'
        ]
    }
},
onSuccess,
onError
);

Возможные варианты:

  • платные дороги;
  • паромы;
  • туннели;
  • автомагистрали.

Это помогает строить более подходящие маршруты в сложной дорожной обстановке.


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

Системы доставки активно используют HERE Traffic для:

  • расчёта времени прибытия курьеров;
  • планирования маршрутов автопарка;
  • прогнозирования задержек;
  • динамического перераспределения заказов;
  • мониторинга выполнения рейсов.

При большом количестве автомобилей даже сокращение среднего времени поездки на несколько минут способно существенно снизить операционные расходы.


Оптимизация производительности

При работе с трафиком следует учитывать несколько рекомендаций.

Кэширование маршрутов

Не выполнять повторный запрос для одинаковых координат.

const cache = new Map();

Ограничение частоты обновлений

Избегать слишком частых запросов.

const UPDATE_INTERVAL =
    120000;

Обновление только видимой области

При работе с инцидентами желательно загружать данные только для текущего участка карты.

const bounds =
    map.getViewModel()
       .getLookAtData()
       .bounds;

Это значительно уменьшает объём передаваемых данных.


Комбинирование трафика и навигации

Наиболее эффективные решения объединяют:

  • построение маршрута;
  • отображение пробок;
  • отображение инцидентов;
  • голосовые инструкции;
  • динамический перерасчёт пути;
  • прогноз времени прибытия.

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