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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
{{Статья|Черновик|TIN-with-breaklines-GRASS}}
{{Статья|Черновик|TIN-with-breaklines-GRASS}}
{{Аннотация|В статье описан вариант построения TIN со структурными линиями в ГИС GRASS. Используется специально написанный для решения этой задачи модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle], представляющий собой "обёртку" для программы [http://www.cs.cmu.edu/~quake/triangle.html Triangle]}}
{{Аннотация|В статье описан вариант построения TIN со структурными линиями в ГИС GRASS. Используется специально написанный для решения этой задачи модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle], представляющий собой "обёртку" для программы [http://www.cs.cmu.edu/~quake/triangle.html Triangle]}}.


== Введение ==
== Введение ==
Строка 9: Строка 9:
== Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] ==
== Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] ==
=== Описание <Triangle> ===
=== Описание <Triangle> ===
[http://www.cs.cmu.edu/~quake/triangle.html Triangle] &mdash; программа для построения двухмерной триангуляции Делоне (в том числе триангуляции Делоне с ограничениями и конформной триангуляции Делоне), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Последняя версия (1.6) выпущена в 2005 г. Исходный код (на языке программирования С) находится в публичном доступе, однако не под открытой лицензией (по ряду причин), и не может быть напрямую использован в коммерческих целях. В силу своего устройства <Triangle> может использоваться как "фильтр" для любых точечных/линейных/полигональных данных, по которым нужно провести триангуляцию:
[http://www.cs.cmu.edu/~quake/triangle.html Triangle] &mdash; программа для построения двухмерной триангуляции Делоне (в том числе триангуляции Делоне с ограничениями и конформной триангуляции Делоне), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Подробнее ознакомиться с используемыми методами и алгоритмами можно на странице [http://www.cs.cmu.edu/~quake/triangle.research.html библиографии].


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


Указанный выше принцип был применён при создании модуля GRASS <v.triangle>.         
Указанный выше принцип был применён при создании модуля GRASS <v.triangle>.         


=== Описание работы модуля ===
=== Описание работы модуля ===
Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] предназначен  представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходима ГИС GRASS версии не ниже 6.4.*, любой современный дистрибутив Linux (тестировался в Ubuntu 10.04). Модуль имеет описание на английском языке, ниже параметры скрипта даны на русском.           
Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] предназначен  представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходим любой современный дистрибутив Linux (тестировался в Ubuntu 10.04) и ГИС GRASS версии не ниже 6.4.*. Модуль имеет описание на английском языке, ниже даны его параметры на русском.           
 
<u>'''Использование:'''</u><br> '''v.triangle''' [-cdqalysif] ''points''=имя [''lines''=имя] ''tin''=имя<br> [''max_area''=имя] [''min_angle''=имя] [''steiner_points''=имя] [''save''=имя]<br><br>


<u>'''Использование:'''</u><br> '''v.triangle''' [-cdqalysif] ''points''=name [''lines''=name] ''tin''=name<br> [''max_area''=name] [''min_angle''=name] [''steiner_points''=name] [''save''=name]<br><br>
{| class="wikitable"
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|-
| Текст ячейки || Текст ячейки
|}


<u>'''Флаги:'''</u><br> '''-c'''&nbsp; Conforming constrained Delaunay triangulation without angle or area constraints<br> '''-d'''&nbsp; Conforming Delaunay triangulation<br> '''-q'''&nbsp; Quality mesh generation (all angles are between 20 and 140 degrees)<br> '''-a'''&nbsp; Imposes a maximum triangle area constraint<br> '''-l'''&nbsp; Uses only vertical cuts in the divide-and-conquer algorithm<br> '''-y'''&nbsp; Prohibits the insertion of Steiner points on the mesh boundary<br> '''-s&nbsp;''' Specifies the maximum number of added Steiner points<br> '''-i&nbsp;''' Uses the incremental algorithm for Delaunay triangulation, rather than the divide-and-conquer algorithm<br> '''-f'''&nbsp; Uses Steven Fortune's sweepline algorithm for Delaunay triangulation, rather than the divide-and-conquer algorithm<br> '''--o'''&nbsp; Allow output files to overwrite existing files<br> '''--v'''&nbsp; Verbose module output<br> '''--q&nbsp;''' Quiet module output <br>  
<u>'''Флаги:'''</u><br> '''-c'''&nbsp; конформная триангуляция Делоне с ограничениями (без задания свойств углов и площадей) <br> '''-d'''&nbsp; конформная триангуляция Делоне<br> '''-q'''&nbsp; генерация качественной полигональной сетки (все углы имеют значения от 20 до 140 градусов) <br> '''-a'''&nbsp; задание ограничения на максимальную площадь треугольника <br> '''-l'''&nbsp; использование только вертикальных отрезков в алгоритме [http://en.wikipedia.org/wiki/Delaunay_triangulation#Divide_and_conquer "разделяй и властвуй"] <br> '''-y'''&nbsp; запрещение вставки точек Штейнера на границе сетки <br> '''-s&nbsp;''' максимальное число добавляемых точек Штейнера <br> '''-i&nbsp;''' использование [http://en.wikipedia.org/wiki/Delaunay_triangulation#Incremental инкрементального] алгоритма для триангуляции Делоне (вместо алгоритма "разделяй и властвуй") <br> '''-f'''&nbsp; использование алгоритма [http://en.wikipedia.org/wiki/Delaunay_triangulation#Sweepline "Fortune's sweepline"] для триангуляции Делоне (вместо алгоритма "разделяй и властвуй") <br> '''--o'''&nbsp; позволять выходным файлам перезаписывать существующие файлы <br> '''--v'''&nbsp; подробный вывод модуля<br> '''--q&nbsp;''' краткий вывод модуля <br>  


<u>'''Parameters:'''</u><br> '''''points''''' &nbsp; Input vector map containing points<br> '''''lines'''''&nbsp; Input vector map containing breaklines<br> '''''tin'''''&nbsp; Name of output vector map (TIN)<br> '''''max_area''''' &nbsp; Maximum triangle area (use with "-a" flag)<br> '''''min_angle'''''&nbsp; Minimum mesh angle (use with "-q" flag)<br> '''''steiner_points'''''&nbsp; Specifies the maximum number of Steiner points that may be inserted into the mesh (use with "-s" flag)<br> '''''save''''' &nbsp; Path to save &lt;Triangle&gt; working files (*.node,*.poly,*.edge,*.ele,*.off). By default uses current location directory<br>  
<u>'''Параметры:'''</u><br> '''''points''''' &nbsp; входная векторная карта с точками <br> '''''lines'''''&nbsp; входная векторная карта со структурными линиями <br> '''''tin'''''&nbsp; выходная векторная карта (TIN) <br> '''''max_area''''' &nbsp; максимальный размер треугольника (использовать с флагом "-а") <br> '''''min_angle'''''&nbsp; минимальный угол для сетки (использовать с флагом "-q") <br> '''''steiner_points'''''&nbsp; максимальное число точек Штейнера, которые могут быть вставлены в сетку (использовать с флагом "-s") <br> '''''save''''' &nbsp; путь для сохранения рабочих файлов Triangle (*.node,*.poly,*.edge,*.ele,*.off). По умолчанию используется директория текущей области.<br>  





Версия от 19:34, 30 апреля 2012

Эта страница является черновиком статьи.


В статье описан вариант построения 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.

Указанный выше принцип был применён при создании модуля GRASS <v.triangle>.

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

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

Использование:
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). По умолчанию используется директория текущей области.


Пример

Для примера использованы данные из стандартной поставки ArcView 3.2 (пример №1): шейп-файлы с точками и структурными линиями для триангуляции. На рисунке ниже сравниваются TIN, построенные с помощью ArcView 3D Analyst (слева) и с помощью GRASS + Triangle через модуль <v.triangle> (справа).

ArcView GRASS TIN breaklines RU.png


TODO (дальнейшая работа)

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