Построение изохрон доступности

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

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


Изохрона формируется как результат решения задачи обратной изохронной маршрутизации:

  • задаётся стартовая точка ( P_0 )
  • задаётся набор ограничений времени ( T )
  • вычисляется множество точек ( P_i ), достижимых за время ( t T )

Формально область доступности можно представить как:

(T)={p ^2 t(P_0, p) T}

где ( t(P_0, p) ) — функция времени маршрута от исходной точки до произвольной координаты.

В практической реализации функция времени зависит от:

  • дорожного графа
  • ограничений скорости
  • типа транспорта (car, pedestrian, truck)
  • пробок (если включены traffic-параметры)

Routing API и генерация изохрон

В HERE Routing API используется endpoint:

GET https://router.hereapi.com/v8/isochrone

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

  • origin — координаты центра
  • range[type] — тип ограничения (time или distance)
  • range[values] — массив порогов (например, 300, 600, 900 секунд)
  • transportMode — режим движения
  • apikey — ключ доступа

Пример запроса:

https://router.hereapi.com/v8/isochrone
?origin=52.5200,13.4050
&range[type]=time
&range[values]=300,600,900
&transportMode=car
&apikey=YOUR_API_KEY

Ответ API возвращает GeoJSON-подобную структуру с полигонами изохрон.


Подготовка карты в HERE Maps JavaScript API

Визуализация выполняется через библиотеку Maps API for JavaScript.

Инициализация карты:

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 beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, defaultLayers);

Запрос изохрон через JavaScript (fetch)

Получение геометрии зон доступности:

async function getIsochrone(lat, lng) {
  const url = `https://router.hereapi.com/v8/isochrone` +
    `?origin=${lat},${lng}` +
    `&range[type]=time` +
    `&range[values]=300,600,900` +
    `&transportMode=car` +
    `&apikey=YOUR_API_KEY`;

  const response = await fetch(url);
  const data = await response.json();
  return data;
}

Структура ответа обычно содержит коллекцию объектов типа FeatureCollection, где каждая feature соответствует отдельному времени доступности.


Отображение изохрон на карте

Полигоны добавляются через H.geo.Polygon и H.map.Polygon.

function addIsochroneLayer(map, geojson) {
  geojson.features.forEach(feature => {
    const coords = feature.geometry.coordinates[0];

    const strip = new H.geo.LineString();
    coords.forEach(([lng, lat]) => {
      strip.pushPoint({ lat, lng });
    });

    const polygon = new H.map.Polygon(strip, {
      style: {
        fillColor: 'rgba(0, 128, 255, 0.3)',
        strokeColor: 'rgba(0, 128, 255, 0.8)',
        lineWidth: 2
      }
    });

    map.addObject(polygon);
  });
}

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


Многоуровневые изохроны

Использование нескольких значений времени позволяет строить концентрические области доступности:

  • 300 секунд — ближайшая зона
  • 600 секунд — средняя
  • 900 секунд — расширенная область

Каждый слой можно стилизовать отдельно:

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

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

const styles = [
  { fill: 'rgba(0, 128, 255, 0.4)' },
  { fill: 'rgba(0, 128, 255, 0.25)' },
  { fill: 'rgba(0, 128, 255, 0.15)' }
];

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

Изохроны существенно зависят от выбранного режима:

  • car — учитывает дорожную сеть, пробки, ограничения
  • pedestrian — использует пешеходные маршруты
  • bicycle — учитывает велодорожки и допустимые улицы
  • truck — применяет ограничения по грузовому транспорту

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


Производительность и ограничения

При работе с изохронами возникают вычислительные и сетевые ограничения:

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

Рекомендуемые практики:

  • ограничивать количество уровней (обычно 3–5)
  • кэшировать ответы API
  • использовать debounce при интерактивном перемещении маркера
  • избегать частых пересозданий полигона на карте

Упрощение геометрии

Для снижения нагрузки на браузер применяется алгоритм упрощения линий (например, Douglas-Peucker). В HERE Maps API это частично уже оптимизировано, но дополнительная обработка может потребоваться при больших полигонах.


Интерактивное обновление изохрон

При перемещении точки центра можно динамически пересчитывать зоны:

map.addEventListener('tap', function (evt) {
  const coord = map.screenToGeo(
    evt.currentPointer.viewportX,
    evt.currentPointer.viewportY
  );

  updateIsochrone(coord.lat, coord.lng);
});

Обновление обычно включает:

  • удаление старых объектов карты
  • новый запрос к Routing API
  • повторное построение полигонов

Наложение изохрон на бизнес-данные

Изохроны часто комбинируются с POI-слоями:

  • магазины
  • больницы
  • транспортные узлы

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


Ошибки и диагностика

Типовые проблемы:

  • 401 Unauthorized — неверный API key
  • 429 Too Many Requests — превышение лимита запросов
  • пустая геометрия — отсутствие доступных маршрутов из точки
  • некорректные координаты — перепутаны lat/lng

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

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

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

Изохрона не является окружностью, даже при отсутствии препятствий. Её форма определяется графом дорог и может содержать:

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

Геометрически это множество достижимости на взвешенном графе, проецируемое на плоскость координат.