Центр полигона в геопространственных задачах не является единственной
строго определённой точкой. В зависимости от математической модели и
целей анализа используются разные определения:
- Центроид (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.
Алгоритм:
- вычисляется
minX, minY, maxX, maxY;
- берётся середина диагонали.
[ 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.
Каждый метод даёт собственное представление о «центре», и выбор
зависит от модели данных, а не от единственно правильного
математического ответа.