16.5.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 />
../../../_images/v_clean_rmsa.png

Генерализация инструментами 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.
  • Эрмитова интерполяция — алгоритм на базе кубический сплайнов.