Создание TIN со структурными линиями в ГИС GRASS: различия между версиями
Amuriy (обсуждение | вклад) Нет описания правки |
Amuriy (обсуждение | вклад) Нет описания правки |
||
Строка 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> | |||
{| 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> | <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 для большей кроссплатформенности (?) | ||
Версия от 21: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
TODO (дальнейшая работа)
- Поддержка "ограничивающих" полигонов в v.triangle (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
- Сделать несколько примеров со свободными данными (где взять?)
- Сравнение результатов <v.triangle> с ArcGIS / AutoCAD Civil 3D / ???
- Переписывание модуля на Python для большей кроссплатформенности (?)