Отрицательные буферы

Turf.js предоставляет набор геопространственных операций над GeoJSON-геометриями, среди которых буферизация занимает ключевое место. Буферизация в геометрическом смысле означает построение новой области вокруг исходного объекта на заданном расстоянии. В стандартном сценарии это расширение полигона или линии, однако поддержка отрицательных значений дистанции переводит операцию в режим «сжатия» геометрии.

Операция буферизации реализуется через функцию turf.buffer. Входными данными служит GeoJSON-объект (точка, линия, полигон), а результатом — новый полигон, описывающий область на заданном расстоянии от исходной геометрии.

Базовая сигнатура:

turf.buffer(geojson, distance, { units })
  • geojson — исходная геометрия
  • distance — расстояние буфера
  • units — единицы измерения (meters, kilometers, degrees, miles и др.)

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

Отрицательные значения расстояния

Отрицательный буфер задаётся передачей отрицательного значения параметра distance:

import buffer from "@turf/buffer";

const polygon = {
  type: "Feature",
  geometry: {
    type: "Polygon",
    coordinates: [
      [
        [30, 10],
        [40, 10],
        [40, 20],
        [30, 20],
        [30, 10]
      ]
    ]
  }
};

const shrunken = buffer(polygon, -1, { units: "kilometers" });

Отрицательное значение интерпретируется как операция эрозии (geometric erosion): границы полигона смещаются внутрь на заданное расстояние.

При этом алгоритм фактически повторяет логику положительного буфера, но с инвертированным направлением смещения границ.

Геометрические последствия отрицательной буферизации

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

Уменьшение площади полигона

Каждая грань полигона смещается внутрь параллельно самой себе. В результате площадь уменьшается нелинейно, особенно у фигур с острыми углами.

Сглаживание углов

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

Возможное исчезновение геометрии

Если расстояние отрицательного буфера превышает минимальную «толщину» полигона, объект может полностью исчезнуть, возвращая null или пустую геометрию.

Разрыв многополигональных структур

Для MultiPolygon отдельные части могут исчезать независимо друг от друга, если их локальная ширина недостаточна.

Алгоритмическая основа

Внутри Turf.js буферизация основана на построении смещённых линий (offset curves) с последующим объединением результатов через операции объединения полигонов.

Процесс включает:

  1. Разбиение границ на сегменты
  2. Построение параллельных смещённых линий
  3. Соединение сегментов дугами на вершинах
  4. Построение итогового полигона через union/merge операций

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

Практическое использование отрицательных буферов

Очистка пограничных зон

Отрицательный буфер используется для удаления краевых эффектов в пространственных данных:

const cleanPolygon = buffer(rawPolygon, -0.5, { units: "kilometers" });

Такой подход позволяет устранить «шум» по границам административных или природных объектов.

Подготовка данных для анализа пересечений

При работе с пересечениями геометрий часто требуется исключить пограничные области:

const innerZone = buffer(zone, -2, { units: "kilometers" });

Это уменьшает вероятность ложных пересечений из-за неточностей координат.

Морфологическая эрозия в пространственном анализе

Отрицательная буферизация аналогична операции эрозии в растровой морфологии. Векторная реализация позволяет применять её к полигонам:

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

Поведение на сложных геометриях

Вогнутые полигоны

Вогнутые формы чувствительны к отрицательным буферам: внутренние области могут схлопываться раньше внешних границ.

Самопересечения

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

Многокольцевые полигоны

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

Единицы измерения и масштабирование

Корректность отрицательной буферизации зависит от выбранных единиц измерения:

  • meters и kilometers — наиболее точные для реальных координат
  • degrees — используется в плоских координатных системах, приводит к искажениям на больших масштабах
  • miles — эквивалент километровой логики, но с иной шкалой

При глобальных данных (широта/долгота) важно учитывать, что геодезическая модель приводит к неравномерному влиянию отрицательного буфера в разных широтах.

Численная стабильность

Отрицательная буферизация является более чувствительной к ошибкам вычислений, чем положительная:

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

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

buffer(buffer(buffer(polygon, -1), -1), -1)

возможна быстрая деградация геометрии вплоть до исчезновения объекта.

Взаимодействие с другими операциями Turf.js

intersection

Отрицательный буфер часто применяется перед вычислением пересечений для стабилизации результата:

const safeA = buffer(A, -0.2, { units: "kilometers" });
const safeB = buffer(B, -0.2, { units: "kilometers" });

const overlap = intersection(safeA, safeB);

difference

Используется для создания внутренних областей перед вычитанием:

const inner = buffer(polygon, -1, { units: "kilometers" });
const result = difference(polygon, inner);

simplify

В сочетании с упрощением геометрии отрицательная буферизация позволяет контролировать количество вершин до и после трансформации.

Особенности реализации и ограничения

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

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