Как в QGIS вычесть полигон из полигона (сделать дырку)?

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
TrofimovSergey
Интересующийся
Сообщения: 42
Зарегистрирован: 20 сен 2019, 14:29
Репутация: 1
Откуда: Рыбинск

Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение TrofimovSergey » 13 мар 2020, 12:13

Как в QGIS вычесть полигон из полигона (сделать дырку)?
Есть большой полигон и, внутри его, несколько меньших по размерам.
QGIS-полигоны.jpg
QGIS-полигоны.jpg (126.56 КБ) 15406 просмотров
Полигоны лежат в одном слое. Цифры - количество вершин полигонов.
Нужно получить полигон с "дырками".
Какую последовательность действий для этого нужно предпринять в QGIS-3?
Можно ли это вообще сделать и сохранить в SHP?
Найти ответ ни в руководствах, ни в Интернет мне с ходу не удалось...

trir
Гуру
Сообщения: 5354
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение trir » 13 мар 2020, 12:18


MBG
Активный участник
Сообщения: 123
Зарегистрирован: 02 июн 2012, 12:02
Репутация: 35

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение MBG » 13 мар 2020, 12:35

Да, легко. Выделите большой полигон в отдельный слой и используйте инструмент Vector -> Geoprocessing Tools -> Difference.

TrofimovSergey
Интересующийся
Сообщения: 42
Зарегистрирован: 20 сен 2019, 14:29
Репутация: 1
Откуда: Рыбинск

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение TrofimovSergey » 16 мар 2020, 09:17

Спасибо, trir и MBG
"Vector -> Geoprocessing Tools -> Difference" - сработала.
"Вектор -> Геообработка -> Разность" - в моей слегка русскоязычной QGIS 3.4.13
Слегка диковатым показалась необходимость предварительно разнести большие "сыр" и маленькие "дырки" полигоны на разные слои:
В окне "Разность" слой с большими полигонами обзывается "Исходным", слой с маленькими (вычитаемыми) полигонами обзывается "Оверлейным", а результат записывается на новый слой "Разность"...
Перед тем, как запустить операцию "Разность", оказалось полезным выполнить над слоями "Исходный" и "Оверлейный" операции "Вектор -> Обработка геометрии -> Проверка геометрии"
-------------------------------
Обрабатываются либо все объекты в слое, либо "выделенные", если поставить галку "Только выделенные объекты".
А вот тут оказалось, что выделение объектов "Щелчком мыши" и выделение "Радиусом" работают,
а при выделении "полигоном" и "произвольной линией" возникла проблема - я не вижу способа ЗАВЕРШИТЬ выбор?
QGIS - выбор объектов.jpg
QGIS - выбор объектов.jpg (47.32 КБ) 15299 просмотров
Возможно, злую шутку в моём случае играет привычка к интерфейсу АвтоКАДа...

TrofimovSergey
Интересующийся
Сообщения: 42
Зарегистрирован: 20 сен 2019, 14:29
Репутация: 1
Откуда: Рыбинск

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение TrofimovSergey » 18 мар 2020, 08:34

Знатоки-QGIS-овцы, я в предыдущем посте просил подсказать, какая "кнопка" заканчивает построение при выборе "полигоном"?
Новую тему по этому поводу не хочу создавать, так как для "вычитания" полигонов их нужно сначала "распихать" по разным слоям, а без "выбора" объектов это сделать невозможно.
Кроме "замыкания полигона выбора" есть ещё весёлый вопросик: как выбрать меньший полигон, лежащий НАД и, тем более, ПОД большим полигоном?

desertwolf
Новоприбывший
Сообщения: 2
Зарегистрирован: 18 мар 2020, 16:29
Репутация: 1
Откуда: Зеленогорск

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение desertwolf » 18 мар 2020, 17:40

Выбрать меньший полигон под большим несложно. Выбираешь инструмент "Определить объекты (Ctrl-Shift-I)", рамкой выделяешь группу полигонов, в открывшемся окне "Результат определения" пробегаешь по списку определенных объектов, на нужных объектах правой кнопкой мыши вызываешь меню и выбираешь "Инвертировать выделение".

В случае, если все маленькие полигоны расположены в границах большого, то есть не пересекают его внешнюю границу, и лень раскидывать объекты по разным слоям, можно использовать нетрадиционный метод.
Устанавливаем плугин NumericalDigitize.
1. Запускаем редактирование слоя.
2. Выбираем инструмент "Координатное редактирование объекта"
3. Рамкой выделяем или пересекаем маленький полигон, который нужно вырезать. Поскольку имеется наложение, то выберется несколько полигонов. В появившемся диалоге выбора выбираем нужный полигон. В появившемся диалоге редактирования координат нажимаем кнопку "Копировать в буфер обмена". Закрываем диалог через кнопку отмены.
4. Повторяем пункт 2, но теперь выбираем большой полигон из которого нужно вырезать кусок.
5. В появившемся диалоге редактирования координат нажимаем кнопку "Добавить кольцо". В списке частей появится новое отрицательное значение (в этом списке положительные значения - номера частей мультиполигона или мультилинии, отрицательные - номера колец полигона или мультиполигона). Активируем новое кольцо щелкнув левой кнопкой мыши на новом отрицательном значении и нажимаем кнопку "Вставить из буфера обмена".
6. Нажав OK завершаем редактирование.
Повторяем пункты 2 - 6 для других небольших полигонов, которые необходимо вырезать.

Полное описание возможностей плугина можно найти в меню "Вектор"->"Добавление и редактирование объекта по координатам точек" -> "Помощь"

TrofimovSergey
Интересующийся
Сообщения: 42
Зарегистрирован: 20 сен 2019, 14:29
Репутация: 1
Откуда: Рыбинск

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение TrofimovSergey » 25 мар 2020, 12:52

desertwolf! Прошу прощения.
Я НЕ внимательно прочитал 1-ый абзац.
Там, действительно, вполне приемлемый путь выбора маленьких полигонов, лежащих под большим.
Единственное, что выбирать буду "Выделить в радиусе", потому что "Выделить Полигоном" не получается, а "Выделить рамкой" - не наблюдаю...

А вот последующее перечисление 6 пунктов с плагином меня привело в уныние :|

Однако :roll: я обнаружил, что разносить большие и малые полигоны на разные слои НЕ обязательно.
Если выделить маленькие полигоны, запустить "Разность" и в качестве Оверлейного слоя указать "только выбранные объекты", то всё прекрасненько получается...

Antuan
Новоприбывший
Сообщения: 5
Зарегистрирован: 30 окт 2020, 22:31
Репутация: 0
Откуда: Липецк

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение Antuan » 30 окт 2020, 22:47

Чтобы не плодить тем спрошу здесь о другой похожей ситуации. Мне нужно разрезать полигон по границе другого полигона. То-есть есть большой полигон он выходит за границы проектирования (полигон поменьше) я хочу все что выходит за границы отрезать. Чтобы был полигон проектирования и полигоны которые в него попадают и отдельно полигоны которые выходят за этот полигон.
С простым удалением лишнего (то что выходит за полигон границ проектирования) я разобрался - выполняется командой обрезать. Просто у меня не получалось из-за неправильной геометрии. Почитал как это поправить и все получилось. Но именно разрезать полигон по границам другого пока не выходит.

Ivor
Завсегдатай
Сообщения: 345
Зарегистрирован: 11 дек 2006, 09:46
Репутация: 102
Откуда: Иркутск

Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?

Сообщение Ivor » 01 ноя 2020, 09:46

Antuan, есть инструмент в тулбоксе, "Vector overlay"->"Split with lines". Но он режет только по линиям, поэтому надо преобразовать слой границ в линии. Либо физически новый слой сделать, либо виртуальный через ST_Boundary.

P.S. И да, он плодит некоторое количество пустых полигонов, надо потом подчищать

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость