Расчет центра полигона

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

  • Центроид (centroid) — геометрический центр площади, основанный на распределении координат вершин.
  • Центр масс (center of mass) — точка, учитывающая форму и площадь, особенно важна для сложных или самопересекающихся полигонов.
  • Центр ограничивающего прямоугольника (bbox center) — середина bounding box, вычисляемая быстро, но грубо.
  • Геометрический центр (center) — упрощённая версия центра, часто основанная на усреднении координат.

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


Основные методы расчёта центра в Turf.js

Библиотека Turf.js предоставляет несколько функций, каждая из которых соответствует разной математической модели:

turf.center — быстрый геометрический центр

Функция turf.center вычисляет простое среднее положение координат всех вершин полигона.

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

  • работает быстро;
  • не учитывает площадь;
  • чувствительна к форме и плотности вершин;
  • подходит для визуальных задач.
import { center } from "@turf/turf";

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

const result = center(polygon);

turf.centroid — классический геометрический центр площади

centroid вычисляет центр тяжести двумерной фигуры, используя формулу площади многоугольника.

Для простого полигона используется классическая формула Гаусса (shoelace formula):

[ A = {i=1}^{n} (x_i y{i+1} - x_{i+1} y_i)]

Координаты центроида:

[ C_x = (x_i + x_{i+1})(x_i y_{i+1} - x_{i+1} y_i)]

[ C_y = (y_i + y_{i+1})(x_i y_{i+1} - x_{i+1} y_i)]

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

  • учитывает площадь полигона;
  • корректно работает с выпуклыми и невыпуклыми формами;
  • не учитывает распределение плотности (географические веса).
import { centroid } from "@turf/turf";

const c = centroid(polygon);

turf.centerOfMass — центр масс с учётом геометрии

centerOfMass является более устойчивой версией центроида и лучше работает с:

  • сложными полигонами;
  • самопересекающимися геометриями;
  • неоднородными формами.

Алгоритм приближается к физическому понятию центра масс плоской фигуры.

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

  • более точен для сложных геометрий;
  • устойчив к аномалиям формы;
  • предпочтителен в аналитической геоинформатике.
import { centerOfMass } from "@turf/turf";

const com = centerOfMass(polygon);

turf.bboxCenter — центр ограничивающего прямоугольника

Метод bboxCenter не анализирует форму полигона, а работает только с его bounding box.

Алгоритм:

  1. вычисляется minX, minY, maxX, maxY;
  2. берётся середина диагонали.

[ C_x = , C_y = ]

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

  • максимальная производительность;
  • игнорирует геометрию объекта;
  • подходит для картографического выравнивания.
import { bboxCenter } from "@turf/turf";

const centerPoint = bboxCenter(polygon);

Сравнение методов

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

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

Производительность

  • bboxCenter — самый быстрый
  • center — быстрый
  • centroid — средняя сложность
  • centerOfMass — наиболее вычислительно тяжёлый

Особенности работы с координатами GeoJSON

В Turf.js все операции выполняются в формате GeoJSON, где координаты задаются в порядке:

[долгота, широта]

Это критически важно при расчётах центра, так как:

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

Влияние формы полигона на результат

Разные алгоритмы по-разному реагируют на геометрию:

Выпуклый полигон

Все методы дают близкие результаты, расхождения минимальны.

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

  • centroid смещается внутрь формы;
  • center может оказаться вне полигона;
  • centerOfMass остаётся наиболее стабильным.

Самопересекающийся полигон

  • centroid может быть математически некорректным;
  • centerOfMass использует более устойчивую модель;
  • bboxCenter остаётся неизменным.

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

Визуализация на карте

Используется center или bboxCenter:

  • быстрый рендер;
  • не требуется высокая точность.

Аналитика территорий

Используется centroid:

  • расчёт географических центров;
  • статистическая обработка.

Геоинформационные системы

Используется centerOfMass:

  • анализ административных границ;
  • работа с природными объектами;
  • корректная агрегация сложных форм.

Обработка мультиполигонов

В случае MultiPolygon поведение методов различается:

  • centroid агрегирует все части;
  • centerOfMass учитывает распределение площадей;
  • center усредняет все вершины;
  • bboxCenter работает по общей рамке.

Это приводит к существенным различиям, если части объекта разнесены пространственно.


Типичные ошибки при вычислении центра

Игнорирование порядка координат

GeoJSON использует [lon, lat], и обратный порядок искажает результат.

Использование bboxCenter для аналитики

Этот метод подходит только для грубых вычислений.

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

Усреднение вершин может давать точку вне объекта.

Отсутствие учета проекций

В географических координатах (WGS84) площадь и центр искажаются на больших расстояниях.


Внутренние особенности реализации Turf.js

В Turf.js вычисления центра основаны на:

  • итерации по координатным кольцам;
  • разбиении полигона на треугольники;
  • использовании ориентированной площади;
  • нормализации координат при MultiPolygon.

Для повышения стабильности применяется защита от:

  • нулевой площади;
  • вырожденных полигонов;
  • повторяющихся точек.

Геометрическая интерпретация результата

Полученные точки центра могут интерпретироваться по-разному:

  • как точка баланса формы;
  • как ориентир для label placement;
  • как центр геозоны;
  • как входная точка для spatial clustering.

Каждый метод даёт собственное представление о «центре», и выбор зависит от модели данных, а не от единственно правильного математического ответа.