GIS-Lab Създаване на TIN с разделителни линии в GIS GRASS

Географски информационни системи и дистанционно наблюдение

Статията описва вариант за изграждане на TIN с разделителни линии в GIS GRASS.

Съдържание

[редактиране] Въведение

Триангулационните неправилни мрежи ("TIN") често се използват в съвременните ГИС (и не само ГИС) за създаване на цифрови модели на релефа. Такива модели имат определени предимства пред растерните (например възможност за комбиниране на данни с различна пространствена разделителна способност). Най-често срещаният начин за изграждане на TIN е триангулацията на Delaunay. За по-точно моделиране на повърхности се използва методът на конструиране на TIN с "преградни линии" (англ. breakline), които могат да бъдат например талвеги на потоци или ръбове на тераси, первази и др. (повече подробности 1, 2).

Линиите на прекъсване в TIN служат за налагане на триангулация по тях. Има два основни типа разделителни линии: „меки“ (плавни разделителни линии) „твърди“ (твърди разделителни линии). „Твърдите“ линии на прекъсване определят резки промени в наклона на повърхността, докато „меките“ линии на прекъсване просто се включват в триангулацията, без да се променя природата на повърхността.

[редактиране] TIN в GRASS

GRASS GIS включва модула v.delaunay, който изгражда триангулация на Delaunay, използвайки 2D или 3D точки, което води до набор от 2D или 3D полигони или линии. Въпреки това, не е възможно да се триангулира с разделителни линии, като се използва помощта.

[редактиране] GRASS модулv.triangle

Модулът v.triangle е опит да се запълни празнината във функционалността, спомената по-горе. Това е shell скрипт, използващ различни GRASS модули, стандартни Unix помощни програми,и всъщност е "обвивка" на програмата.

["">edit] Програма

Triangle е програма за конструиране на двумерна триангулация на Делоне (включително триангулация с ограничения и конформна), диаграми на Вороной и висококачествени полигонални мрежи. Написано от математика от Бъркли Джонатан Ричард Шевчук. Повече за възможностите на програмата можете да прочетете в обемното ръководство и на специална страница. Публикации за използваните методи и алгоритми са дадени на страницата с библиография.

Последната версия (1.6) беше пусната през 2005 г. Изходният код (на езика за програмиране C) всъщност е публично достояние, но не под отворен лиценз и може да се използва свободно за изследователски и други некомерсиални цели.

За да триангулирате всякакви данни с координати и атрибути (включително геоданни), като ги използвате, първо трябва да ги конвертирате в специално форматирани текстови файлове (възел и поли) и след това да ги изпратите на входа на програмата с необходимите параметри. Модулът работи по следния алгоритъм:

Изходни точки/линии от база данни GRASS → ASCII → специално форматиране →Триъгълник→ анализ на текстови файлове с триангулация → импортиране на TIN в GIS като полигони (чрез ASCII).

[редактиране] Описание на модула

За да работи скриптът, имате нужда от съвременна Linux дистрибуция (тествана в Ubuntu 10.04), GRASS GIS версия 6.4.* или по-нова и инсталирана програма (процесът на компилиране е описан във файла README в архива на изходния код).

За да инсталирате модула, трябва:

  • запишете скрипта, като използвате връзката по-горе в някоя директория;
  • направете скрипта изпълним (например с командатаchmod +x ./v.triangle);
  • въведете (аконеобходима) директория към системния PATH (можете също да зададете променливата на средата GRASS_ADDONS_PATH).

  • към момента на писане на статията в модула е реализирана само триангулация с "твърди" разделителни линии;
  • изходните данни (точки и линии) трябва да са триизмерни;
  • модулът работи само в GRASS зони с правоъгълна координатна система (в метри);
  • модулът има описание на английски, по-долу са параметрите му на български.

Модулът се стартира от командния ред на GRASS. Възможно е също така да се стартира през интерфейса Tcl/Tk. За да направите това, първо поставете скрипта в директорията, където е инсталиран GRASS ($GISBASE/scripts) или в директорията с допълнителни модули (посочени от променливата GRASS_ADDON_PATH).

v.triangle[-cdqalysif]точки=име [линии=име]tin=име [max_area=име] [min_angle=име] [steiner_points=име] [s ave=име]

