Библиотека Turf.js опирается на упрощённую, но практичную модель Земли — сферу, на поверхности которой выполняются геометрические вычисления. В реальности Земля представляет собой геоид, однако для большинства задач веб-картографии используется система координат WGS84 и сферические приближения.
Ключевая система, с которой работает Turf.js, — WGS84 (EPSG:4326). Она задаёт географические координаты в виде:
Важно: порядок координат строго фиксирован:
[longitude, latitude]
Любое отклонение от этого порядка приводит к некорректным результатам вычислений, так как алгоритмы расстояний и геометрии интерпретируют значения строго по индексу массива.
Turf.js работает поверх стандарта GeoJSON, в котором координаты задаются в географической системе без проекционного преобразования.
Пример точки:
{
"type": "Point",
"coordinates": [76.9457, 43.2389]
}
Пример полигона:
{
"type": "Polygon",
"coordinates": [
[
[76.9, 43.2],
[77.0, 43.2],
[77.0, 43.3],
[76.9, 43.3],
[76.9, 43.2]
]
]
}
Turf.js не изменяет систему координат и не выполняет автоматическую проекцию данных. Это принципиальная особенность, влияющая на все геометрические операции.
В отличие от классической евклидовой геометрии, Turf.js использует сферические формулы для вычислений расстояний, площадей и направлений.
Расстояние между двумя точками вычисляется по формуле большого круга. Внутренне используется модифицированная версия формулы гаверсинусов.
Сферическая модель означает:
Turf.js не выполняет преобразование между проекциями (например, из EPSG:3857 в EPSG:4326). Это означает:
На практике большинство веб-карт используют Web Mercator (EPSG:3857). Эта проекция удобна для тайловых карт, но искажает:
Искажение возрастает по мере удаления от экватора.
Turf.js не компенсирует эти искажения, поскольку вычисления выполняются в географической системе координат.
При работе с данными из различных источников часто возникает необходимость конвертации систем координат. Для этого используются сторонние библиотеки, такие как proj4.
Типичный сценарий:
Ошибки на этапе преобразования приводят к некорректной геометрии:
Любое значение вне этих диапазонов требует нормализации.
Особое внимание требуется при работе с долготой около ±180°. При пересечении линии смены дат возникают проблемы:
Turf.js предоставляет инструменты для нормализации геометрии, но логика обработки границ остаётся задачей разработчика.
Bounding box в Turf.js задаётся в формате:
[minLongitude, minLatitude, maxLongitude, maxLatitude]
Эта структура напрямую связана с географической системой координат.
Пример:
const bbox = [76.8, 43.1, 77.2, 43.4];
Bounding box используется как базовая структура для:
Поскольку вычисления выполняются на сфере, масштаб объектов не является линейным в картографическом смысле.
Последствия:
При построении линий между точками Turf.js использует геодезическую интерполяцию.
Это означает:
Для задач маршрутизации или визуализации дуг это принципиально важное поведение.
Расстояния в Turf.js всегда интерпретируются как:
в зависимости от указанных параметров.
Однако базовая геометрия остаётся сферической.
Особенности:
Turf.js часто используется вместе с визуальными библиотеками карт:
В таких связках возникает разделение ответственности:
Это требует строгого контроля за преобразованием координат перед передачей данных между слоями системы.
Самая частая ошибка:
[latitude, longitude] // неправильно
вместо:
[longitude, latitude]
Результат — геометрические артефакты и некорректные вычисления.
Применение Turf.js как плоской геометрической библиотеки приводит к:
Для корректной работы всех алгоритмов Turf.js необходимо соблюдение условий:
Полигон считается валидным только при:
Работа в глобальной системе координат накладывает ограничения на интерпретацию геометрии:
Turf.js учитывает эти особенности в математических моделях, но не в визуальном представлении.
Сферические вычисления сложнее плоских:
Поэтому структура координат напрямую влияет на эффективность обработки геоданных.
Результаты операций Turf.js всегда возвращаются в той же системе координат, в которой были заданы входные данные.
Это означает: