Я пытаюсь выяснить, как использовать Python для извлечения полигонов в одном векторе, которые перекрываются> 90% другим вектором. Затем я хотел бы иметь вектор / карту, которая будет показывать только эти полигоны. Пример изображения показывает мои слои. Я хочу, чтобы все серые многоугольники были> 90% красного цвета.
Мне нужно сделать все это через Python (или аналогичным образом автоматизированные методы). У меня есть ~ 1000 карт для обработки таким же образом.
Ответы:
Следующий код работает в моей консоли Python QGIS. Он создает слой памяти с полигонами, которые> 90% перекрываются красными областями.
Я опробовал код с этими двумя векторными слоями:
После запуска кода на консоли Python QGIS для подтверждения результатов были напечатаны индексы i, j задействованных объектов, областей пересечения, атрибута поля в polygons_intersects (1 для красных областей и 2 для серых областей) и критерий перекрытия ,
Созданный слой памяти (зеленые объекты) можно наблюдать на следующем изображении. Это было, как и ожидалось.
источник
Здесь решение, которое не требует Python.
Добавьте новый виртуальный слой с запросом вроде:
С :
Basins800 в качестве вашего слоя вы хотите фильтровать с серыми полигонами
Серьезность: ваш красный слой перекрывается.
Результатом будет новый слой, в котором только все серые полигоны> 90% будут перекрыты красными полигонами, а новое поле будет содержать процент перекрытия.
Надеюсь, это работает. Я могу добавить больше деталей по запросу, если это необходимо.
Примечание: ваши данные содержат очень маленькие полигоны (исходя из обработки растра и соответствующие растровому пикселю (на рисунке мы видим 4 полигона, но есть еще 25 небольших полигонов). Это делает запрос очень медленным для выполнения (функция пересечения) генерирует один элемент для каждой пары элементов из двух слоев).
источник
Увидев ссылку на шейп- файлы Severity и Basins800 , я смог понять необходимый геопроцесс. Я изменил код в:
Программный поиск полигонов, которые> 90% перекрываются другим слоем векторного полигона, используя QGIS?
для получения этого:
Через несколько минут после запуска кода с этими шейп-файлами на Python Console в QGIS я получил результат, аналогичный Pierma ; где слой памяти имел 31 объект (разные из 29 полученных им полигонов).
Я не собираюсь отлаживать результаты, потому что существует 1901 * 3528 = 6706728 взаимодействий для функций. Тем не менее, код выглядит многообещающе.
источник