Расчет времени и расстояния

В экосистеме геосервисов HERE Technologies ключевая задача маршрутизации заключается в вычислении не только геометрического пути между точками, но и параметров, имеющих прикладное значение: времени в пути, длины маршрута, стоимости перемещения и альтернативных вариантов проезда. В JavaScript SDK платформы HERE Maps API эти задачи решаются через Routing API и сопутствующие сервисы матричных расчётов и изохрон.


Базовая модель расчёта маршрута

Расчёт времени и расстояния строится на графовой модели дорожной сети:

  • узлы графа — перекрёстки и контрольные точки
  • рёбра — сегменты дорог
  • веса рёбер — время, расстояние, ограничения

При построении маршрута учитываются:

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

Основной объект расчёта — маршрут (route), содержащий набор секций (sections), каждая из которых описывает отдельный участок движения.


Инициализация Routing API в JavaScript

В SDK HERE Maps API маршрутизация выполняется через модуль H.service.RoutingService:

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

const routingService = platform.getRoutingService(null);

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


Простой расчёт маршрута между двумя точками

Базовый запрос включает:

  • точку отправления (origin)
  • точку назначения (destination)
  • режим транспорта
const routingParameters = {
  routingMode: 'fast',
  transportMode: 'car',
  origin: '52.5160,13.3779',
  destination: '52.5206,13.3862',
  return: 'polyline,summary'
};

routingService.calculateRoute(routingParameters, result => {
  const route = result.routes[0];

  const section = route.sections[0];
  const summary = section.summary;

  console.log('Distance (m):', summary.length);
  console.log('Travel time (s):', summary.duration);
});

Интерпретация результата

  • length — расстояние в метрах
  • duration — время в секундах

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


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

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

  • fast — минимизация времени
  • short — минимизация расстояния
  • balanced — компромисс между временем и длиной

Пример:

routingMode: 'short'

Изменение режима напрямую влияет на итоговые значения времени и расстояния, так как алгоритм выбирает разные рёбра графа.


Учёт трафика в расчётах

При включении параметра трафика маршрут становится динамическим:

routingMode: 'fast',
trafficMode: 'enabled'

В этом режиме:

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

Внутри ответа появляются два типа значений:

  • базовое время (без трафика)
  • скорректированное время (с учётом трафика)

Детализация маршрута и секции

Каждый маршрут разбивается на секции:

route.sections.forEach(section => {
  console.log(section.summary.length);
  console.log(section.summary.duration);
});

Секции позволяют:

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

Расчёт расстояния без маршрута (геодезическая дистанция)

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

В HERE Maps API это реализуется через геометрические утилиты:

const pointA = { lat: 52.5160, lng: 13.3779 };
const pointB = { lat: 52.5206, lng: 13.3862 };

const distance = H.geo.Point
  .distance(pointA, pointB);

console.log(distance);

Такой расчёт:

  • игнорирует дороги
  • использует сферическую модель Земли
  • возвращает расстояние по дуге (great-circle distance)

Матричный расчёт времени и расстояния

Для анализа множества точек используется Matrix Routing API. Он позволяет вычислить:

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

Пример структуры запроса:

const matrixParams = {
  origins: ['52.5160,13.3779', '52.5200,13.3700'],
  destinations: ['52.5206,13.3862', '52.5155,13.3800'],
  transportMode: 'car',
  routingMode: 'fast'
};

Результат — матрица вида:

D1 D2
O1 t1 t2
O2 t3 t4

Где значения t — время в секундах.


Применение матриц в логистике

Матрицы используются для:

  • оптимизации маршрутов доставки
  • распределения курьеров
  • анализа зоны покрытия
  • решения задач коммивояжёра (TSP)

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


Изохроны: расчёт доступного времени

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

В HERE Maps API используется параметр:

  • range — время в секундах или расстояние

Пример:

const isolineParams = {
  origin: '52.5160,13.3779',
  transportMode: 'car',
  range: 900, // 15 минут
  rangetype: 'time'
};

Результат — полигон, ограничивающий зону доступности.

Практическая интерпретация

Изохрона позволяет определить:

  • зоны доставки за 15/30/60 минут
  • доступность сервисных объектов
  • границы эффективного обслуживания

Сравнение маршрутов по времени и расстоянию

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

alternatives: 3

Каждый маршрут содержит:

  • длину
  • время
  • набор манёвров
  • геометрию

Сравнение выполняется по:

  • минимальному времени
  • минимальному расстоянию
  • устойчивости к трафику

Учет ограничений транспорта

Разные типы транспорта дают разные результаты расчёта.

Легковой автомобиль

  • учитываются все дороги
  • допускаются городские маршруты

Грузовой транспорт

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

Пешеход

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

Влияние параметров маршрутизации на результат

На итоговое время и расстояние влияют:

  • выбор алгоритма оптимизации
  • режим трафика
  • тип транспорта
  • наличие альтернативных дорог
  • временные ограничения (например, одностороннее движение)

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


Асинхронная модель расчёта

Все операции выполняются асинхронно, что критично для UI-приложений:

routingService.calculateRoute(params, result => {
  // обработка результата
});

Это позволяет:

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

Кэширование и повторное использование результатов

В высоконагруженных системах часто применяется:

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

Это снижает нагрузку на API и ускоряет отклик интерфейса.


Итоговая модель вычислений

Расчёт времени и расстояния в HERE Maps API представляет собой многоуровневую систему:

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

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