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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 8 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Статья|Черновик|TIN-with-breaklines-GRASS}}
{{Статья|Опубликована|struct-tin-grass}}
{{Аннотация|В статье описан вариант построения TIN со структурными линиями в ГИС GRASS.}}
{{Аннотация|В статье описан вариант построения TIN со структурными линиями в ГИС GRASS.}}


Строка 8: Строка 8:


== TIN в GRASS ==   
== TIN в GRASS ==   
ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. Однако, с помощью <v.delaunay> нельзя строить триангуляцию со структурными линиями.  
ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. Однако, с помощью <v.delaunay> нельзя строить триангуляцию со структурными линиями.


== Модуль GRASS '''v.triangle''' ==
== Модуль GRASS '''v.triangle''' ==
Строка 22: Строка 22:


<HR>
<HR>
Исходные точки/линии из базы данных GRASS &rarr; ASCII &rarr; специально форматирование &rarr; '''Triangle''' &rarr; разбор текстовых файлов с триангуляцией &rarr; импорт TIN в ГИС в виде полигонов (через ASCII).         
Исходные точки/линии из базы данных GRASS &rarr; ASCII &rarr; специальное форматирование &rarr; '''Triangle''' &rarr; разбор текстовых файлов с триангуляцией &rarr; импорт TIN в ГИС в виде полигонов (через ASCII).         
<HR>
<HR>


Строка 46: Строка 46:
<u>'''Использование:'''</u>
<u>'''Использование:'''</u>


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


<br> '''v.triangle''' [-cdqalysif] ''points''=имя [''lines''=имя] ''tin''=имя<br> [''max_area''=имя] [''min_angle''=имя] [''steiner_points''=имя] [''save''=имя]<br><br>  
<br> '''v.triangle''' [-cdqalysif] ''points''=имя [''lines''=имя] ''tin''=имя<br> [''max_area''=имя] [''min_angle''=имя] [''steiner_points''=имя] [''save''=имя]<br><br>  
Строка 101: Строка 101:
Запуск через интерфейс Tcl/Tk:
Запуск через интерфейс Tcl/Tk:


[[File:V.triangle_tcltk_gui.png|400px]]
[[File:V.triangle_tcltk_gui.png|400px|thumb|center|Запуск <v.triangle> в GRASS через интерфейс Tcl/Tk:]]
 


=== Примеры ===
=== Примеры ===
Строка 126: Строка 125:




[[Файл:Vdelaunay_vtriangle_compare.png|800px]]
[[Файл:Vdelaunay_vtriangle_compare.png|800px|thumb|center|'''Слева''' &mdash; исходные данные; '''в центре''' &mdash; TIN, построенная только по точкам; '''справа''' &mdash; TIN, построенная по точкам и структурным линиям.]]




Строка 141: Строка 140:




[[Файл:ArcView_GRASS_TIN_breaklines_RU.png]]
[[Файл:ArcView_GRASS_TIN_breaklines.png|thumb|800px|center|TIN-модели, построенные с помощью ArcView 3D Analyst ('''слева''') и с помощью модуля GRASS <v.triangle> ('''справа''')]]




Строка 153: Строка 152:
На рисунке ниже отображён участок TIN на графическом мониторе GRASS (красным показаны наложенные сверху структурные линии, синим &mdash; вершины треугольников с их высотами).               
На рисунке ниже отображён участок TIN на графическом мониторе GRASS (красным показаны наложенные сверху структурные линии, синим &mdash; вершины треугольников с их высотами).               


[[Файл:TIN_on_monitor.png|600px]]
[[Файл:TIN_on_monitor.png|500px|thumb|center|Вывод TIN с высотами вершин треугольников на графическом мониторе GRASS]]




Строка 164: Строка 163:




[[Файл:TIN_on_monitor_colors.png]]
[[Файл:TIN_on_monitor_colors.png|500px|thumb|center|Вывод TIN с эффектом "отмывки" на графическом мониторе GRASS]]




Строка 177: Строка 176:




[[Файл:TIN_NVIZ_clear.png|800px]]
[[Файл:TIN_NVIZ_clear.png|800px|thumb|center|3D-визуализация TIN в NVIZ.]]




