Центроид геометрического объекта в пространстве координат WGS84 представляет собой точку, которая может интерпретироваться как «центр масс» фигуры при равномерном распределении площади или вершин. В контексте геопространственных вычислений эта точка используется для упрощённого представления сложных геометрий, визуализации, кластеризации, анализа распределения объектов и построения пространственных индексов.
В библиотеке Turf.js вычисление центроида реализуется через функции
centroid, center, а также дополнительные
инструменты, связанные с агрегацией и геометрической нормализацией.
Несмотря на внешнюю схожесть, эти функции решают разные задачи и дают
разные результаты в зависимости от структуры входных данных.
Центроид полигона — это точка, координаты которой представляют собой усреднённое положение всех точек фигуры с учётом её геометрии. В простейшем случае для равномерной двумерной фигуры можно рассматривать центроид как:
Для сложных полигонов с отверстиями и самопересечениями вычисление становится более строгим: используется формула площадного интегрирования (аналог формулы «площади Гаусса»).
Turf.js работает в системе WGS84, где координаты представлены широтой и долготой. Это создаёт важное ограничение:
Поэтому Turf.js применяет сферические приближения или проекционные преобразования внутри алгоритмов центроида.
Функция centroid вычисляет геометрический центр объекта
с учётом его формы.
import centroid from '@turf/centroid';
const polygon = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[30.0, 10.0],
[40.0, 40.0],
[20.0, 40.0],
[10.0, 20.0],
[30.0, 10.0]
]]
}
};
const result = centroid(polygon);
console.log(result.geometry.coordinates);
Функция корректно обрабатывает:
PolygonMultiPolygonLineStringMultiLineStringFeatureCollectionПри работе с коллекциями объектов вычисляется объединённый центроид всей совокупности геометрий.
Функция center вычисляет геометрический центр
ограничивающего прямоугольника (bounding box), а не истинный
центроид.
import center from '@turf/center';
const feature = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[0, 0],
[10, 0],
[10, 10],
[0, 10],
[0, 0]
]]
}
};
const result = center(feature);
console.log(result.geometry.coordinates);
Различие принципиально:
centroid учитывает форму объекта;center учитывает только крайние координаты.Внутренний алгоритм основан на декомпозиции геометрии на простые многоугольники и вычислении взвешенного центра масс.
Для полигона используется классическая формула:
[ 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)]
где (A) — площадь многоугольника.
В случае MultiPolygon:
Для LineString центроид вычисляется как среднее
взвешенное по длине сегментов.
Для набора точек используется простое усреднение координат:
[ C_x = x_i, C_y = y_i]
При этом:
При передаче коллекции объектов применяется агрегация:
Пример:
import centroid from '@turf/centroid';
const collection = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[[0, 0], [2, 0], [2, 2], [0, 2], [0, 0]]]
}
},
{
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[[5, 5], [7, 5], [7, 7], [5, 7], [5, 5]]]
}
}
]
};
const result = centroid(collection);
Итоговая точка будет расположена ближе к объекту с большей площадью.
При вычислении центроида в географических координатах возникают следующие особенности:
Искажение площади
Анти-пересечение границ
Самопересекающиеся полигоны
Центроид используется для размещения подписи объекта:
const labelPoint = centroid(cityPolygon);
При группировке объектов центроид служит центром кластера:
Для административных границ:
центроид применяется как «представительная точка».
| Функция | Основа вычисления | Результат |
|---|---|---|
| centroid | геометрия фигуры | истинный центр массы |
| center | bounding box | центр ограничивающего прямоугольника |
Использование center оправдано при:
centroid применяется при:
Для MultiPolygon с вложенными областями алгоритм
учитывает:
Отрицательные области (holes) уменьшают итоговую площадь и влияют на смещение центра.
Время вычисления центроида зависит от:
Оптимизации Turf.js включают:
center вместо centroid при
аналитике;В аналитике центроид используется как:
В задачах машинного обучения на геоданных центроид часто выступает как: