Изохроны представляют собой геометрические области, ограничивающие зоны одинакового времени доступности от заданной точки. В контексте картографических сервисов это полигон, внутри которого все точки достижимы за одинаковое или меньшее время при заданных условиях маршрутизации.
В экосистеме HERE Technologies построение изохрон реализуется через Routing API и визуализируется с помощью HERE Maps API for JavaScript. Подход основан на вычислении множества маршрутов с последующей агрегацией точек достижимости в полигональные границы.
Изохрона формируется как результат решения задачи обратной изохронной маршрутизации:
Формально область доступности можно представить как:
(T)={p ^2 t(P_0, p) T}
где ( t(P_0, p) ) — функция времени маршрута от исходной точки до произвольной координаты.
В практической реализации функция времени зависит от:
В 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-подобную структуру с полигонами изохрон.
Визуализация выполняется через библиотеку 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);
Получение геометрии зон доступности:
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);
});
}
При добавлении нескольких уровней времени важно учитывать порядок от меньшей зоны к большей, чтобы корректно накладывать прозрачность.
Использование нескольких значений времени позволяет строить концентрические области доступности:
Каждый слой можно стилизовать отдельно:
Пример логики стилизации:
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 — применяет ограничения по грузовому
транспортуИзменение режима влияет на форму полигона: автомобильные изохроны обычно вытянуты вдоль магистралей, пешеходные — более компактны и радиальны.
При работе с изохронами возникают вычислительные и сетевые ограничения:
Рекомендуемые практики:
Для снижения нагрузки на браузер применяется алгоритм упрощения линий (например, 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);
});
Обновление обычно включает:
Изохроны часто комбинируются с POI-слоями:
Это позволяет анализировать доступность инфраструктуры внутри зоны времени. Геопространственные запросы выполняются отдельно, а затем фильтруются по попаданию в полигон.
Типовые проблемы:
401 Unauthorized — неверный API key429 Too Many Requests — превышение лимита запросовДля диагностики полезно логировать:
Изохрона не является окружностью, даже при отсутствии препятствий. Её форма определяется графом дорог и может содержать:
Геометрически это множество достижимости на взвешенном графе, проецируемое на плоскость координат.