Custom Routes

Архитектура построения маршрутов в экосистеме HERE

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

В контексте HERE Maps API for JavaScript (Maps API for JavaScript) маршруты можно разделить на:

  • стандартные маршруты (fast, shortest)
  • маршруты для транспорта (car, truck, scooter, pedestrian)
  • кастомизированные маршруты (Custom Routes)

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


Базовый цикл построения кастомного маршрута

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

  1. Формирование набора точек маршрута (waypoints)
  2. Определение routing parameters
  3. Запрос к Routing API
  4. Отрисовка результата на карте

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

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

const routingParameters = {
  transportMode: 'car',
  origin: '52.5160,13.3779',
  destination: '52.5206,13.3862',
  return: 'polyline,summary',
  routingMode: 'fast'
};

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


Ключевые параметры кастомизации маршрутов

1. Избежание объектов (avoid features)

Позволяет исключить определённые элементы дорожной сети:

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

Пример:

routingParameters.avoid = {
  features: ['tollRoad', 'motorway']
};

Такая настройка используется для сценариев экономии или специфики транспорта.


2. Ограничения по типу транспорта

HERE Routing API поддерживает специализированные режимы:

  • car
  • truck
  • pedestrian
  • bicycle

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

routingParameters.transportMode = 'truck';

routingParameters.vehicle = {
  weight: 12000,
  height: 4.0,
  length: 12.0,
  tunnelCategory: 'B'
};

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


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

Параметр routingMode определяет стратегию построения пути:

  • fast — минимальное время
  • short — минимальная длина
  • balanced — баланс времени и расстояния

Пример:

routingParameters.routingMode = 'balanced';

4. Изменение геометрии маршрута

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

routingParameters.return = 'polyline,actions,instructions';
  • polyline — геометрия маршрута
  • actions — манёвры
  • instructions — текстовые подсказки

Это используется в навигационных приложениях и системах визуального сопровождения.


Построение кастомного маршрута через Routing API v8

Пример полноценного запроса с кастомизацией:

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

const params = {
  transportMode: 'car',
  origin: '52.5160,13.3779',
  destination: '52.5206,13.3862',
  routingMode: 'fast',
  return: 'polyline,summary,instructions',
  avoid: {
    features: ['ferry']
  }
};

router.calculateRoute(params, result => {
  const route = result.routes[0];

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

Использование промежуточных точек (waypoints)

Custom Routes часто включают сложные маршруты с несколькими остановками:

const params = {
  transportMode: 'car',
  origin: '52.5160,13.3779',
  destination: '52.5206,13.3862',
  via: new H.service.Url.MultiValueQueryParameter([
    '52.5175,13.3800',
    '52.5185,13.3820'
  ])
};

Такая конфигурация применяется в:

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

Геозоны и пользовательские ограничения

Расширенная кастомизация включает работу с географическими ограничениями.

Хотя Routing API не всегда напрямую поддерживает пользовательские полигоны, можно эмулировать ограничения через:

  • avoid areas (bbox или polygon approximation)
  • multiple route attempts с фильтрацией результата

Пример логики исключения зоны:

routingParameters.avoid = {
  areas: [
    {
      type: 'boundingBox',
      north: 52.53,
      south: 52.51,
      east: 13.40,
      west: 13.35
    }
  ]
};

Оптимизация маршрутов в сложных сценариях

При работе с большим количеством точек возникает задача оптимизации порядка посещения.

HERE Routing API предоставляет поддержку:

  • оптимизации waypoints
  • расчёта матрицы расстояний
  • комбинированных маршрутов

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

const params = {
  transportMode: 'car',
  origin: '52.5160,13.3779',
  destination: '52.5206,13.3862',
  via: H.service.Url.MultiValueQueryParameter([
    '52.5175,13.3800',
    '52.5185,13.3820',
    '52.5190,13.3840'
  ]),
  optimizeWaypoints: true
};

Работа с альтернативными маршрутами

Custom Routes часто требуют не одного, а нескольких вариантов пути:

routingParameters.alternatives = 3;

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

  • временем
  • расстоянием
  • количеством ограничений
  • уровнем загруженности дорог

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


Учёт дорожного трафика

Одной из ключевых особенностей маршрутизации в экосистеме HERE Technologies является интеграция live traffic data.

Параметр:

routingParameters.departureTime = new Date();

позволяет учитывать:

  • текущие пробки
  • аварии
  • временные ограничения движения

При этом маршруты становятся динамическими и изменяются в зависимости от времени суток.


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

Маршрут возвращается в виде закодированной полилинии:

const lineString = H.geo.LineString.fromFlexiblePolyline(polyline);

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

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

Интеграция кастомных маршрутов в UI слоя карты

После получения маршрута он интегрируется в карту через объекты слоя:

map.addObject(routeLine);
map.getViewModel().setLookAtData({
  bounds: routeLine.getBoundingBox()
});

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


Многоуровневая кастомизация маршрутов

Custom Routes в HERE Maps API формируются на нескольких уровнях:

  • транспортный уровень (car, truck, pedestrian)
  • стратегический уровень (fast, short, balanced)
  • ограничительный уровень (avoid, restrictions)
  • геометрический уровень (polyline, steps, instructions)
  • временной уровень (traffic-aware routing)

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