В геопространственных данных вложенность объектов означает топологическое отношение, при котором одна геометрия полностью содержится внутри другой. На практике это задачи вида: находится ли точка внутри полигона, лежит ли один полигон внутри другого, содержит ли мультиполигон набор вложенных областей, корректно ли интерпретируются внутренние «дыры» (holes) в полигонах.
В Turf.js такие проверки реализованы через набор булевых пространственных функций, основанных на вычислительной геометрии: алгоритмах лучевого пересечения, анализа рёбер полигона и проверки ориентации контуров.
Вложенность в геометрическом смысле определяется через три базовых отношения:
Эти отношения формируют основу анализа геометрических структур, включая иерархии объектов: точка → линия → полигон → мультиполигон.
Классическая задача вложенности — определение принадлежности точки полигону.
В Turf.js используется функция:
booleanPointInPolygonПринцип работы основан на алгоритме лучевого пересечения: из точки проводится воображаемый луч, и считается количество пересечений с рёбрами полигона. Чётное число пересечений означает, что точка снаружи, нечётное — внутри.
import booleanPointInPolygon from "@turf/boolean-point-in-polygon";
const point = {
type: "Feature",
geometry: {
type: "Point",
coordinates: [71.4304, 51.1281]
}
};
const polygon = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[71.0, 51.0],
[72.0, 51.0],
[72.0, 52.0],
[71.0, 52.0],
[71.0, 51.0]
]]
}
};
const inside = booleanPointInPolygon(point, polygon);
Для анализа вложенности объектов более высокого уровня используются функции:
booleanWithin — проверяет, находится ли один объект
внутри другогоbooleanContains — проверяет, содержит ли объект
другойЭти функции применимы к комбинациям:
import booleanWithin from "@turf/boolean-within";
import booleanContains from "@turf/boolean-contains";
Внутренне проверки опираются на комбинацию:
Для полигонов вложенность определяется не только фактом отсутствия пересечений, но и положением всех вершин внутреннего полигона относительно внешнего.
Условие строгой вложенности:
При несоблюдении хотя бы одного условия результат считается ложным.
Мультиполигон представляет собой набор независимых полигонов, которые могут:
При анализе вложенности мультиполигонов используется итеративная проверка каждого компонента:
Полигон в GeoJSON может содержать:
В Turf.js внутренние кольца интерпретируются как области исключения.
Структура полигона:
{
type: "Polygon",
coordinates: [
[ /* внешний контур */ ],
[ /* hole 1 */ ],
[ /* hole 2 */ ]
]
}
Алгоритм вложенности учитывает:
Таким образом, точка может находиться внутри bounding polygon, но не принадлежать реальной области из-за hole.
Перед точными вычислениями Turf.js использует ограничивающие прямоугольники:
Если bounding box не пересекаются, дальнейшая проверка вложенности не выполняется.
Для сложных сцен (например, кадастровые данные или административные границы) применяется каскадная проверка:
import booleanContains from "@turf/boolean-contains";
const outer = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[70, 50],
[75, 50],
[75, 55],
[70, 55],
[70, 50]
]]
}
};
const inner = {
type: "Feature",
geometry: {
type: "Polygon",
coordinates: [[
[71, 51],
[74, 51],
[74, 54],
[71, 54],
[71, 51]
]]
}
};
const result = booleanContains(outer, inner);
Вложенность считается нарушенной при следующих сценариях:
Для таких случаев используется:
booleanIntersectsbooleanDisjointВ Turf.js пространственные отношения образуют логическую систему:
Эта иерархия используется при построении пространственных индексов и фильтрации объектов в GIS-системах.
При обработке реальных данных вложенность редко является бинарной характеристикой. Чаще она интерпретируется как:
В Turf.js это отражается в комбинировании функций проверки и предварительных фильтров, обеспечивающих устойчивость к неточностям координат и сложным геометрическим конфигурациям.