Создание TIN со структурными линиями в ГИС GRASS: различия между версиями
Amuriy (обсуждение | вклад) мНет описания правки |
Amuriy (обсуждение | вклад) мНет описания правки |
||
Строка 5: | Строка 5: | ||
Триангуляционные нерегулярные сети (англ. "[http://en.mimi.hu/gis/triangulated_irregular_network.html TIN]") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN — триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. [http://en.mimi.hu/gis/breakline.html breakline]), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее [http://www.ian-ko.com/resources/triangulated_irregular_network.htm 1], [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Fundamentals_of_creating_TIN_surfaces/006000000010000000/ 2]). | Триангуляционные нерегулярные сети (англ. "[http://en.mimi.hu/gis/triangulated_irregular_network.html TIN]") часто используются в современных ГИС (и не только ГИС) для создания цифровых моделей рельефа. Такие модели имеют известные преимущества перед растровыми (например, способность совмещать в себе данные с разным разрешением). Наиболее распространённый способ построения TIN — триангуляция Делоне. Для более точного моделирования поверхностей применяется метод построения TIN со "структурными линиями" (англ. [http://en.mimi.hu/gis/breakline.html breakline]), которые могут представлять собой, например, тальвеги водотоков или бровки террас (подробнее [http://www.ian-ko.com/resources/triangulated_irregular_network.htm 1], [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Fundamentals_of_creating_TIN_surfaces/006000000010000000/ 2]). | ||
== TIN в GRASS == | == TIN в GRASS == | ||
ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. | ГИС GRASS включает модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/v.delaunay.html v.delaunay], который строит триангуляцию Делоне по двух- или трёхмерным точкам, на выходе получается набор двух- или трёхмерных полигонов или линий. Однако, с помощью <v.delaunay> нельзя строить триангуляцию с ограничениями. Описываемый ниже модуль <v.triangle> создан как попытка заполнить этот функциональный пробел. | ||
== Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] == | == Модуль [https://raw.github.com/amuriy/GRASS-scripts/master/v.triangle v.triangle] == | ||
=== | === Программа <Triangle> === | ||
[http://www.cs.cmu.edu/~quake/triangle.html Triangle] — программа для построения двухмерной [http://www.cs.cmu.edu/~quake/triangle.delaunay.html триангуляции Делоне] (в том числе триангуляции Делоне с ограничениями и конформной триангуляции Делоне), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Подробнее ознакомиться с используемыми методами и алгоритмами можно на странице [http://www.cs.cmu.edu/~quake/triangle.research.html библиографии]. | [http://www.cs.cmu.edu/~quake/triangle.html Triangle] — программа для построения двухмерной [http://www.cs.cmu.edu/~quake/triangle.delaunay.html триангуляции Делоне] (в том числе триангуляции Делоне с ограничениями и конформной триангуляции Делоне), диаграмм Вороного и качественных полигональных сеток. Написана математиком из университета Беркли Джонатоном Шевчуком (Jonathan Richard Shewchuk). Подробнее ознакомиться с используемыми методами и алгоритмами можно на странице [http://www.cs.cmu.edu/~quake/triangle.research.html библиографии]. | ||
Последняя версия <Triangle> (1.6) выпущена в 2005 г. Исходный код (на языке программирования С) находится в публичном доступе, | Последняя версия <Triangle> (1.6) выпущена в 2005 г. Исходный код (на языке программирования С) фактически находится в публичном доступе, но не под открытой лицензией (по ряду причин), и может свободно использоваться в исследовательских и других некоммерческих целях. В силу своего устройства <Triangle> может применяться в качестве "фильтра" для точечных/линейных/полигональных ГИС-данных, по которым нужно провести триангуляцию: | ||
<HR> | <HR> | ||
Исходные векторные данные | Исходные векторные ГИС-данные → ASCII → специально отформатированые текстовые файлы → '''Triangle''' → разбор текстовых файлов с триангуляцией → импорт TIN в ГИС в виде полигонов (через ASCII) . | ||
<HR> | <HR> | ||
Строка 109: | Строка 109: | ||
== 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"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик. | ||
* Поддержку [http://www.cs.cmu.edu/~quake/triangle.refine.html улучшения TIN/сеток] | * Поддержку [http://www.cs.cmu.edu/~quake/triangle.refine.html улучшения TIN/сеток] | ||
* Модуль для растеризации TIN | |||
* Несколько примеров со свободными данными | * Несколько примеров со свободными данными | ||
* Сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / ??? | * Сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / ??? | ||
* Переписать на Python для большей кроссплатформенности. | * Переписать на Python для большей кроссплатформенности. |
Версия от 11:47, 2 мая 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) .
Описание работы модуля
Модуль v.triangle представляет собой shell-скрипт с использованием разных модулей GRASS, стандартных Unix-утилит и <awk>. Для работы скрипта необходим любой современный дистрибутив Linux (тестировался в Ubuntu 10.04), ГИС GRASS версии не ниже 6.4.* и установленная <Triangle> (процесс компиляции описан в файле README в архиве с исходным кодом).
Для установки модуля необходимо:
- сохранить скрипт по ссылке, приведённой выше, в какой-нибудь каталог;
- сделать скрипт исполняемым (например, командой chmod +x ./v.triangle);
- вписать (если нужно) каталог в системный PATH (можно также задать переменную окружения GRASS_ADDONS_PATH).
На заметку:
- модуль работает только в областях GRASS с прямоугольной системой координат (в метрах);
- модуль имеет описание на английском языке, ниже даны его параметры на русском языке.
Использование:
Модуль запускается из командной строки GRASS. Возможен также запуск через интерфейс Tcl/Tk. Для этого вначале необходимо поместить скрипт в каталог, куда установлена GRASS ($GISBASE/scripts) или в каталог с дополнительными модулями (заданный переменной 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). По умолчанию используется директория текущей области |
Запуск через Tcl/Tk:
Пример
Для примера использованы данные из стандартной поставки ArcView 3.2: шейп-файлы с точками и структурными линиями для триангуляции. На рисунке ниже сравниваются TIN-модели, построенные с помощью ArcView 3D Analyst (слева) и с помощью модуля GRASS <v.triangle> (справа).
Для создания TIN в примере использована следующая простая команда:
v.triangle -c points=pts lines=lines tin=tin
TODO
Планируется добавить / сделать:
- Поддержку "ограничивающих" полигонов в v.triangle (для них в Triangle используется термин "hole"), а также "мягких" структурных линий, т.е. не имеющих высотных характеристик.
- Поддержку улучшения TIN/сеток
- Модуль для растеризации TIN
- Несколько примеров со свободными данными
- Сравнить результаты построения TIN в <v.triangle> с ArcGIS 3D Analyst / AutoCAD Civil 3D / ???
- Переписать на Python для большей кроссплатформенности.