Триангуляция Делоне представляет собой разбиение множества точек на набор треугольников таким образом, что ни одна точка из исходного множества не лежит внутри описанной окружности любого из треугольников. Это свойство делает триангуляцию устойчивой к «вырожденным» формам и оптимальной для геометрических вычислений, интерполяции и построения поверхностей.
В контексте геообработки Turf.js триангуляция используется для преобразования облаков точек в набор полигонов, пригодных для анализа, визуализации и дальнейших пространственных операций.
Ключевое свойство триангуляции Делоне можно сформулировать следующим образом:
Формально для множества точек ( P ) триангуляция Делоне ( DT(P) ) строится так, что:
(P) = {: () P = }}
Эта формализация объясняет ключевое свойство пустой окружности, которое лежит в основе алгоритма.
В Turf.js триангуляция выполняется через модуль, который строит сетку треугольников на основе входного набора точек GeoJSON.
Основная функция:
turf.triangulate(points, options?)
Где:
points — FeatureCollection точек (GeoJSON)options — дополнительные параметры (редко
обязательны)Результатом является FeatureCollection треугольников (Polygon), каждый из которых образован тремя исходными точками.
Turf.js работает строго с GeoJSON, поэтому входные данные должны быть представлены как:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [x1, y1]
}
},
...
]
}
Особенности подготовки данных:
import * as turf from "@turf/turf";
const points = turf.featureCollection([
turf.point([0, 0]),
turf.point([10, 0]),
turf.point([5, 10]),
turf.point([7, 7]),
turf.point([3, 6])
]);
const triangles = turf.triangulate(points);
console.log(JSON.stringify(triangles, null, 2));
Результат представляет собой набор полигонов:
Внутри Turf.js используется подход, основанный на вычислительной геометрии, где триангуляция строится через промежуточные структуры (часто через оболочку Вороного или инкрементальные методы).
Общая сложность алгоритма:
O(n n)
где ( n ) — количество точек.
Это делает метод применимым для больших наборов геоданных, включая:
При работе в Turf.js необходимо учитывать специфику географической системы координат:
По этой причине триангуляция Делоне в Turf.js корректна для:
Для глобальных данных часто требуется предварительная проекция (например, Web Mercator).
Триангуляция Делоне является дуальной структурой диаграммы Вороного:
Это позволяет использовать Turf.js триангуляцию для построения:
Триангуляция используется для построения TIN-моделей (Triangulated Irregular Network):
Каждый треугольник может интерполировать значения внутри своей области.
Триангуляция позволяет:
Использование триангуляции ускоряет:
Результат функции представляет собой GeoJSON FeatureCollection:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[x1, y1],
[x2, y2],
[x3, y3],
[x1, y1]
]
]
}
}
]
}
Каждый полигон:
На результат влияют следующие факторы:
Плотность точек
Распределение
Границы области
В некоторых сценариях требуется ограничить триангуляцию областью:
В таких случаях после построения триангуляции выполняется:
Типичный геоаналитический pipeline с Turf.js включает:
Триангуляция выступает как промежуточный слой между точечными данными и поверхностными моделями.
При использовании Turf.js triangulate возможны проблемы:
Такие случаи приводят к:
При работе с тысячами и миллионами точек применяются подходы:
Это позволяет снизить нагрузку на алгоритм и ускорить построение сети треугольников.