Создание 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]}}


== Введение ==
== Введение ==
Триангуляционные нерегулярные сети (англ. "[http://en.mimi.hu/gis/triangulated_irregular_network.html TIN]") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN -- триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. [http://en.mimi.hu/gis/breakline.html breakline]), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее [http://www.ian-ko.com/resources/triangulated_irregular_network.htm 1], [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Fundamentals_of_creating_TIN_surfaces/006000000010000000/ 2]).
Триангуляционные нерегулярные сети (англ. "[http://en.mimi.hu/gis/triangulated_irregular_network.html TIN]") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN -- триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. [http://en.mimi.hu/gis/breakline.html breakline]), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее [http://www.ian-ko.com/resources/triangulated_irregular_network.htm 1], [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Fundamentals_of_creating_TIN_surfaces/006000000010000000/ 2]).  
== TIN в GRASS ==   
== TIN в GRASS ==   
ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий.      
ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. К недостаткам <v.delaunay> можно отнести невозможность проведения триангуляции с ограничениями и скупость опций.           


== Модуль [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> может использоваться как "фильтр" для любых точечных/линейных/полигональных данных, по которым нужно провести триангуляцию:
Исходные данные &rarr; специальное отформатированные текстовые файлы &rarr; Triangle &rarr; разбор отформатированных текстовых файлов с триангуляцией &rarr; конечная TIN в какой-либо ГИС.       
Указанный выше принцип был применён при создании модуля 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). Модуль имеет описание на английском языке, ниже параметры скрипта даны на русском.         
<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>
<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>'''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>
=== Пример ===
=== Пример ===
Для примера использованы данные из стандартной поставки ArcView 3.2 (пример №1): шейп-файлы с точками и структурными линиями для триангуляции. На рисунке ниже сравниваются TIN, построенные с помощью ArcView 3D Analyst (слева) и с помощью GRASS + Triangle через модуль <v.triangle> (справа). 
[[Файл:ArcView_GRASS_TIN_breaklines_RU.png]]


== Дальнейшая работа (TODO) ==
== TODO (дальнейшая работа) ==
Планируется реализовать поддержку "граничных" полигонов в [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] (для них в Triangle используется обозначение "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
* Поддержка "ограничивающих" полигонов в [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
* Переписывание модуля на Python для большей кроссплатформенности (?)
* Сравнение результатов <v.triangle> с ArcGIS / AutoCAD Civil 3D / ???

Версия от 13:13, 29 апреля 2012

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


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

ArcView GRASS TIN breaklines RU.png


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

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