Создание TIN со структурными линиями в ГИС GRASS
В статье описан вариант построения TIN со структурными линиями в ГИС GRASS. Используется специально написанный для решения этой задачи модуль v.triangle, представляющий собой "обёртку" для программы Triangle
Введение
Триангуляционные нерегулярные сети (англ. "TIN") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN -- триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. breakline), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее 1, 2).
TIN в GRASS
ГИС GRASS включает модуль v.delaunay, который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. К недостаткам <v.delaunay> можно отнести невозможность проведения триангуляции с ограничениями и скупость опций.
Модуль v.triangle
Описание <Triangle>
Triangle — программа для построения двухмерной триангуляции Делоне (в том числе триангуляции Делоне с ограничениями и конформной триангуляции Делоне), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Последняя версия (1.6) выпущена в 2005 г. Исходный код (на языке программирования С) находится в публичном доступе, однако не под открытой лицензией (по ряду причин), и не может быть напрямую использован в коммерческих целях. В силу своего устройства <Triangle> может использоваться как "фильтр" для любых точечных/линейных/полигональных данных, по которым нужно провести триангуляцию:
Исходные данные → специальное отформатированные текстовые файлы → Triangle → разбор отформатированных текстовых файлов с триангуляцией → конечная TIN в какой-либо ГИС.
Указанный выше принцип был применён при создании модуля GRASS <v.triangle>.
Описание работы модуля
Модуль v.triangle предназначен представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходима ГИС GRASS версии не ниже 6.4.*, любой современный дистрибутив Linux (тестировался в Ubuntu 10.04). Модуль имеет описание на английском языке, ниже параметры скрипта даны на русском.
Использование:
v.triangle [-cdqalysif] points=name [lines=name] tin=name
[max_area=name] [min_angle=name] [steiner_points=name] [save=name]
Флаги:
-c Conforming constrained Delaunay triangulation without angle or area constraints
-d Conforming Delaunay triangulation
-q Quality mesh generation (all angles are between 20 and 140 degrees)
-a Imposes a maximum triangle area constraint
-l Uses only vertical cuts in the divide-and-conquer algorithm
-y Prohibits the insertion of Steiner points on the mesh boundary
-s Specifies the maximum number of added Steiner points
-i Uses the incremental algorithm for Delaunay triangulation, rather than the divide-and-conquer algorithm
-f Uses Steven Fortune's sweepline algorithm for Delaunay triangulation, rather than the divide-and-conquer algorithm
--o Allow output files to overwrite existing files
--v Verbose module output
--q Quiet module output
Parameters:
points Input vector map containing points
lines Input vector map containing breaklines
tin Name of output vector map (TIN)
max_area Maximum triangle area (use with "-a" flag)
min_angle Minimum mesh angle (use with "-q" flag)
steiner_points Specifies the maximum number of Steiner points that may be inserted into the mesh (use with "-s" flag)
save Path to save <Triangle> working files (*.node,*.poly,*.edge,*.ele,*.off). By default uses current location directory
Пример
Для примера использованы данные из стандартной поставки ArcView 3.2 (пример №1): шейп-файлы с точками и структурными линиями для триангуляции. На рисунке ниже сравниваются TIN, построенные с помощью ArcView 3D Analyst (слева) и с помощью GRASS + Triangle через модуль <v.triangle> (справа).
TODO (дальнейшая работа)
- Поддержка "ограничивающих" полигонов в v.triangle (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
- Переписывание модуля на Python для большей кроссплатформенности (?)
- Сравнение результатов <v.triangle> с ArcGIS / AutoCAD Civil 3D / ???