Периметр в геоинформационных системах определяется как длина замкнутой линии, ограничивающей геометрический объект на поверхности Земли. В контексте GeoJSON-структур это чаще всего относится к полигонам и мультиполигонам, а также к замкнутым линиям, если они интерпретируются как контуры.
В классической евклидовой геометрии периметр вычисляется как сумма длин всех сторон фигуры. В геопространственной модели добавляется существенный фактор — кривизна Земли. Поэтому расчёты выполняются по геодезическим формулам, а не по плоской проекции, если библиотека ориентирована на реальные координаты широты и долготы.
Turf.js реализует геодезические вычисления, опираясь на модель Земли WGS84, что делает результаты пригодными для прикладных задач картографии, логистики и пространственного анализа.
Turf.js работает с объектами формата GeoJSON. Основные типы:
Point — точка с координатами
[lng, lat]LineString — линия, состоящая из последовательности
точекPolygon — полигон с внешним контуром и внутренними
кольцами (дырами)MultiPolygon — набор полигоновПериметр в контексте Turf.js обычно связан с:
Основным инструментом измерения расстояний и периметров линейных объектов выступает функция:
turf.length(line, options)Она вычисляет длину LineString или MultiLineString в выбранных единицах измерения.
kilometers)meters)miles)feet)Функция проходит по всем сегментам линии и суммирует геодезические расстояния между последовательными точками.
Формально:
d(P₁,P₂) + d(P₂,P₃) + … + d(Pₙ₋₁,Pₙ)
где d — расстояние по поверхности Земли.
Если объект представлен как замкнутая линия, периметр вычисляется напрямую через длину:
import length from '@turf/length';
const ring = {
type: "Feature",
geometry: {
type: "LineString",
coordinates: [
[30.5, 50.4],
[30.6, 50.4],
[30.6, 50.5],
[30.5, 50.5],
[30.5, 50.4]
]
}
};
const perimeter = length(ring, { units: "kilometers" });
Замыкание линии критично: последняя точка должна совпадать с первой, иначе результат будет соответствовать открытой ломаной, а не периметру.
Полигон в GeoJSON задаётся как массив колец:
Структура:
{
type: "Polygon",
coordinates: [
[ /* внешний контур */ ],
[ /* дыра 1 */ ],
[ /* дыра 2 */ ]
]
}
Периметр полигона в Turf.js определяется как сумма длин всех его колец:
Turf.js не всегда предоставляет отдельную функцию
perimeter, поэтому используется комбинация операций:
import length from '@turf/length';
const polygon = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [
[
[30.0, 50.0],
[31.0, 50.0],
[31.0, 51.0],
[30.0, 51.0],
[30.0, 50.0]
]
]
}
};
function polygonPerimeter(poly) {
let total = 0;
for (const ring of poly.geometry.coordinates) {
const line = {
type: "Feature",
geometry: {
type: "LineString",
coordinates: ring
}
};
total += length(line, { units: "kilometers" });
}
return total;
}
Turf.js использует сферическую модель для расчётов расстояний между точками, применяя формулы большого круга. Это принципиально отличает его от простых вычислений в декартовой системе координат.
Основные последствия:
При работе в проекционных координатах (например, UTM) возможны альтернативные подходы:
Однако Turf.js ориентирован на входные данные в WGS84, поэтому проекционные сценарии требуют предварительного преобразования координат.
MultiPolygon представляет собой массив независимых полигонов. Периметр вычисляется как сумма периметров всех элементов:
function multiPolygonPerimeter(multiPoly) {
let total = 0;
for (const polygon of multiPoly.geometry.coordinates) {
for (const ring of polygon) {
const line = {
type: "Feature",
geometry: {
type: "LineString",
coordinates: ring
}
};
total += length(line, { units: "kilometers" });
}
}
return total;
}
Внутренние кольца (holes) также участвуют в периметре, поскольку представляют реальные границы объектов внутри внешнего полигона.
Примеры:
Каждое внутреннее кольцо интерпретируется как отдельный замкнутый контур.
Некорректные данные приводят к искажению периметра:
Особенно критична ошибка порядка координат, так как Turf.js ожидает
формат [longitude, latitude].
Перед вычислением периметра часто выполняется подготовка данных:
Выбор единиц измерения влияет на интерпретацию результата:
Пример настройки:
length(line, { units: "meters" });
Точность вычислений зависит от:
Turf.js использует приближение Земли как сферы, что достаточно точно для большинства прикладных задач, но уступает эллипсоидальным моделям в высокоточных геодезических расчётах.
При работе с большими наборами данных применяются подходы:
simplifyПериметр часто используется как базовая метрика для:
В геопространственной аналитике он является одной из фундаментальных характеристик геометрии наряду с площадью и центроидом.