У меня большой Shapefile с 200 000 полигонов, но файл слишком велик для приложения, которое будет его использовать. Я хотел бы обобщить эти полигоны и создать гораздо меньший файл.
Я попытался сделать это в QGIS с помощью инструмента «Упростить геометрию». Я пробовал это на очень маленькой части моего Shapefile, и я доволен результатами, но у меня есть небольшая проблема, которую я не знаю, как решить. Я добавил изображение, чтобы показать проблему.
Белые границы - это границы до упрощения. Красные границы после упрощения. Проблемные зоны обведены оранжевым цветом. Как видите, «упрощенные границы» содержат некоторые области, которые после упрощения не принадлежат ни одному из предыдущих полигонов.
Как мне упростить этот шейп-файл и сохранить общие границы между полигонами как одну линию и устранить области, созданные после упрощения?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
После следования предложенным инструкциям
- Конвертировать полигоны в линии
- Упростить линии
- Конвертировать линии обратно в полигоны
Я получаю следующие результаты. Это немного лучше, чем раньше, но все же я получаю области за пределами оригинальных полигонов (см. Белые области на рисунке ниже).
@ Андрей предложил мне связать каждую линию с соседним многоугольником, но я не знаю, как это сделать в QGIS.
Я все еще пытаюсь завершить процесс упрощения полигонов. Я следовал инструкциям, предложенным в этом посте, и когда я думал, что получил приемлемые результаты, появилась еще одна проблема. Ниже приводится краткое изложение того, что я сделал с изображениями результатов. Все шаги были выполнены с использованием панели инструментов ОБРАБОТКА В QGIS.
- Сначала я преобразовал полигоны в линии
- Во-вторых, я очистил строки, используя v.clean с параметром break. Это привело к чистому векторному слою и ошибочному слою. Слой ошибок (зеленые точки на предоставленном изображении) имеет зеленую точку на каждом пересечении линий. Я не знаю, что это значит.
- В-третьих, я упростил линии, используя инструмент «ПРОСТОТА ГЕОМЕТРИИ» (на изображениях появляются красные линии). Сравнивая упрощенные красные линии и оригинальные оранжевые линии, я доволен результатом.
- В-четвертых, я хотел преобразовать линии обратно в полигоны, используя инструмент «Полигонизация» в «Обработка», и получил результаты, которых я не ожидал (второе изображение с заштрихованными полигонами темно-оливкового цвета). Похоже, полигонайзер соединил пересечения слоев ошибок и создал совершенно другой набор полигонов, игнорируя упрощенные линии.
Может кто-нибудь объяснить, что здесь пошло не так?
Почему красные упрощенные линии не были правильно преобразованы в упрощенные многоугольники?
Как видите, я не эксперт по ГИС, но должен сделать это сам. Я не знаю, слишком ли я далек от решения, но расстраивает то, что я вижу упрощенные линии, которые я считаю приемлемыми для того, что я хотел бы сделать, но не могу преобразовать их в полигоны.
Вот два изображения с результатами двух последних шагов процесса:
v.generalize
- еще один отличный вариант. Надеюсь это поможет.Ответы:
Я получил довольно хороший результат, используя GRASS v.generalize из Processing Toolbox, используя значения по умолчанию:
Некоторые строки остаются нетронутыми.
источник
Я попал в эту проблему с Qgis2.16, но не смог заставить GRASS дать топологически правильный результат, такой как @AndreJ.
Хороший обходной путь - изменить допуск привязки v.in.ogr в дополнительных параметрах инструмента v.generalize.simplify . По умолчанию -1, что предотвращает привязку в GRASS.
Помещая здесь небольшое значение (например, 1e-05 м), включается привязка, и GRASS распознает общие границы полигонов. Упрощение дает топологически правильный слой без отверстий.
Примечание. Установив допуск привязки к более высоким значениям, можно даже изменить полигоны, чтобы при необходимости можно было удалить очень тонкие полигоны. Выполните эту операцию с v.clean, используя rmarea и достаточно большой порог, чтобы удалить небольшие остатки, и все готово!
источник
сначала преобразуйте полигон в линии
используйте v.clean для очистки вашей топологии (с опцией "break")
тогда вы упростите свои линии
Наконец, вы поворачиваете линии обратно к полигонам (используя полигонизацию).
РЕДАКТИРОВАТЬ: Чтобы получить атрибуты ваших полигонов, лучший способ, если у вас нет многокомпонентных полигонов в исходном наборе данных , это получить центроиды старых и упрощенных полигонов и соединить их на основе ближайшего местоположения (центроиды должны не двигайтесь много, если вы лишь слегка измените свои границы)
источник
Вы можете решить проблему с помощью модели Processing (ex SEXTANTE) следующим образом:
Версия скрипта:
Примечание: единственное ограничение заключается в том, что общее поле должно быть
ID
вJoin attributes table
, потому что это единственное поле выводаLines to polygons
. Вот почему общее поле не является переменным входом модели. Таким образом,ID
поле должно быть доступно во входном многоугольном слое.источник