Единицы измерения в Turf.js

Геометрическая основа и координатная система

Все вычисления в 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 миль

При этом окружность строится как многоугольная аппроксимация геодезической кривой.


Линейные измерения и длина геометрий

Функция измерения длины линии использует те же принципы:

  • вход: LineString или MultiLineString
  • выход: длина в заданных единицах

Особенности:

  • каждая сегментная дуга интерпретируется как геодезическая линия
  • итоговая длина суммирует все сегменты с учётом кривизны Земли

Единицы degrees и radians здесь отражают угловую длину, а не физическое расстояние.


Площадные вычисления и их интерпретация

Площадь в Turf.js всегда вычисляется с учётом сферической модели поверхности.

Основные моменты:

  • координаты полигона интерпретируются на сфере
  • результат затем переводится в выбранные единицы площади
  • возможны небольшие расхождения с планарной геометрией при локальных проекциях

На практике:

  • малые полигоны (городские участки) почти не отличаются от плоской модели
  • крупные полигоны (страны, континенты) требуют сферического расчёта

Внутренняя модель нормализации единиц

Turf.js использует подход нормализации:

  1. входное значение переводится в базовую единицу (метры или квадратные метры)
  2. выполняется геометрическое вычисление
  3. результат конвертируется в требуемую систему

Такой подход обеспечивает единообразие поведения всех функций, независимо от выбранных единиц.


Особенности работы с градусами как единицей

Использование degrees как единицы расстояния требует отдельного понимания:

  • 1 градус ≈ 111 км на поверхности Земли (приближённо)
  • значение зависит от широты
  • на полюсах и экваторе масштаб различается

Поэтому:

  • degrees не является стабильной линейной единицей
  • используется в основном для вспомогательных вычислений или низкоуровневой геометрии

Ошибки и неоднозначности при выборе единиц

Некорректное использование единиц приводит к типовым проблемам:

  • смешивание километров и метров без явной конвертации
  • интерпретация градусов как линейного расстояния
  • использование площадных единиц в линейных функциях
  • несогласованность параметров между функциями цепочки обработки

Типичная ошибка возникает при построении пайплайна:

  • distance → buffer → area

Если единицы не унифицированы, итоговые результаты становятся несопоставимыми.


Роль единиц в композиции функций

Turf.js часто используется в виде цепочек геопространственных операций:

  • измерение расстояния
  • создание буфера
  • пересечение геометрий
  • вычисление площади результата

В таких цепочках единицы измерения выступают как связующий слой, обеспечивающий согласованность вычислений.

Ключевой принцип:

  • каждая функция может иметь собственный units
  • но логика приложения должна обеспечивать их согласованность

Практическая модель выбора единиц

Выбор системы единиц определяется характером задачи:

  • метры — локальные вычисления высокой точности
  • километры — региональные и навигационные задачи
  • мили — совместимость с англосаксонскими источниками данных
  • градусы — низкоуровневая геометрия и вспомогательные расчёты
  • радианы — математические модели и тригонометрические преобразования

Влияние единиц на точность вычислений

Точность зависит не только от алгоритма, но и от выбранной системы измерения:

  • меньшие единицы (метры) дают более детализированный результат
  • крупные единицы (километры, мили) сглаживают погрешности
  • угловые единицы (градусы) усиливают нелинейные искажения

Особенно заметно это при:

  • больших расстояниях между точками
  • сложных полигонах с высокой плотностью вершин
  • операциях буферизации и пересечения

Связь единиц с визуализацией данных

Хотя Turf.js не является графической библиотекой, результаты часто отображаются на картах (Leaflet, Mapbox GL и др.).

В этом контексте:

  • единицы влияют на масштаб визуальных объектов
  • ошибки конверсии приводят к некорректной геометрии на карте
  • единая система измерений критична для согласованного рендеринга слоёв данных