-cконформна триангулация на Делоне с ограничения (без да се уточняват свойствата на ъглите и площите)
-dконформна триангулация на Делоне
-qгенериране на висококачествена полигонална мрежа (всички ъгли имат стойности от 20 до 140 градуса)
-aограничение на максималната площ на триъгълник
-lизползвайки само вертикални сегменти в алгоритъма разделяй и владей
-yдеактивиране на вмъкването на точки на Щайнер върху границата на мрежата
-sмаксимален брой добавени Щайнер точки
-iизползвайки инкрементален алгоритъм за триангулация на Делоне (вместоАлгоритъм разделяй и владей
-fизползвайки алгоритъма на "Фортуна" за триангулация на Делоне (вместо "разделяй и владей")
--oпозволява на изходните файлове да презаписват съществуващи файлове
--vподробен модулен изход
--qрезюме на модула

точкивходна векторна карта с точки (задължително)
редовевходна векторна карта с разделителни линии (по избор)
калайизходна векторна карта (TIN) (задължително)
максимална_площмаксимален размер на триъгълника (използвайте с флаг "-a") (по избор)
мин_ъгълминимален ъгъл за мрежа (използвайте с флаг "-q") (по избор)
steiner_pointsмаксимален брой точки на Steiner, които могат да бъдат вмъкнати в мрежата (използвайте с флаг "-s") (по избор)
запазипът за запазване на работещи триъгълни файлове (*.node,*.poly,*.edge,*.ele,*.off). По подразбиране е директорията на текущата област (по избор)

Стартиране чрез Tcl/Tk интерфейс:

grass

[редактиране] Примери

За примери бяха използвани данни от стандартната дистрибуция ArcView 3.2: шейп файлове с точки на надморска височина (masspntz.shp) и линии на прекъсване (brklinz.shp).

  • Сравнение на TIN секции, изградени с помощта на GRASS модули и

За да създадете TIN по точки, беше използвана следната команда:

За създаване на TIN по точки иразделителни линии с помощта на командата:

линии

  • Сравнение на TIN, вградени вArcView 3D Analystи

Фигурата по-долу показва TIN модели, изградени с помощта на ArcView 3D Analyst (вляво) и с помощта на модула GRASS (вдясно). Както можете да видите, те са почти идентични. За да създадете TIN в GRASS, примерът използва следната команда:

създаване

[редактиране] Изобразяване и обработка на TIN

Моделът TIN, изграден в GRASS, е набор от топологично правилни 3D полигони (центроидите имат височина "0", но като цяло това не засяга обработката и визуализацията на полигоните).

[редактиране] Извеждане на екрана

Фигурата по-долу показва TIN секция на графичния монитор GRASS (червеното показва разделителните линии, насложени отгоре, синьото показва върховете на триъгълника с техните височини).

gis-lab

Можете да изведете TIN на екрана с "оцветяване" по височината на триъгълниците (модул d.vect с флаг "-z" и опция "zcolor" или по същия начин чрез GUI). За да създадете ефекта на хълма на фигурата по-долу, се използва командата:

grass

[редактиране] 3D визуализация

В GRASS е възможна и 3D визуализация на TIN в специален модул NVIZ. С него можете не само да показвате TIN и да наслагвате други векторни данни, но и да задавате вертикалния мащаб на модела, местоположението му спрямо растерите, параметрите на осветлението, да променяте цветовете и т.н.

При изобразяване на TIN в NVIZ ръбовете на триъгълниците се показват по подразбиране, което е практично, но не е много естетично. Малък трик, разкрит от опита, ще помогне за решаването на проблема: трябва да зададете текущия регион, така че да НЕ улавя TIN (с растери обикновено се нуждаете от обратното действие).

Сега можете да стартирате NVIZ от командния ред или чрез GUI, заредете нашияTIN модел, коригирайте цветовете/осветлението по ваш вкус и се възхищавайте на резултата :)

линии

[редактиране] Боравене

С получения TIN можете да извършвате всички същите операции като с "обикновените" многоъгълници. Но защото GRASS в момента няма 3D топология, тогава всякакви действия с геометрия (наслагвания и т.н.) водят до загуба на Z-координата (височина) от векторите.

[редактиране] TODO

Планирано да се добави / направи:

  • Поддръжка на "ограничаващи" полигони в (за тях терминът "дупка" се използва в Triangle), както и "меки" линии на прекъсване;
  • поддръжка за подобряване на TIN/мрежата;
  • TIN модул за растеризация;
  • примери със свободни данни;
  • сравнете резултатите от конструкцията на TIN с ArcGIS 3D Analyst / AutoCAD Civil 3D / друг софтуер;
  • пренапишете в Python за повече крос-платформа.

Последна актуализация: 2014-05-14 20:08