Mapbox предоставляет набор геопространственных сервисов, среди которых Isochrone API занимает ключевую роль при решении задач анализа доступности территории. В связке с Mapbox GL JS этот инструмент позволяет визуализировать области достижимости на карте в реальном времени и интегрировать их в интерактивные веб-приложения.
Isochrone API представляет собой сервис построения изохрон — полигонов, ограничивающих области, до которых можно добраться из заданной точки за определённое время или при заданной дистанции с учётом дорожной сети, профиля передвижения и ограничений маршрутизации.
Основная идея Isochrone API заключается в графовом анализе дорожной сети. Географическое пространство интерпретируется как взвешенный граф, где:
Алгоритм выполняет обход графа от исходной точки с накоплением стоимости пути. После достижения заданного порога формируется множество достижимых точек, которое затем преобразуется в полигональную геометрию.
Ключевые параметры анализа:
Базовый HTTP-запрос формируется через REST-интерфейс:
https://api.mapbox.com/isochrone/v1/{profile}/{longitude},{latitude}
Где:
{profile} — режим передвижения (например, driving,
walking, cycling);{longitude},{latitude} — координаты точки
отправления.https://api.mapbox.com/isochrone/v1/mapbox/driving/69.5901,42.3417
?contours_minutes=5,10,15
&polygons=true
&access_token=YOUR_MAPBOX_ACCESS_TOKEN
contours_minutes — список временных интервалов;contours_meters — альтернативный режим по
расстоянию;polygons — возврат геометрии в виде полигонов;denoise — сглаживание результата;generalize — упрощение геометрии;access_token — ключ доступа.В Mapbox GL JS изохроны отображаются как GeoJSON-слои. Типичный поток работы включает:
fill на картуmap.on('load', async () => {
const response = await fetch(
'https://api.mapbox.com/isochrone/v1/mapbox/driving/69.5901,42.3417?contours_minutes=5,10,15&polygons=true&access_token=YOUR_MAPBOX_ACCESS_TOKEN'
);
const data = await response.json();
map.addSource('isochrone', {
type: 'geojson',
data: data
});
map.addLayer({
id: 'isochrone-fill',
type: 'fill',
source: 'isochrone',
paint: {
'fill-color': '#3b82f6',
'fill-opacity': 0.4
}
});
map.addLayer({
id: 'isochrone-outline',
type: 'line',
source: 'isochrone',
paint: {
'line-color': '#1d4ed8',
'line-width': 2
}
});
});
Isochrone API возвращает несколько контуров, каждый из которых соответствует отдельному временно́му порогу. Это позволяет строить вложенные области:
В Mapbox GL JS такие зоны обычно визуализируются через градиентную заливку:
'fill-color': [
'interpolate',
['linear'],
['get', 'contour'],
5, '#1e3a8a',
10, '#2563eb',
15, '#60a5fa'
]
Isochrone-геометрия часто применяется в пространственном анализе:
Isochrone API поддерживает несколько профилей:
driving — автомобильный транспортwalking — пешие маршрутыcycling — велосипедные маршрутыКаждый профиль использует отдельную дорожную модель и влияет на форму изохрон. Например:
При работе с большими наборами изохрон важно учитывать производительность:
Параметр generalize уменьшает количество вершин
полигона:
&generalize=50
Параметр denoise удаляет шумовые сегменты:
&denoise=0.3
Баланс между точностью и производительностью особенно важен при рендеринге на клиенте через Mapbox GL JS.
При работе с Isochrone API возникают типовые сценарии:
Возвращается ошибка геометрии при выходе за пределы допустимого диапазона.
Слишком большое количество значений contours_minutes
может привести к ограничению запроса.
Некорректный или истёкший access_token блокирует
выполнение запроса.
Слишком сложная геометрия может быть упрощена на стороне сервера.
Isochrone API часто используется вместе с:
Типичный сценарий:
После получения полигона часто выполняется пространственная проверка попадания объектов внутрь области:
import * as turf from '@turf/turf';
const point = turf.point([69.5901, 42.3417]);
const inside = turf.booleanPointInPolygon(point, isochroneFeature);
Такой подход позволяет выполнять серверо-независимую аналитику прямо в браузере.
В интерактивных приложениях изохроны часто обновляются при перемещении маркера:
map.on('click', async (e) => {
const { lng, lat } = e.lngLat;
const res = await fetch(
`https://api.mapbox.com/isochrone/v1/mapbox/driving/${lng},${lat}?contours_minutes=10&polygons=true&access_token=YOUR_MAPBOX_ACCESS_TOKEN`
);
const geojson = await res.json();
map.getSource('isochrone').setData(geojson);
});
Такой подход используется в сервисах поиска доступных объектов в радиусе времени, а не расстояния.
Изохроны не являются геометрически симметричными окружностями. Их форма определяется:
Поэтому визуально одна и та же точка может давать радикально разные области достижимости в зависимости от выбранного профиля и параметров запроса.