Все вычисления в Turf.js опираются на стандарт GeoJSON, в котором координаты заданы в градусах долготы и широты (WGS84). Это фундаментальное ограничение определяет характер работы с единицами измерения: исходные данные находятся в угловой системе координат, а большинство пространственных операций требует перехода к линейным или площадным единицам.
Ключевая особенность заключается в том, что:
Таким образом, единицы измерения в Turf.js являются не просто параметром функций, а частью модели преобразования между сферической и линейной геометрией.
В большинстве функций, связанных с расстояниями и длинами,
используется параметр units. Он определяет интерпретацию
входных и выходных значений.
Основные единицы расстояния:
meters — метрыkilometers — километрыmiles — милиdegrees — градусы (угловое расстояние на сфере)radians — радианыЭти единицы применяются в функциях:
Если расстояние передаётся как 10, его смысл зависит от
выбранной единицы:
10 kilometers → 10 км геодезического расстояния10 miles → 10 миль10 degrees → 10° дуги большого кругаФункции расстояний в Turf.js, такие как вычисление дистанции между точками, используют геодезические формулы (например, формулу гаверсинусов или более точные модели в зависимости от версии).
Это означает:
Ключевой момент: одни и те же координаты могут давать одинаковый результат в километрах независимо от визуального представления на карте.
Для преобразования величин используется модуль
@turf/helpers, включающий функции конвертации.
Основные операции:
Поддерживаются преобразования между всеми основными линейными единицами:
Логика работы основана на приведении всех значений к базовой единице (обычно метрам), после чего выполняется пересчёт в целевую систему.
Площадные единицы включают:
square meters (квадратные метры)square kilometers (квадратные километры)acres (акры)hectares (гектары)square miles (квадратные мили)Площадные вычисления выполняются с учётом сферической поверхности, что особенно важно при больших полигонах.
Функция буфера (buffer) является одной из наиболее
чувствительных к системе единиц.
При построении буфера вокруг геометрии:
unitsОсобенность заключается в том, что:
degrees создаёт угловую зону, которая может
искажаться при визуализацииkilometers или meters
соответствует реальному геодезическому расстояниюПри создании окружностей через функции вроде circle
радиус также зависит от единиц измерения.
Параметры:
radius — числовое значениеunits — интерпретация радиусаПример логики:
radius = 5, units = kilometers → окружность радиусом 5
кмradius = 5, units = miles → окружность радиусом 5
мильПри этом окружность строится как многоугольная аппроксимация геодезической кривой.
Функция измерения длины линии использует те же принципы:
Особенности:
Единицы degrees и radians здесь отражают
угловую длину, а не физическое расстояние.
Площадь в Turf.js всегда вычисляется с учётом сферической модели поверхности.
Основные моменты:
На практике:
Turf.js использует подход нормализации:
Такой подход обеспечивает единообразие поведения всех функций, независимо от выбранных единиц.
Использование degrees как единицы расстояния требует
отдельного понимания:
Поэтому:
degrees не является стабильной линейной единицейНекорректное использование единиц приводит к типовым проблемам:
Типичная ошибка возникает при построении пайплайна:
distance → buffer → areaЕсли единицы не унифицированы, итоговые результаты становятся несопоставимыми.
Turf.js часто используется в виде цепочек геопространственных операций:
В таких цепочках единицы измерения выступают как связующий слой, обеспечивающий согласованность вычислений.
Ключевой принцип:
unitsВыбор системы единиц определяется характером задачи:
Точность зависит не только от алгоритма, но и от выбранной системы измерения:
Особенно заметно это при:
Хотя Turf.js не является графической библиотекой, результаты часто отображаются на картах (Leaflet, Mapbox GL и др.).
В этом контексте: