Изохрона в пространственной аналитике — это область, ограничивающая все точки, достижимые из заданной стартовой позиции за фиксированное время при заданных ограничениях передвижения. В веб-картографии изохроны используются для оценки доступности инфраструктуры: транспорт, пешеходные маршруты, велосипедные сети, автомобильные дороги.
При использовании Turf.js изохроны строятся не как готовая функция уровня «одной команды», а как композиция геометрических операций: дискретизация пространства, расчет расстояний, фильтрация точек по условию достижимости и построение изолиний или выпуклой/вогнутой оболочки.
Ключевая идея: изохрона — это не окружность в евклидовом смысле, а множество точек, удовлетворяющих условию:
При построении изохрон используются следующие операции:
В Turf.js ключевыми функциями являются:
turf.distance — вычисление геодезического
расстоянияturf.booleanPointInPolygon — проверка принадлежности
точкиturf.circle — приближённая радиальная областьturf.concave / turf.convex — построение
оболочекturf.envelope — ограничивающий прямоугольникturf.squareGrid / turf.hexGrid — генерация
сеткиЕсли движение моделируется равномерной скоростью v, то
время до точки выражается как:
t =
где:
t — время достиженияd — расстояние по поверхности Землиv — скорость перемещенияТогда условие изохроны:
d v T
Это превращает задачу из временной в геометрическую: построение
множества точек, удалённых не дальше чем на v·T.
Самая базовая модель изохроны в Turf.js строится через радиус:
import { point, circle } from "@turf/turf";
const center = point([71.4304, 51.1281]); // координаты
const radius = 5; // километры
const isochrone = circle(center, radius, {
steps: 128,
units: "kilometers"
});
Этот подход эквивалентен предположению:
Преимущество — вычислительная простота. Недостаток — отсутствие реализма.
Более точная модель строится через дискретизацию пространства.
import { bbox, squareGrid } from "@turf/turf";
const bounds = [70.5, 50.8, 72.2, 51.5];
const grid = squareGrid(bounds, 1, { units: "kilometers" });
Каждая ячейка сетки становится кандидатом в изохрону.
import { distance, point } from "@turf/turf";
const start = point([71.4304, 51.1281]);
const speed = 5; // км/ч
const timeLimit = 0.5; // часы
const maxDistance = speed * timeLimit;
const reachable = grid.features.filter(cell => {
const d = distance(start, cell, { units: "kilometers" });
return d <= maxDistance;
});
import { concave } from "@turf/turf";
const isochrone = concave({
type: "FeatureCollection",
features: reachable
}, {
maxEdge: maxDistance
});
Так формируется приближённая изохрона с неровными границами.
Часто требуется построение нескольких зон доступности: 5, 10, 15 минут.
Математически это набор вложенных множеств:
I_1 I_2 I_3 T_1 < T_2 < T_3
В Turf.js это реализуется повторным применением фильтрации:
const times = [5, 10, 15]; // минуты
const bands = times.map(t => {
const maxDist = speed * (t / 60);
const points = grid.features.filter(cell =>
distance(start, cell, { units: "kilometers" }) <= maxDist
);
return concave({
type: "FeatureCollection",
features: points
});
});
Реальные изохроны требуют учета:
В этом случае каждому ребру или ячейке присваивается вес.
Алгоритмически задача превращается в поиск кратчайших путей (Dijkstra / A*), а Turf.js используется как геометрический слой для визуализации результата.
Типовая архитектура:
Псевдологика:
for (node of graph) {
node.time = dijkstra(start, node);
}
Далее узлы группируются по диапазонам времени и преобразуются в полигоны через:
При наличии набора точек с значением времени используется построение изолиний.
Общий принцип:
В Turf.js это приближается через комбинацию:
turf.triangulateturf.isobands (в расширенных сборках)При построении изохрон ключевые узкие места:
Оптимизации:
При использовании Turf.js для изохрон важно учитывать:
Следовательно, Turf.js подходит для:
Но не заменяет полноценные routing-системы.
Практическая система обычно строится так:
routing engine (OSRM / GraphHopper)
генерация точек доступности
Turf.js:
Роль Turf.js — геометрический слой, а не транспортный движок.
Для устранения «ступенчатости» сетки применяются:
Алгоритмически:
Изохроны обычно представляются как:
В WebGIS их используют для: