Как автоматически заполнить дыры в полигонах?

12

Есть ли в QGIS возможность автоматически заполнять отверстия в полигонах, задавая параметры, например, максимальную площадь, расстояние между границами? Я хочу удалить / заполнить отверстия, которые очень "тонкие" / маленькие.

J-Man
источник
1
Вас интересуют дыры (кольца внутри многоугольников) или уменьшение зазоров между отдельными многоугольниками?
Симбамангу
Это должно быть решение на основе QGIS? Ранее я писал в блоге о том, как сделать это, используя пространственный SQL в PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Если вы не используете PostGIS, я, вероятно, мог бы адаптировать это для вас к SpatiaLite, который, по предположению, если вы используете QGIS, возможно, у вас уже есть SpatiaLite в вашей цепочке инструментов.
Ли Хачадурян,

Ответы:

11

Используя QGIS 2.10.1-Pisa с версией Processing 2.10.2, есть несколько инструментов, доступных на панели инструментов обработки :

  • Заполните отверстия инструментом, в котором вы можете указать максимальную площадь .
  • Инструмент удаления отверстий , который будет применен ко всему входному слою.

Надеюсь это поможет!

Джозеф
источник
1
Просто чтобы проверить, параметр max area, то есть максимальный размер отверстия, которое нужно заполнить? Таким образом, в метрическом проекте UTM, если максимальное значение составляет 10 000, это будет означать, что наибольшая дыра, которую нужно заполнить, будет гектар, и останется ли она больше, чем эта?
BillW
1
@BillW - Да, я верю, что это именно то, что он делает :)
Джозеф
11

Я столкнулся с той же проблемой, что и вы, с этим шейп-файлом, имеющим много пробелов между полигонами.

Оригинальный файл с пробелами

Чтобы решить эту проблему, вы можете использовать небольшую модификацию метода tshiffle:

  1. Во-первых, выполните разницу между вашим файлом и полигоном, охватывающим всю его протяженность.

Extent_polygon

Difference_tool

Это действие создаст новый шейп-файл, состоящий только из одного многоугольника, поэтому вы должны разбить его на отдельные части. Для этого вы можете использовать инструмент Vector / Geometry Tools / Multipart to singleparts.

Difference_result

Multi_to_single

После этого удалите внешнюю сущность. Теперь у вас есть в новом шейп-файле несколько полигонов, покрывающих промежутки вашего исходного покрытия.

gaps_covered

  1. Выполните объединение между исходными данными и отдельными частями. Используйте инструмент SAGA, потому что опция QGIS по умолчанию создает дубликаты в базе данных.

союз

  1. Все пропуски теперь будут отображаться как пустые записи в базе данных (для примера 72 строки). Сортируйте таблицу, используя поле области, и возьмите значение из наименьшего многоугольника в исходном файле. Для этого случая 0,13645 га.

база данных

  1. Наконец, используйте инструмент «Устранить многоугольники» с настройками, показанными на рисунке.

введите описание изображения здесь

  1. Конечный результат не имеет пробелов.

введите описание изображения здесь

gtapko
источник
Не могли бы вы добавить больше информации относительно выбора параметров? Что такое «ценность»? На странице документации QGIS очень мало деталей. Очень элегантный ответ, жаль, что первоначальный пользователь не принял ни одного ответа!
user3386170
1
«Значение» - это величина, которую вы используете для сравнения. В данном примере используемое поле 'площадь' было задано в гектарах, поэтому значение 0,1 означает: исключить полигоны, меньшие или равные 0,1 гектара.
gtapko
gtapko, не могли бы вы предоставить более подробную информацию о фазе 3? я не могу понять это, спасибо
newGIS
4

Там могут быть более элегантные решения, но это всегда работало для меня.

1) Создать «заполнение дыр» полигонов. Для этого нарисуйте гигантский многоугольник, больший, чем оригинал, и используйте инструмент «Разница». Если вы нарисовали многоугольник намного большего размера, у вас будут все многоугольники с «заполнением дыр» плюс один многоугольник большего размера, который обходит исходную форму. Удалите этот большой многоугольник, сохранив многоугольники "заполнения дыр".

2) Объединить полигоны «заполнения дыр» с оригинальным шейп-файлом. Если вы хотите заполнить только те отверстия, которые соответствуют определенным критериям (т. Е. Меньше X квадратных километров), вы можете отфильтровать это здесь.

3) Растворите вновь слитый многоугольник на общем поле.

tshiffle
источник
Непонятно с шагом 3, как кто-то найдет общее поле?
iRfAn
На этом этапе общим полем может быть что угодно, цель состоит в том, чтобы просто растворить границы между полигонами. Вы можете использовать существующее поле или просто добавить его.
Чиффле
4

В python / shapely это может заполнить ваш полигон:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)
mszel
источник
2

Я видел некоторые объяснения по тому же пути, что и у gtapko и tshiffle, но ни одно из них не помогло мне, потому что неправильная геометрия сделала инструмент различий неработоспособным. Итак, я придумал собственное решение, которое не на 100% автоматизировано, но оно управляемо. Возможно, кто-то уже понял это, но я рискну

1) Создайте идентификатор на оригинальном поврежденном слое

Создать атрибут ID просто, но мое решение так же, как я расскажу об этом.

Сначала вы должны открыть таблицу атрибутов, а затем перейти к полевому калькулятору , который представляет собой кнопку, похожую на счет. Там вам будет предоставлена ​​возможность создать новое поле или обновить существующее. На картинке выше я создаю новый с именем "ID". Формула справа в конце картинки. (Извините за то, что моя QGIS настроена на другом языке. Поскольку дизайн и формулы одинаковы во всех языковых версиях, я не думаю, что это будет мешать нам.)

2) Преобразовать полигоны в линии

Этот шаг находится в разделе Vector> Geometry меню. Ваша преобразованная форма должна выглядеть так:

Сразу после преобразования полигонов в линию, вам придется сделать прямо противоположное, что ...

3) Конвертировать линии в полигоны

Варианты прямо рядом друг с другом. Опять же, давайте не будем возражать против языкового барьера здесь.

4) Радуйтесь . Причина, по которой вы выполнили шаги 2 и 3, заключается в том, что теперь вы уверены, что эти линии будут считаться полигонами, что означает, что теперь они имеют свою собственную линию в таблице атрибутов. Если вы проверите это, это будет выглядеть так:

Первый - ВСЕГДА весь многоугольник (поверьте, сегодня я удалил пару сотен строк ...), а остальные - свободные линии посередине. Вы можете включить редактирование и подготовиться к действию. Если вы решите попробовать это, вам следует иметь в виду две вещи: организовать свою таблицу по идентификатору , таким образом вы уверены, что ничего не пропустили и используете shift для выбора кластеров данных, как и любая другая программа. ,

Я знаю, что это не лучший способ решения проблем QGIS, но если вы сталкиваетесь с ситуацией, когда инструменты не работают из-за неправильной геометрии, создаваемой этими линиями (я даже пытался растворить по идентификатору, но это не сработало), тогда это может быть выход.

Эрик Лино
источник
Не могли бы вы обновить свои изображения? Ссылки битые!
Симбамангу
Привет. Извините, но, видимо, Photobucket похитил мои изображения, я потерял к ним доступ. Я уже открыл билет, и я пытаюсь восстановить доступ. Я свяжусь с вами, когда это возможно.
Эрик Лино