GIS-Lab Створення TIN зі структурними лініями у ГІС GRASS
Географічні інформаційні системи та дистанційне зондування
У статті описано варіант побудови TIN зі структурними лініями у ГІС GRASS.
Зміст
[ред.] Вступ
Тріангуляційні нерегулярні мережі (англ. "TIN") часто використовуються в сучасних ГІС (і не тільки ГІС) для створення цифрових моделей рельєфу. Такі моделі мають відомі переваги перед растровими (наприклад, здатність поєднувати дані різного просторового дозволу). Найбільш поширений спосіб побудови TIN - тріангуляція Делоне. Для більш точного моделювання поверхонь застосовується метод побудови TIN зі структурними лініями (англ. breakline), які можуть являти собою, наприклад, тальвеги водотоків або брівки терас, уступи і т.д. (Докладніше 1, 2).
Структурні лінії TIN служать для примусової тріангуляції, що виконується вздовж них. Існує два основних типи структурних ліній: "м'які" (лінії гладкого перегину) "жорсткі" (лінії негладкого перегину, англ. hard breaklines). "Жорсткі" структурні лінії визначають різкі зміни в ухилах поверхні, у той час як "м'які" просто включаються до тріангуляції без зміни характеру поверхні.
[ред.] TIN у GRASS
ГІС GRASS включає модуль v.delaunay, який будує тріангуляцію Делоне за дво- або тривимірними точками, на виході виходить набір двох-або тривимірних полігонів або ліній. Однак за допомогою не можна будувати тріангуляцію зі структурними лініями.
[ред.] Модуль GRASSv.triangle
Модуль v.triangle є спробою заповнити згадану вище функціональну прогалину. Він є shell-скриптом з використанням різних модулів GRASS, стандартних Unix-утиліт,і фактично є "оберткою" для програми .
[»">ред.] Програма
Triangle - програма для побудови двомірної тріангуляції Делоне (у тому числі тріангуляції з обмеженнями та конформної), діаграм Вороного та якісних полігональних сіток. Написана математиком із університету Берклі Джонатоном Шевчуком (Jonathan Richard Shewchuk). Про опції програми докладніше можна почитати в об'ємному мануалі та на спеціальній сторінці. Публікації за методами та алгоритмами, що використовуються, дано на сторінці бібліографії.
Остання версія (1.6) випущена в 2005 р. Вихідний код (мовою програмування С) фактично знаходиться в публічному доступі, але не під відкритою ліцензією, і може вільно використовуватися в дослідницьких та інших некомерційних цілях.
Для тріангуляції будь-яких даних з координатами і атрибутами (у тому числі, геоданих) за допомогою їх потрібно спочатку перетворити спеціальним чином відформатовані текстові файли (node і poly), а потім подати їх на вхід програмі з потрібними параметрами. Модуль працює за наступним алгоритмом:
Вихідні точки/лінії з бази даних GRASS → ASCII → спеціальне форматування →Triangle→ розбір текстових файлів з тріангуляцією → імпорт TIN у ГІС у вигляді полігонів (через ASCII).
[ред.] Опис роботи модуля
Для роботи скрипта необхідний будь-який сучасний дистрибутив Linux (тестувався в Ubuntu 10.04), ГІС GRASS версії не нижче 6.4.* та встановлена програма (процес компіляції описаний у файлі 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:

[ред.] Приклади
Для прикладів використані дані зі стандартного постачання ArcView 3.2: шейп-файли з точками висот (masspntz.shp) та структурними лініями (brklinz.shp).
- Порівняння ділянок TIN, побудованих за допомогою модулів GRASS та
Для створення TIN за точками використана команда:
Для створення TIN за точками таструктурним лініям використано команду:

- Порівняння TIN, побудованих уArcView 3D Analystта
На малюнку нижче показані TIN-моделі, побудовані за допомогою ArcView 3D Analyst (ліворуч) та за допомогою модуля GRASS (праворуч). Як бачимо, вони практично ідентичні. Для створення TIN у GRASS у прикладі використано таку команду:

[ред.] Візуалізація та обробка TIN
Побудована в GRASS TIN-модель є набір топологічно коректних 3D-полігонів (центроїди мають висоту "0", але загалом це не впливає на обробку та візуалізацію полігонів).
[ред.] Виведення на екран
На малюнку нижче відображено ділянку TIN на графічному моніторі GRASS (червоним показані накладені зверху структурні лінії, синім — вершини трикутників із їх висотами).

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

[ред.] 3D-візуалізація
У GRASS можлива також 3D-візуалізація TIN у спеціальному модулі NVIZ. У його допомогою можна не лише відображати TIN і накладати інші векторні дані, але й задавати вертикальний масштаб моделі, її розташування щодо растрів, параметри освітлення, міняти кольори тощо.
При візуалізації TIN в NVIZ за замовчуванням показуються ребра трикутників, що практично, але не надто естетично. Вирішити проблему допоможе невелика хитрість, виявлена досвідченим шляхом: потрібно задати поточний регіон так, щоб він не захоплював TIN (з растрами зазвичай потрібна зворотна дія).
Тепер можна запустити NVIZ з командного рядка або через GUI, завантажити нашуTIN-модель, налаштувати кольори/освітлення за смаком та милуватися результатом :)

[ред.] Обробка
З отриманої TIN можна робити ті самі операції, що і з "звичайними" полігонами. АЛЕ: т.к. в GRASS в даний час відсутня 3D-топологія, будь-які дії з геометрією (оверлеї і т.п.) призводять до втрати векторами Z-координати (висоти).
[ред.] TODO
Планується додати / зробити:
- Підтримку "обмежуючих" полігонів (для них у Triangle використовується термін "hole"), а також "м'яких" структурних ліній;
- підтримку покращення TIN/сіток;
- модуль для розтеризації TIN;
- приклади із вільними даними;
- порівняти результати побудови TIN з ArcGIS 3D Analyst / AutoCAD Civil 3D / іншим ПЗ;
- переписати на Python для більшої кроссплатформенності.
Останнє оновлення: 2014-05-14 20:08