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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 18: Строка 18:


=== Описание работы модуля ===
=== Описание работы модуля ===
Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] предназначен  представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходим любой современный дистрибутив Linux (тестировался в Ubuntu 10.04) и ГИС GRASS версии не ниже 6.4.*. Модуль имеет описание на английском языке, ниже даны его параметры на русском.          
Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] предназначен  представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходим любой современный дистрибутив Linux (тестировался в Ubuntu 10.04) и ГИС GRASS версии не ниже 6.4.*. Для установки модуля необходимо просто сохранить скрипт по ссылке, приведённой выше, в какой-нибудь каталог, и вписать этот каталог в системный PATH (можно также задать переменную окружения GRASS_ADDONS_PATH).  


<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''=имя [''lines''=имя] ''tin''=имя<br> [''max_area''=имя] [''min_angle''=имя] [''steiner_points''=имя] [''save''=имя]<br><br>
<u>'''Флаги:'''</u>
{| class="wikitable"
{| class="wikitable"
|-
|-
| Текст ячейки || Текст ячейки
| '''-c''' || конформная триангуляция Делоне с ограничениями (без задания свойств углов и площадей)
|-
|-
| Текст ячейки || Текст ячейки
| '''-d''' || конформная триангуляция Делоне
|-
|-
| Текст ячейки || Текст ячейки
| '''-q''' || генерация качественной полигональной сетки (все углы имеют значения от 20 до 140 градусов)
|-
|-
| Текст ячейки || Текст ячейки
| '''-a''' || ограничение на максимальную площадь треугольника
|-
|-
| Текст ячейки || Текст ячейки
| '''-l''' || использование только вертикальных отрезков в алгоритме [http://en.wikipedia.org/wiki/Delaunay_triangulation#Divide_and_conquer "разделяй и властвуй"]
|-
|-
| Текст ячейки || Текст ячейки
| '''-y''' || запрещение вставки [http://en.wikipedia.org/wiki/Steiner_points точек Штейнера] на границе сетки
|-
|-
| Текст ячейки || Текст ячейки
| '''-s''' || максимальное число добавляемых точек Штейнера
|-
|-
| Текст ячейки || Текст ячейки
| '''-i''' || использование [http://en.wikipedia.org/wiki/Delaunay_triangulation#Incremental инкрементального] алгоритма для триангуляции Делоне (вместо алгоритма "разделяй и властвуй")
|-
|-
| Текст ячейки || Текст ячейки
| '''-f''' || использование алгоритма [http://en.wikipedia.org/wiki/Delaunay_triangulation#Sweepline "Fortune's sweepline"] для триангуляции Делоне (вместо алгоритма "разделяй и властвуй")
|-
|-
| Текст ячейки || Текст ячейки
| '''--o''' || позволять выходным файлам перезаписывать существующие файлы
|-
|-
| Текст ячейки || Текст ячейки
| '''--v''' || подробный вывод модуля
|-
|-
| Текст ячейки || Текст ячейки
| '''--q'''  || краткий вывод модуля
|}
|}


<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>'''Параметры:'''</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>
<u>'''Параметры:'''</u>
 
{| class="wikitable"
|-
| '''''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 3.2 (пример №1): шейп-файлы с точками и структурными линиями для триангуляции. На рисунке ниже сравниваются TIN, построенные с помощью ArcView 3D Analyst (слева) и с помощью GRASS + Triangle через модуль <v.triangle> (справа).
 
Для создания TIN в примере использована следующая команда:
 
<syntaxhighlight lang="bash">
v.triangle -c points=pts lines=lines tin=tin
</syntaxhighlight>
 
 


[[Файл:ArcView_GRASS_TIN_breaklines_RU.png]]
[[Файл:ArcView_GRASS_TIN_breaklines_RU.png]]
Строка 63: Строка 93:
== 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"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
* Сделать несколько примеров со свободными данными (где взять?)
* Сравнение результатов <v.triangle> с ArcGIS / AutoCAD Civil 3D / ???
* Переписывание модуля на Python для большей кроссплатформенности (?)
* Переписывание модуля на Python для большей кроссплатформенности (?)
* Сравнение результатов <v.triangle> с ArcGIS / AutoCAD Civil 3D / ???

Версия от 22:17, 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.*. Для установки модуля необходимо просто сохранить скрипт по ссылке, приведённой выше, в какой-нибудь каталог, и вписать этот каталог в системный PATH (можно также задать переменную окружения 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). По умолчанию используется директория текущей области


Пример

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

Для создания TIN в примере использована следующая команда:

v.triangle -c points=pts lines=lines tin=tin


ArcView GRASS TIN breaklines RU.png


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

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