2.66. Упрощение векторного слоя (генерализация)

Инструмент позволяет упростить, сгладить или сместить геометрии векторного слоя.

На входе:

  • Векторный слой – слой в формате ESRI Shape, запакованный в ZIP-архив.

  • import snap – значение (в единицах системы координат), при котором узлы геометрий начинают сливаться друг с другом. Используется при импорте данных до начала самой генерализации. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = -1 и соответствует отсутствию слияния узлов.

  • iterations – целое число, обозначающее количество итераций (повторов) процедуры упрощения, сглаживания или смещения. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 1.

  • method – в этом поле необходимо указать один из методов упрощения, сглаживания или смещения.

Методы упрощения:

douglas – Douglas-Peucker, наиболее популярный алгоритм упрощения геометрии. Начальная и конечная точка линии соединяются прямой, а для всех остальных узлов оценивается расстояние до этой прямой и сравнивается с заданным порогом (threshold). Если расстояние от узла до прямой превышает порог, такой узел сохраняется (и прямая становится линией с дополнительным узлом), а для оставшихся узлов вновь оценивается расстояние до обновленной линии и т.д. Параметр алгоритма – threshold.

douglas_reduction – Douglas-Peucker Reduction Algorithm, по своей сути - тот же алгоритм douglas, но с дополнительным параметром – reduction. Параметры алгоритма – threshold, reduction.

lang – Lang, другой стандартный алгоритм упрощения. Упрощаются по очереди отдельные участки линии, т.н. search region. Их размер задается параметром look_ahead. В пределах search region прямой линией соединяется первый и последний узел, для остальных узлов оценивается расстояние до прямой. Если расстояние больше заданного порога, такой узел сохраняется. Параметры алгоритма - look_ahead, threshold.

reduction - Vertex Reduction, самый простой алгоритм, удаляет из линии узлы, которые находятся друг к другу ближе, чем заданное пороговое значение. Параметр алгоритма – threshold.

reumann - Reumann-Witkam, данный алгоритм сохраняет характерные особенности линии. Первый и второй узел соединяются прямой линией. От третьего узла опускается перпендикуляр к созданной прямой, и его длина сравнивается с заданным порогом. Если она превышает порог, то тогда третий узел сохраняется, а четвертый узел оценивается уже по отношению к новой прямой, между узлом 2 и 3, и т.д. Параметр алгоритма – threshold.

Методы сглаживания:

boyle - Boyle’s Forward-Looking Algorithm, позиция каждой точки зависит от позиций предыдущих точек, и также некоторых последующих точек, заданных параметром look_ahead. Алгоритм оставляет количество точек неизменным. Параметр алгоритма – look_ahead.

sliding_averaging - McMaster’s Sliding Averaging Algorithm, позиция каждой точки – это среднее некоторых точек вокруг, заданных параметром look_ahead. Параметр slide используется для линейной интерполяции между старой и новой позицией точки. При slide = 0 берется исходная позиция. Алгоритм оставляет количество точек неизменным. Параметры алгоритма – slide, look_ahead (только нечетное число).

distance_weighting - McMaster’s Distance-Weighting Algorithm, работает со взвешенным средним последовательных точек, заданных параметром look_ahead; при этом вес является обратной величиной от расстояния между исходной и уже сглаженной точкой. Алгоритм оставляет количество точек неизменным. Параметры алгоритма - look_ahead (только нечетное число), slide.

chaiken - Chaiken’s Algorithm, создает линию, касающуюся и как бы вписываемую в исходную геометрию таким образом, что точки новой линии как минимум удалены друг от друга на расстояние порогового значения. Итоговая линия также всегда касается или пересекает центр каждого сегмента между двумя последовательными точками начальной линии. Результат очень приближен к исходной геометрии. Алгоритм увеличивает количество точек. Параметр алгоритма – threshold.

hermite - Hermite Interpolation, этот алгоритм рассматривает точки исходной линии как контрольные точки кубического сплайна Эрмита и строит приближенную к нему линию с точками, удаленными друг от друга на расстояние порогового значения. Алгоритм увеличивает количество точек. Единственный алгоритм, у которого линия всегда проходит через исходные точки. Параметры алгоритма – threshold, angle_thresh.

snakes – Snakes, метод минимизирует «энергию» линии. Сохраняет общий облик, но сглаживает острые углы. Параметры alpha и beta задают степень резкости и выгибания вычисляемой линии. Алгоритм работает очень хорошо со значениями alpha и beta в интервале от 0 до 5. Алгоритм оставляет количество точек неизменным. Является самым медленным и ресурсозатратным методом. Параметры алгоритма – alpha, beta.

Метод смещения:

displacement – смещение используется, когда линии находятся слишком близко друг к другу или накладываются. Алгоритм увеличивает расстояние между такими объектами. Считается, что объекты взаимодействуют, если находятся друг к другу ближе, чем заданное пороговое значение. Алгоритм частично базируется на методе Snakes. Параметры alpha и beta характеризуют жесткость линий. При более крупных значениях alpha и beta (>=1) лучше сохраняется исходная геометрия линий, но это может быть в ущерб расстоянию между соседствующими линиями. Если значения alpha и beta слишком малы (<=0.001), тогда линии смещаются значительно, но геометрия и топология линий может быть нарушена. По всей видимости, оптимальные значения alpha и beta можно получить только в ходе экспериментов. Параметр iterations обозначает количество итераций (повторов) запуска алгоритма. Количество итераций между 10 и 100 подходят для большинства задач. Алгоритм является достаточно ресурсозатратным. Параметры алгоритма – alpha, beta, threshold, iterations.

  • threshold – число от 0 до 1 000 000 000, задает пороговое значение (указывается в единицах системы координат). Обязательный параметр. Если метод не обращается к данному параметру, укажите любое число.

  • look_ahead – целое число, задает количество точек, используемых в некоторых методах. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 7.

  • reduction – число от 0 до 100. При алгоритме упрощения характеризует процент точек, которые сохраняются относительно исходного количества точек. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 50.

  • slide – число от 0 до 1, характеризует сдвиг полученной точки относительно исходной. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 0.5.

  • angle_thresh – число от 0 до 180. Задает минимальный угол между двумя последовательными сегментами линии. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 3.

  • alpha – число, параметр для метода Snakes. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 1.

  • beta – число, параметр для метода Snakes. Опциональный параметр, можно оставить поле пустым. Значение по умолчанию = 1.

Результатом работы инструмента является слой с измененными объектами (геометриями).

Запуск инструмента: https://toolbox.nextgis.com/operation/generalization

Подробнее о параметрах запуска: https://grasswiki.osgeo.org/wiki/V.generalize_tutorial

Попробуйте инструмент в действии, скачав наш пример:

Набор исходных данных для проверки работы инструмента. Внутри архива пошаговая инструкция.

Пример результата работы инструмента.