Треугольная сетка используется в геопространственных вычислениях как способ равномерного покрытия поверхности набором равносторонних или почти равносторонних треугольников. В контексте анализа пространственных данных она служит альтернативой квадратной и гексагональной сетке, обеспечивая более устойчивое распределение соседних ячеек и более равномерную аппроксимацию криволинейных областей.
В Turf.js треугольная сетка реализуется через генератор регулярной триангуляции, позволяющий разбиение заданного bounding box на множество ячеек одинакового размера. Основная идея заключается в построении повторяющегося паттерна из равносторонних треугольников, которые полностью покрывают область без перекрытий и зазоров.
Треугольная сетка строится на основе регулярной триангуляции плоскости, где каждая вершина соединена с соседними таким образом, что образуются равносторонние треугольники.
Ключевые свойства:
Плотность покрытия выше, чем у квадратной сетки при одинаковом размере стороны, что делает структуру более точной для аппроксимации поверхностей.
В Turf.js генерация треугольной сетки выполняется функцией
triangleGrid.
Функция создает набор GeoJSON-полигонов, представляющих треугольные ячейки внутри заданного прямоугольного bounding box.
Основная задача — разбиение области на регулярные треугольники с заданным шагом.
triangleGrid(bbox, cellSide, options)
Массив вида:
[minX, minY, maxX, maxY]
Определяет прямоугольную область, в пределах которой строится сетка.
Числовое значение, определяющее длину стороны треугольника. Единицы зависят от параметра options.units.
Объект конфигурации:
kilometers,
meters, miles, degrees)Треугольная сетка в Turf.js формируется через комбинацию смещённых координатных рядов.
Алгоритм можно описать следующим образом:
Определяется шаг сетки по оси X, равный длине основания треугольника.
По оси Y используется высота равностороннего треугольника:
Каждая вторая строка смещается на половину шага по X.
Для каждой пары соседних точек формируются два треугольника.
Такая структура обеспечивает плотное и непрерывное покрытие плоскости.
Для равностороннего треугольника:
Эти зависимости используются при расчёте координат узлов сетки.
Каждый треугольник в Turf.js представлен объектом GeoJSON типа
Polygon.
Структура ячейки:
{
type: "Feature",
properties: {},
geometry: {
type: "Polygon",
coordinates: [...]
}
}
Координаты задаются в порядке обхода вершин по или против часовой стрелки, что обеспечивает корректное отображение в GIS-системах.
import { triangleGrid } from "@turf/turf";
const bbox = [30, 50, 32, 52];
const cellSide = 10;
const options = { units: "kilometers" };
const grid = triangleGrid(bbox, cellSide, options);
console.log(grid);
Результатом является FeatureCollection, содержащий множество треугольных полигонов.
Генерация начинается с нижнего левого угла bounding box.
Для каждой строки:
Чередование направлений треугольников:
Это позволяет избежать разрывов в сетке.
Параметр units определяет, как интерпретируется
cellSide.
Поддерживаемые режимы:
При использовании degrees важно учитывать искажения на высоких широтах.
Параметр mask позволяет ограничить сетку произвольной
геометрией.
Если mask задан:
Это особенно важно при анализе административных границ.
Сложность алгоритма линейно зависит от площади bounding box и обратна квадрату cellSide.
Основные факторы нагрузки:
При уменьшении cellSide в 2 раза количество ячеек увеличивается примерно в 4 раза.
Треугольная сетка применяется для:
Особенно полезна в задачах, где важна равномерная связность соседних ячеек.
В Turf.js координаты треугольников привязываются к сетке без геодезической коррекции формы ячеек. Это означает:
Треугольная сетка может использоваться как основа для пространственного индексирования:
Такая структура особенно эффективна при потоковой обработке геоданных.
В Turf.js каждая ячейка может получать пользовательские свойства:
const options = {
units: "kilometers",
properties: {
type: "analysis-cell",
source: "sensor-grid"
}
};
Это позволяет использовать сетку в аналитических пайплайнах без дополнительной постобработки.
Треугольная сетка часто используется в WebGL и SVG-визуализациях:
Каждый треугольник естественным образом подходит для GPU-рендеринга, так как графические пайплайны оптимизированы под треугольники как базовый примитив.