Альтернативные маршруты

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

В JavaScript SDK для картографических сервисов HERE Maps API альтернативные маршруты формируются через расширенные параметры запроса к Routing API v8, позволяя получать не один оптимальный путь, а набор конкурентных вариантов с различными характеристиками.


Логика формирования альтернативных маршрутов

При построении маршрута система рассматривает граф дорожной сети как взвешенный ориентированный граф:

  • вершины — перекрёстки и точки манёвров;
  • рёбра — дорожные сегменты;
  • веса — время, расстояние, штрафы за ограничения.

Альтернативные маршруты формируются путём поиска не одного кратчайшего пути, а множества допустимых решений, удовлетворяющих условиям:

  • различие по геометрии маршрута (diversity constraint);
  • допустимое отклонение от оптимального маршрута;
  • уникальность ключевых сегментов;
  • баланс между скоростью и вариативностью.

Основные параметры альтернатив в Routing API v8

В JavaScript-запросах через router.calculateRoute или REST-параметры ключевую роль играют следующие настройки:

alternatives

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

  • alternatives: 0 — только оптимальный маршрут
  • alternatives: 1–3 — генерация дополнительных путей

return

Определяет, какие данные возвращаются:

  • summary
  • polyline
  • actions
  • instructions
  • travelSummary

routingMode

  • fast — приоритет времени
  • short — приоритет расстояния
  • balanced — компромисс

transportMode

  • car
  • truck
  • pedestrian
  • bicycle

Базовый пример получения альтернативных маршрутов

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

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

const routingParameters = {
  origin: '52.5200,13.4050',
  destination: '52.5206,13.3862',
  transportMode: 'car',
  routingMode: 'fast',
  alternatives: 2,
  return: 'polyline,summary,actions,instructions'
};

router.calculateRoute(routingParameters, result => {
  const routes = result.routes;

  routes.forEach((route, index) => {
    console.log(`Маршрут ${index + 1}`);
    console.log(route.sections[0].summary);
  });
}, error => {
  console.error(error);
});

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

Каждый маршрут в ответе представляет собой отдельный объект:

{
  "routes": [
    {
      "sections": [
        {
          "summary": {
            "duration": 900,
            "length": 7200
          },
          "polyline": "...",
          "actions": []
        }
      ]
    }
  ]
}

Ключевые различия маршрутов

  • duration — время в пути
  • length — расстояние
  • trafficDelay — влияние пробок
  • baseDuration — время без учёта трафика

Различие альтернатив по стратегии маршрутизации

Быстрый маршрут (fast)

Обычно возвращает:

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

Альтернативы при этом часто отличаются:

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

Короткий маршрут (short)

Оптимизируется по расстоянию:

  • узкие улицы
  • городские дороги
  • больше поворотов

Альтернативы могут включать:

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

Сбалансированный маршрут (balanced)

Комбинирует:

  • время
  • расстояние
  • дорожные ограничения

Альтернативы здесь наиболее разнообразны по геометрии.


Управление различимостью альтернатив

Система генерации альтернатив использует эвристику “diversity penalty”, которая увеличивает стоимость повторного использования уже задействованных сегментов.

Факторы различимости:

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

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

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

result.routes.forEach(route => {
  const lineString = H.geo.LineString.fromFlexiblePolyline(
    route.sections[0].polyline
  );

  const routeLine = new H.map.Polyline(lineString, {
    style: { strokeColor: 'blue', lineWidth: 4 }
  });

  map.addObject(routeLine);
});

Фильтрация и постобработка альтернатив

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

По времени

Отсев маршрутов, превышающих основной более чем на X%:

const baseDuration = routes[0].sections[0].summary.duration;

const filtered = routes.filter(route => {
  const duration = route.sections[0].summary.duration;
  return duration <= baseDuration * 1.2;
});

По расстоянию

Используется при логистике:

  • допустимое отклонение 10–15%
  • исключение избыточных объездов

По типу дорог

В транспортных приложениях:

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

Альтернативные маршруты с учётом трафика

При включении параметра:

traffic: true

алгоритм начинает учитывать:

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

Это приводит к динамическому изменению набора альтернатив:

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

Использование waypoint alternatives

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

via: '52.51,13.40'

или несколько точек:

waypoint0: '52.52,13.40',
waypoint1: '52.53,13.41'

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


Ограничения генерации альтернатив

Система не всегда возвращает строго фиксированное количество маршрутов:

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

Производительность и стоимость вычислений

Рост числа альтернатив влияет на:

  • время ответа Routing API
  • объём возвращаемых данных
  • нагрузку на клиентскую визуализацию

Практически:

  • 1 маршрут — минимальная нагрузка
  • 2–3 маршрута — оптимальный баланс
  • 4+ маршрутов — экспоненциальный рост сложности обработки

Комбинация альтернатив с обходами (avoid parameters)

Альтернативные маршруты усиливаются параметрами исключений:

  • avoid[features]=tollRoads
  • avoid[features]=ferries
  • avoid[features]=seasonalClosure

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


Пример расширенного запроса с ограничениями

const routingParameters = {
  origin: '52.5200,13.4050',
  destination: '52.5300,13.4200',
  transportMode: 'car',
  routingMode: 'fast',
  alternatives: 3,
  'avoid[features]': 'tollRoads,ferries',
  traffic: true,
  return: 'polyline,summary,actions'
};

Поведение альтернатив в городских и междугородних сценариях

Городская среда

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

Междугородние маршруты

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

Практика выбора маршрута на клиенте

Обычно интерфейс:

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

Логика ранжирования:

  • primary route — лучший по метрике routingMode
  • secondary routes — отсортированные альтернативы

Геометрическая интерпретация альтернатив

Каждый маршрут можно представить как полилинию в пространстве координат:

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

Влияние масштабирования карты на восприятие альтернатив

При визуализации важно учитывать:

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

Особенности работы с полилиниями

HERE использует сжатый формат:

  • Flexible Polyline encoding
  • декодирование на клиенте
  • оптимизация передачи данных

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