Строка 189: Строка 188:


Планируется добавить / сделать:
Планируется добавить / сделать:
* Поддержку "ограничивающих" полигонов в [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
* Поддержку "ограничивающих" полигонов в <v.triangle> (для них в Triangle используется термин "hole"), а также "мягких" структурных линий;
* Поддержку [http://www.cs.cmu.edu/~quake/triangle.refine.html улучшения TIN/сеток]
* поддержку [http://www.cs.cmu.edu/~quake/triangle.refine.html улучшения TIN/сеток];
* Модуль для растеризации TIN  
* модуль для растеризации TIN;
* Несколько примеров со свободными данными
* примеры со свободными данными;
* Сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / ???
* сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / другим ПО;
* Переписать на Python для большей кроссплатформенности.
* переписать на Python для большей кроссплатформенности.

Текущая версия от 09:39, 3 ноября 2013

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/struct-tin-grass.html


В статье описан вариант построения TIN со структурными линиями в ГИС GRASS.

Введение

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

Структурные линии в TIN служат для принудительной триангуляции, выполняющейся вдоль них. Существует два основных типа структурных линий: "мягкие" (линии гладкого перегиба) "жёсткие" (линии негладкого перегиба, англ. hard breaklines). "Жёсткие" структурные линии определяют резкие изменения в уклонах поверхности, в то время как "мягкие" просто включаются в триангуляцию без изменения характера поверхности.

TIN в GRASS

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

Модуль GRASS v.triangle

Модуль v.triangle является попыткой заполнить упомянутый выше функциональный пробел. Он представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит, <awk> и фактически является "обёрткой" для программы <Triangle>.

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

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

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

Для триангуляции любых данных с координатами и атрибутами (в том числе, геоданных) с помощью <Triangle> их нужно вначале преобразовать в специальным образом отформатированные текстовые файлы (node и poly), а затем подать их на вход программе с нужными параметрами. Модуль <v.triangle> работает по следующему алгоритму:



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



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

Для работы скрипта необходим любой современный дистрибутив 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_ADDON_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> в GRASS через интерфейс Tcl/Tk:

Примеры

Для примеров использованы данные из стандартной поставки 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


Слева — исходные данные; в центре — TIN, построенная только по точкам; справа — TIN, построенная по точкам и структурным линиям.


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

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

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


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


Визуализация и обработка TIN

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

Вывод на экран

На рисунке ниже отображён участок TIN на графическом мониторе GRASS (красным показаны наложенные сверху структурные линии, синим — вершины треугольников с их высотами).

Вывод TIN с высотами вершин треугольников на графическом мониторе GRASS


Можно вывести TIN на экран с "раскраской" по высоте треугольников (модуль d.vect с флагом "-z" и опцией "zcolor" либо этим же способом через GUI). Для создания эффекта "отмывки" на рисунке ниже использована команда:


d.vect -z tin type=area col=none zcol=sepia


Вывод TIN с эффектом "отмывки" на графическом мониторе GRASS


3D-визуализация

В GRASS возможна также 3D-визуализация TIN в специальном модуле NVIZ. В его помощью можно не только отображать TIN и накладывать другие векторные данные, но и задавать вертикальный масштаб модели, её расположение относительно растров, параметры освещения, менять цвета и т.д.

При визуализации TIN в NVIZ по умолчанию показываются рёбра треугольников, что практично, но не слишком эстетично. Решить проблему поможет небольшая хитрость, выявленная опытным путём: нужно задать текущий регион так, чтобы он НЕ захватывал TIN (с растрами обычно нужно обратное действие).


Теперь можно запустить NVIZ из командной строки или через GUI, загрузить нашу TIN-модель, настроить цвета/освещение по вкусу и любоваться результатом :)


3D-визуализация TIN в NVIZ.


Обработка

С полученной TIN можно производить все те же операции, что и с "обычными" полигонами. НО: т.к. в GRASS в настоящее время отсутствует 3D-топология, то любые действия с геометрией (оверлеи и т.п.) приводят к потере векторами Z-координаты (высоты).


TODO

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

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