24.4.4. Обзор модулей для работы с векторными данными в GRASS GIS¶
Обзор модулей обработки векторных данных¶
[Свыше 100 модулей для обработки векторных данных:](https://grass.osgeo.org/grass70/manuals/vector.html). На самом деле трудно посчитать сколько модулей работает с векторными данными, упоминаемые 100 модулей относятся к классу `v.xxx` модулей.
Класс |
ссылка |
---|---|
Импорт/экспорт |
[v.import](https://grass.osgeo.org/grass70/manuals/v.import.html), [v.in.ogr](https://grass.osgeo.org/grass70/manuals/v.in.ogr.html), [v.out.ogr](https://grass.osgeo.org/grass70/manuals/v.out.ogr.html), … |
Работа с атрибутами |
[v.db.addtable](https://grass.osgeo.org/grass70/manuals/v.db.addtable.html), [v.db.select](https://grass.osgeo.org/grass70/manuals/v.db.select.html), [v.db.update](https://grass.osgeo.org/grass70/manuals/v.db.update.html), … |
«Стандартные» ГИС-операции | [v.buffer](https://grass.osgeo.org/grass70/manuals/v.buffer.html), [v.hull](https://grass.osgeo.org/grass70/manuals/v.hull.html), [v.overlay](https://grass.osgeo.org/grass70/manuals/v.overlay.html), [v.select](v.select), … |
|
Редактирование |
[v.edit](https://grass.osgeo.org/grass70/manuals/v.edit.html) |
Сети |
v.net.* |
Линейные референсные системы | v.lrs.* |
|
… |
… |
Основные инструменты обработки топологии¶
v.build — построение топлогии (вызывается автоматически при импорте объектов);
v.clean — основной инструмент обработки топологии:
Основные параметры v.clean¶
v.clean input=name output=name [type=string[,string,...]]
[error=name] tool=string[,string,...] [thresh=float[,float,...]]
input: название входной векторной карты, для которой проверяется/чистится топология
output: название выходной векторной карты, в которой сохраняется результат
type: тип объектов, которы обрабатываются (point, line, boundary, centroid, area, face, kernel). По умолчанию: point, line, boundary, centroid, area
error: название выходной карты, в которую записываются ошибки
tool: инструменты обработки
thresh: пороговые значения для инструментов обработки топологии
Инструмент Tool¶
break: Разбивать линии на пересечениях. Также разбивает линнии, если они образуют «сплющеные» петли. Например, линия (0 0, 1 0, 0 0) будет разбита на две: (0 0, 1 0) и (1 0, 0 0).
snap: Притягивание вершин друг к другу в пределах заданного порога. При большом пороге может повреждать топологии при type=boundary. (Такие «притянутые» границы могут быть обработаны последовательностью break,rmdupl,rmsa).
rmdangle: Удаление «висящих» узлов линий/границ. Линия/граница считается «висящей», если нет других линий/границ по меньшей мере на одной из граничных вершин (в пределах порога).
chdangle: Изменение типа «висящего» узла с границы на линию.
rmbridge: Удаление «мостов» между островами.
chbridge: Изменение типа «моста» между островами с границы на линию.
rmdupl: Удаляет дубликаты геометрий. (Категории!!!) Удобно использовать после инструмента break.
rmdac: Удаляет дубликаты центроидов (они могут появляться после удаления границ).
bpol: Чистит топологию при импорте из нетопологического формата. Границы разбиваются в каждой точке, общей для двух геометрий. (Похоже на break, но работает быстрее, зато требует больше памяти). После применения стоит прогнать rmdupl.
prune: Прореживает узлы, которые лежат ближе указанного порога. Если чистятся границы, то топология сохраняется (отличие от snap).
rmarea: Удаляет площади, которые меньше заданного порога. Удаление площади происходит за счет удаление наиболее протяженной общей границы и удаления всех неразделяемых границ.
rmline: Удаление всех линий нулевой длины.
rmsa: Удаление «щелей»:
- <img src=»img/v_clean_rmsa.png» width=400 />
Генерализация инструментами GRASS GIS¶
Генерализация в момент импорта данных (уделение полигонов меньших заданого порога, «прищелкивание» узлов):
v.in.ogr -e dsn=regions2010.shp out=regions min_area=1 snap=100
v.clean:
v.clean in=regions out=sipmle type=boundary tool=prune,rmarea thresh=2000,4000000
v.generalize: специальный инструмент генерализации:
v.generalize input=name output=name [type=string[,string,...]] method=string threshold=float ... [where=sql_query]
Обзор методов упрощения геометрий v.generalize¶
reduction – самый простой алгоритм из представленных, удаляет точки линии, которые лежат около друг-друга ближе, чем на заданное пороговое расстояние. Таким образом, алгоритм использует один задаваемый пользователем параметр – максимально допустимое расстояние, при котором точки считаются идентичными.
douglas реализует классический алгоритм Дугласа-Пекера. Инструмент принимает один параметр – максимальное допустимое отклонение генерализованной линии от изначальной.
douglas_reduction представляет собой модификацию алгоритма Дугласа-Пекера, в которой задается дополнительный параметр – желаемое количество точек генерализованной линии, которое требуется достичь (измеряется в процентах по сравнению с количеством точек исходной линии).
lang также похож на алгоритм Дугласа-Пекера. Основное отличие состоит в том, что lang представляет собой не рекурсивный алгоритм. Поэтому, во избежание рекурсии алгоритм использует дополнительный параметр (look_ahead), задающий число точек, которые требуется просмотреть
reumann использует коридор из двух параллельных линий заданной ширины. Для построения коридора берутся две последовательные точки линии и в направлении, заданном отрезком между точками строится коридор. Далее определяется место выхода линии за границы коридора, в результате точки и сегменты исходной линии, которые попали внутрь коридора, замещаются одним сегментом и процесс повторяется со следующей парой непросмотренных точек. Параметр алгоритма – ширина коридора.
boyle сглаживает методом скользящего среднего: алгоритм расчитывает среднее между look_ahead последовательных точек линии, начиная с текущей. Таким образом алгоритм использует единственный параметры – ширину окна look_ahead.
sliding_averaging сначала расчитывает средние кординаты для look_ahead точек до и look_ahead после текущей точки (т.е. усредняется 2*look_ahead+1 точка), полученные координаты запоминаются. Целевая (сглаженная) точка помещается на отрезке, проведенном между исходной и усредненной точкой, местоположение на котором задается параметром slide (0 – исходная точка, 1 – усредненная точка). Соответственно, алгоритм использует два параметра: ширину окна look_ahead и степень сдвига slide.
distance_weighting аналогичен предыдущему, за исключением того, что усредненная точка расчитывается методом взвешенного среднего. Как и sliding_averaging, алгоритм использует два параметра: ширину окна look_ahead и степень сдвига slide.
Эрмитова интерполяция — алгоритм на базе кубический сплайнов.
…