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:

grass

[ред.] Приклади

Для прикладів використані дані зі стандартного постачання ArcView 3.2: шейп-файли з точками висот (masspntz.shp) та структурними лініями (brklinz.shp).

  • Порівняння ділянок TIN, побудованих за допомогою модулів GRASS та

Для створення TIN за точками використана команда:

Для створення TIN за точками таструктурним лініям використано команду:

gis-lab

  • Порівняння TIN, побудованих уArcView 3D Analystта

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

лініями

[ред.] Візуалізація та обробка TIN

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

[ред.] Виведення на екран

На малюнку нижче відображено ділянку TIN на графічному моніторі GRASS (червоним показані накладені зверху структурні лінії, синім — вершини трикутників із їх висотами).

gis-lab

Можна вивести 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