Создание TIN со структурными линиями в ГИС GRASS

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


В статье описан вариант построения TIN со структурными линиями в ГИС GRASS. Используется специально написанный для решения этой задачи модуль v.triangle, представляющий собой "обёртку" для программы Triangle.

Введение

Триангуляционные нерегулярные сети (англ. "TIN") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN — триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. breakline), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее 1, 2).

TIN в GRASS

ГИС GRASS включает модуль v.delaunay, который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. Однако, с помощью <v.delaunay> нельзя строить триангуляцию со структурными линиями. Модуль <v.triangle> является попыткой заполнить этот функциональный пробел.

Модуль v.triangle

Программа <Triangle>

Triangle — программа для построения двухмерной триангуляции Делоне (в том числе триангуляции с ограничениями и конформной), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Об опциях программы подробнее можно почитать в объёмном мануале и на специальной странице. Публикации по используемым методам и алгоритмам даны на странице библиографии.

Последняя версия <Triangle> (1.6) выпущена в 2005 г. Исходный код (на языке программирования С) фактически находится в публичном доступе, но не под открытой лицензией , и может свободно использоваться в исследовательских и других некоммерческих целях. В силу своего устройства <Triangle> может применяться в качестве "фильтра" для точечных/линейных/полигональных ГИС-данных, по которым нужно провести триангуляцию:



Исходные векторные ГИС-данные → ASCII → специально форматирование → Triangle → разбор текстовых файлов с триангуляцией → импорт TIN в ГИС в виде полигонов (через ASCII).



Описание работы модуля

Модуль v.triangle представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходим любой современный дистрибутив Linux (тестировался в Ubuntu 10.04), ГИС GRASS версии не ниже 6.4.* и установленная <Triangle> (процесс компиляции описан в файле README в архиве с исходным кодом).


Для установки модуля необходимо:

  • сохранить скрипт по ссылке, приведённой выше, в какой-нибудь каталог;
  • сделать скрипт исполняемым (например, командой chmod +x ./v.triangle);
  • вписать (если нужно) каталог в системный PATH (можно также задать переменную окружения GRASS_ADDONS_PATH).


На заметку:

  • модуль работает только в областях GRASS с прямоугольной системой координат (в метрах);
  • модуль имеет описание на английском языке, ниже даны его параметры на русском языке.


Использование:

Модуль запускается из командной строки GRASS. Возможен также запуск через интерфейс Tcl/Tk. Для этого вначале необходимо поместить скрипт в каталог, куда установлена GRASS ($GISBASE/scripts) или в каталог с дополнительными модулями (заданный переменной GRASS_ADDONS_PATH).


v.triangle [-cdqalysif] points=имя [lines=имя] tin=имя
[max_area=имя] [min_angle=имя] [steiner_points=имя] [save=имя]


Флаги:

-c конформная триангуляция Делоне с ограничениями (без задания свойств углов и площадей)
-d конформная триангуляция Делоне
-q генерация качественной полигональной сетки (все углы имеют значения от 20 до 140 градусов)
-a ограничение на максимальную площадь треугольника
-l использование только вертикальных отрезков в алгоритме "разделяй и властвуй"
-y запрещение вставки точек Штейнера на границе сетки
-s максимальное число добавляемых точек Штейнера
-i использование инкрементального алгоритма для триангуляции Делоне (вместо алгоритма "разделяй и властвуй")
-f использование алгоритма "Fortune's sweepline" для триангуляции Делоне (вместо алгоритма "разделяй и властвуй")
--o позволять выходным файлам перезаписывать существующие файлы
--v подробный вывод модуля
--q краткий вывод модуля


Параметры:

points входная векторная карта с точками
lines входная векторная карта со структурными линиями
tin выходная векторная карта (TIN)
max_area максимальный размер треугольника (использовать с флагом "-а")
min_angle минимальный угол для сетки (использовать с флагом "-q")
steiner_points максимальное число точек Штейнера, которые могут быть вставлены в сетку (использовать с флагом "-s")
save путь для сохранения рабочих файлов Triangle (*.node,*.poly,*.edge,*.ele,*.off). По умолчанию используется директория текущей области


Запуск через интерфейс Tcl/Tk:

V.triangle tcltk gui.png


Построенная в GRASS TIN-модель представляет собой набор топологически корректных 3D-полигонов (центроиды имеют высоту "0", но в общем это не влияет на обработку и визуализацию полигонов). На рисунке ниже отображён участок TIN на графическом мониторе GRASS (красным показаны наложенные сверху структурные линии, синим — вершины треугольников с их высотами).


TIN on monitor.png


Примеры

Для примеров использованы данные из стандартной поставки ArcView 3.2: шейп-файлы с точками высот (masspntz.shp) и структурными линиями (brklinz.shp).


  • Сравнение участков TIN, построенных с помощью модулей GRASS <v.delaunay> и <v.triangle>

Для создания TIN по точкам использована команда:

v.delaunay in=masspntz out=tin


Для создания TIN по точкам и структурным линиям использована команда:

v.triangle -c points=masspntz lines=brklinz tin=tin


Vdelaunay vtriangle compare.png


  • Сравнение TIN, построенных в ArcView 3D Analyst и <v.triangle>

На рисунке ниже показаны TIN-модели, построенные с помощью ArcView 3D Analyst (слева) и с помощью модуля GRASS <v.triangle> (справа). Как видно, они практически идентичны. Для создания TIN в GRASS в примере использована следующая команда:

v.triangle -c points=masspntz lines=brklinz tin=tin


ArcView GRASS TIN breaklines RU.png


TODO

Планируется добавить / сделать:

  • Поддержку "ограничивающих" полигонов в v.triangle (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
  • Поддержку улучшения TIN/сеток
  • Модуль для растеризации TIN
  • Несколько примеров со свободными данными
  • Сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / ???
  • Переписать на Python для большей кроссплатформенности.