Получение данных о трафике

В экосистеме HERE Technologies трафик реализован как многослойная система потоковых и статических данных, предназначенных для разных сценариев потребления: от визуализации на карте до аналитики маршрутов и прогнозирования времени прибытия.

Трафиковые данные в HERE делятся на три ключевых категории:

  • Flow (поток движения) — текущая скорость и загруженность дорог
  • Incidents (инциденты) — аварии, перекрытия, дорожные работы
  • Tiles (векторные тайлы трафика) — визуальный слой для отображения на карте

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


Подключение трафикового слоя в HERE Maps JavaScript API

В HERE Maps JS API (версии 3.x) трафик подключается как отдельный слой поверх базовой карты.

Основной объект — H.map.layer.TileLayer, который использует провайдер трафиковых тайлов.

const platform = new H.service.Platform({
  apikey: 'YOUR_API_KEY'
});

const defaultLayers = platform.createDefaultLayers();

const map = new H.Map(
  document.getElementById('map'),
  defaultLayers.vector.normal.map,
  {
    center: { lat: 52.52, lng: 13.405 },
    zoom: 12,
    pixelRatio: window.devicePixelRatio
  }
);

const trafficLayer = platform.getTrafficService().createTrafficLayer();
map.addLayer(trafficLayer);

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


Работа с Traffic Flow API

Flow API предоставляет информацию о текущей скорости движения, свободности дорог и коэффициенте загруженности.

Формат данных Flow

Каждый сегмент дороги содержит:

  • speed — текущая скорость
  • freeFlow — скорость без пробок
  • jamFactor — коэффициент загруженности (0–10)
  • confidence — уровень достоверности данных

Получение данных через REST в JavaScript

const url = `https://data.traffic.hereapi.com/v7/flow?in=52.52,13.405;r=5000&apiKey=YOUR_API_KEY`;

fetch(url)
  .then(response => response.json())
  .then(data => {
    console.log(data);
  });

Параметр in определяет область запроса:

  • координаты центра
  • радиус в метрах

Интерпретация jamFactor

jamFactor является ключевым индикатором состояния дороги:

  • 0.0 — свободное движение
  • 1.0–4.0 — умеренная загруженность
  • 4.0–7.0 — плотный трафик
  • 7.0–10.0 — критическая пробка

Traffic Incidents API

Incidents API отвечает за события, влияющие на движение: аварии, перекрытия, ремонтные работы.

Пример запроса инцидентов

const incidentsUrl = `https://data.traffic.hereapi.com/v7/incidents?in=52.52,13.405;r=10000&apiKey=YOUR_API_KEY`;

fetch(incidentsUrl)
  .then(res => res.json())
  .then(data => {
    console.log(data);
  });

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

Инциденты классифицируются по категориям:

  • аварии (accidents)
  • дорожные работы (roadworks)
  • перекрытия (closures)
  • погодные ограничения
  • события (events)

Каждый инцидент содержит:

  • геометрию (линия или точка)
  • временные рамки
  • степень влияния на трафик
  • описание

Визуализация трафика на карте

Для отображения данных Flow и Incidents используется комбинированный подход: тайловый слой + динамические объекты.

Пример кастомной визуализации Flow

function getColorByJamFactor(jamFactor) {
  if (jamFactor < 2) return 'green';
  if (jamFactor < 5) return 'yellow';
  if (jamFactor < 7) return 'orange';
  return 'red';
}

Отрисовка линий трафика

data.results.forEach(segment => {
  const lineString = new H.geo.LineString();

  segment.geometry.forEach(point => {
    lineString.pushPoint({ lat: point.lat, lng: point.lng });
  });

  const polyline = new H.map.Polyline(lineString, {
    style: {
      strokeColor: getColorByJamFactor(segment.jamFactor),
      lineWidth: 4
    }
  });

  map.addObject(polyline);
});

Обновление трафика в реальном времени

HERE Traffic поддерживает обновление данных с интервалом от 30 секунд до нескольких минут в зависимости от региона.

Реализация polling

setInterval(() => {
  fetch(trafficUrl)
    .then(res => res.json())
    .then(updateMap);
}, 60000);

Использование событий карты для адаптации трафика

Интерактивные карты позволяют обновлять трафиковый слой в зависимости от области просмотра.

map.addEventListener('mapviewchangeend', function () {
  const bounds = map.getViewModel().getLookAtData().bounds;

  const trafficUrl = buildTrafficUrl(bounds);

  fetch(trafficUrl)
    .then(res => res.json())
    .then(renderTraffic);
});

Географическая фильтрация данных

Traffic API позволяет ограничивать область выборки:

  • по радиусу (r)
  • по bounding box
  • по полилинии маршрута

Пример bounding box запроса

const url = `https://data.traffic.hereapi.com/v7/flow?in=bbox:52.3,13.1,52.6,13.6&apiKey=YOUR_API_KEY`;

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

Трафиковые данные напрямую влияют на расчет маршрутов через Routing API.

Основные параметры:

  • текущая скорость
  • исторические данные
  • прогноз движения

Пример включения трафика в маршрут

const router = platform.getRoutingService();

const params = {
  routingMode: 'fast',
  transportMode: 'car',
  origin: '52.52,13.405',
  destination: '52.50,13.30',
  return: 'polyline,summary',
  traffic: 'enabled'
};

Оптимизация загрузки трафиковых данных

При работе с большими картами важно минимизировать количество запросов:

  • использовать кэширование тайлов
  • обновлять данные только при изменении viewport
  • ограничивать радиус запроса
  • комбинировать Flow и Incidents в одном запросе, если возможно

Обработка ошибок и ограничений API

Типовые сценарии ошибок:

  • превышение лимита запросов
  • отсутствие данных в регионе
  • устаревшие трафиковые сегменты
  • недоступность отдельных тайлов

Рекомендуется реализовать fallback-логику:

.catch(error => {
  console.warn('Traffic data unavailable', error);
});

Структура ответа Traffic API

Типичный JSON-ответ содержит:

{
  "results": [
    {
      "location": {
        "geometry": "LINESTRING(...)"
      },
      "currentFlow": {
        "speed": 45,
        "freeFlow": 80,
        "jamFactor": 3.2
      }
    }
  ]
}

Совмещение Flow и Incidents для аналитики

Комбинированный анализ позволяет:

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

Логика объединения данных обычно строится на геопространственном пересечении:

  • инциденты → изменяют Flow
  • Flow → показывает эффект инцидентов

Потоковая модель обновления данных

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

  • клиент запрашивает область интереса
  • сервер возвращает обновления по мере изменения состояния
  • минимизируется polling

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

Типовые применения:

  • логистика и доставка
  • навигационные приложения
  • сервисы такси
  • системы мониторинга городского движения
  • аналитика дорожной инфраструктуры

Каждая из этих систем опирается на одинаковую базу Flow + Incidents, но различается способом агрегации и частотой обновления.