Работа с геопространственными данными в Turf.js строится вокруг GeoJSON-структур, которые могут содержать различные типы объектов: точки, линии, полигоны и их коллекции. Для обработки таких структур на уровне отдельных элементов библиотека предоставляет набор функций итерации, позволяющих последовательно применять операции к каждому объекту, координате или набору свойств без необходимости вручную разбирать структуру GeoJSON.
Ключевой принцип таких функций заключается в абстрагировании внутренней структуры данных. Вместо того чтобы напрямую обходить вложенные массивы координат, используется единый интерфейс обхода, который обеспечивает предсказуемость и безопасность трансформаций.
featureEachФункция featureEach предназначена для последовательного
обхода всех объектов Feature внутри
FeatureCollection. Она не зависит от типа геометрии и
рассматривает каждый элемент как отдельную сущность.
Сигнатура:
turf.featureEach(geojson, callback)
Поведение:
falseПример логики обработки:
turf.featureEach(collection, (feature, index) => {
console.log(feature.geometry.type, index);
});
Особенности:
coordEachФункция coordEach предоставляет доступ к каждой
координате внутри GeoJSON независимо от уровня вложенности
структуры.
Сигнатура:
turf.coordEach(geojson, callback)
Callback получает:
[lng, lat]Пример обработки:
turf.coordEach(geojson, (coord) => {
console.log(coord[0], coord[1]);
});
Использование:
Важная особенность заключается в том, что функция обходит даже
вложенные структуры MultiPolygon и
GeometryCollection, обеспечивая полный доступ ко всем
координатам без ручного рекурсивного обхода.
geomEachФункция geomEach работает на уровне геометрий, а не
отдельных координат или Feature.
Сигнатура:
turf.geomEach(geojson, callback)
Callback получает:
Пример:
turf.geomEach(geojson, (geometry) => {
console.log(geometry.type);
});
Применение:
Особенность заключается в том, что геометрия рассматривается как атомарная единица, даже если она содержит сложную вложенность координат.
propEachФункция propEach позволяет работать исключительно с
атрибутами properties каждого Feature.
Сигнатура:
turf.propEach(geojson, callback)
Callback получает:
Пример:
turf.propEach(collection, (props) => {
console.log(props.name);
});
Использование:
Особенность заключается в полном игнорировании геометрии, что делает функцию полезной для аналитических задач, где пространственная составляющая не важна.
Все перечисленные функции реализуют общий паттерн обхода GeoJSON, который можно описать как декомпозицию структуры на три уровня:
featureEachgeomEachcoordEachpropEachТакое разделение позволяет изолировать разные аспекты геоданных и применять к ним независимую логику.
Во всех функциях обхода поддерживается возможность досрочного
завершения цикла. Если callback возвращает false,
дальнейшая обработка прекращается.
Пример:
turf.featureEach(collection, (feature) => {
if (feature.properties.id === 10) return false;
});
Применение:
На практике функции обхода часто используются совместно. Например, сначала выполняется проход по Feature, затем внутри каждого Feature анализируются координаты.
Пример логической композиции:
turf.featureEach(collection, (feature) => {
turf.coordEach(feature, (coord) => {
// обработка каждой точки внутри feature
});
});
Такой подход позволяет строить многоуровневые алгоритмы обработки геоданных без прямого доступа к внутренней структуре GeoJSON.
Хотя функции Turf.js не предназначены напрямую для мутации входных объектов, свойства и координаты могут быть изменены внутри callback.
Пример трансформации координат:
turf.coordEach(geojson, (coord) => {
coord[0] = coord[0] + 0.001;
coord[1] = coord[1] + 0.001;
});
Особенность:
Итерационные функции Turf.js оптимизированы для работы с большими наборами геоданных. Основные особенности производительности:
Наиболее затратной операцией обычно является coordEach,
так как количество координат в полигонах может быть значительно выше
числа Feature.
Итерационные функции применяются как базовый слой для более сложных операций:
Их роль заключается в предоставлении универсального механизма доступа к данным без зависимости от конкретной геометрической модели.