Как в QGIS вычесть полигон из полигона (сделать дырку)?
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 20 сен 2019, 14:29
- Репутация: 1
- Откуда: Рыбинск
Как в QGIS вычесть полигон из полигона (сделать дырку)?
Как в QGIS вычесть полигон из полигона (сделать дырку)?
Есть большой полигон и, внутри его, несколько меньших по размерам. Полигоны лежат в одном слое. Цифры - количество вершин полигонов.
Нужно получить полигон с "дырками".
Какую последовательность действий для этого нужно предпринять в QGIS-3?
Можно ли это вообще сделать и сохранить в SHP?
Найти ответ ни в руководствах, ни в Интернет мне с ходу не удалось...
Есть большой полигон и, внутри его, несколько меньших по размерам. Полигоны лежат в одном слое. Цифры - количество вершин полигонов.
Нужно получить полигон с "дырками".
Какую последовательность действий для этого нужно предпринять в QGIS-3?
Можно ли это вообще сделать и сохранить в SHP?
Найти ответ ни в руководствах, ни в Интернет мне с ходу не удалось...
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Активный участник
- Сообщения: 123
- Зарегистрирован: 02 июн 2012, 12:02
- Репутация: 35
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Да, легко. Выделите большой полигон в отдельный слой и используйте инструмент Vector -> Geoprocessing Tools -> Difference.
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 20 сен 2019, 14:29
- Репутация: 1
- Откуда: Рыбинск
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Спасибо, trir и MBG
"Vector -> Geoprocessing Tools -> Difference" - сработала.
"Вектор -> Геообработка -> Разность" - в моей слегка русскоязычной QGIS 3.4.13
Слегка диковатым показалась необходимость предварительно разнести большие "сыр" и маленькие "дырки" полигоны на разные слои:
В окне "Разность" слой с большими полигонами обзывается "Исходным", слой с маленькими (вычитаемыми) полигонами обзывается "Оверлейным", а результат записывается на новый слой "Разность"...
Перед тем, как запустить операцию "Разность", оказалось полезным выполнить над слоями "Исходный" и "Оверлейный" операции "Вектор -> Обработка геометрии -> Проверка геометрии"
-------------------------------
Обрабатываются либо все объекты в слое, либо "выделенные", если поставить галку "Только выделенные объекты".
А вот тут оказалось, что выделение объектов "Щелчком мыши" и выделение "Радиусом" работают,
а при выделении "полигоном" и "произвольной линией" возникла проблема - я не вижу способа ЗАВЕРШИТЬ выбор? Возможно, злую шутку в моём случае играет привычка к интерфейсу АвтоКАДа...
"Vector -> Geoprocessing Tools -> Difference" - сработала.
"Вектор -> Геообработка -> Разность" - в моей слегка русскоязычной QGIS 3.4.13
Слегка диковатым показалась необходимость предварительно разнести большие "сыр" и маленькие "дырки" полигоны на разные слои:
В окне "Разность" слой с большими полигонами обзывается "Исходным", слой с маленькими (вычитаемыми) полигонами обзывается "Оверлейным", а результат записывается на новый слой "Разность"...
Перед тем, как запустить операцию "Разность", оказалось полезным выполнить над слоями "Исходный" и "Оверлейный" операции "Вектор -> Обработка геометрии -> Проверка геометрии"
-------------------------------
Обрабатываются либо все объекты в слое, либо "выделенные", если поставить галку "Только выделенные объекты".
А вот тут оказалось, что выделение объектов "Щелчком мыши" и выделение "Радиусом" работают,
а при выделении "полигоном" и "произвольной линией" возникла проблема - я не вижу способа ЗАВЕРШИТЬ выбор? Возможно, злую шутку в моём случае играет привычка к интерфейсу АвтоКАДа...
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 20 сен 2019, 14:29
- Репутация: 1
- Откуда: Рыбинск
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Знатоки-QGIS-овцы, я в предыдущем посте просил подсказать, какая "кнопка" заканчивает построение при выборе "полигоном"?
Новую тему по этому поводу не хочу создавать, так как для "вычитания" полигонов их нужно сначала "распихать" по разным слоям, а без "выбора" объектов это сделать невозможно.
Кроме "замыкания полигона выбора" есть ещё весёлый вопросик: как выбрать меньший полигон, лежащий НАД и, тем более, ПОД большим полигоном?
Новую тему по этому поводу не хочу создавать, так как для "вычитания" полигонов их нужно сначала "распихать" по разным слоям, а без "выбора" объектов это сделать невозможно.
Кроме "замыкания полигона выбора" есть ещё весёлый вопросик: как выбрать меньший полигон, лежащий НАД и, тем более, ПОД большим полигоном?
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 18 мар 2020, 16:29
- Репутация: 1
- Откуда: Зеленогорск
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Выбрать меньший полигон под большим несложно. Выбираешь инструмент "Определить объекты (Ctrl-Shift-I)", рамкой выделяешь группу полигонов, в открывшемся окне "Результат определения" пробегаешь по списку определенных объектов, на нужных объектах правой кнопкой мыши вызываешь меню и выбираешь "Инвертировать выделение".
В случае, если все маленькие полигоны расположены в границах большого, то есть не пересекают его внешнюю границу, и лень раскидывать объекты по разным слоям, можно использовать нетрадиционный метод.
Устанавливаем плугин NumericalDigitize.
1. Запускаем редактирование слоя.
2. Выбираем инструмент "Координатное редактирование объекта"
3. Рамкой выделяем или пересекаем маленький полигон, который нужно вырезать. Поскольку имеется наложение, то выберется несколько полигонов. В появившемся диалоге выбора выбираем нужный полигон. В появившемся диалоге редактирования координат нажимаем кнопку "Копировать в буфер обмена". Закрываем диалог через кнопку отмены.
4. Повторяем пункт 2, но теперь выбираем большой полигон из которого нужно вырезать кусок.
5. В появившемся диалоге редактирования координат нажимаем кнопку "Добавить кольцо". В списке частей появится новое отрицательное значение (в этом списке положительные значения - номера частей мультиполигона или мультилинии, отрицательные - номера колец полигона или мультиполигона). Активируем новое кольцо щелкнув левой кнопкой мыши на новом отрицательном значении и нажимаем кнопку "Вставить из буфера обмена".
6. Нажав OK завершаем редактирование.
Повторяем пункты 2 - 6 для других небольших полигонов, которые необходимо вырезать.
Полное описание возможностей плугина можно найти в меню "Вектор"->"Добавление и редактирование объекта по координатам точек" -> "Помощь"
В случае, если все маленькие полигоны расположены в границах большого, то есть не пересекают его внешнюю границу, и лень раскидывать объекты по разным слоям, можно использовать нетрадиционный метод.
Устанавливаем плугин NumericalDigitize.
1. Запускаем редактирование слоя.
2. Выбираем инструмент "Координатное редактирование объекта"
3. Рамкой выделяем или пересекаем маленький полигон, который нужно вырезать. Поскольку имеется наложение, то выберется несколько полигонов. В появившемся диалоге выбора выбираем нужный полигон. В появившемся диалоге редактирования координат нажимаем кнопку "Копировать в буфер обмена". Закрываем диалог через кнопку отмены.
4. Повторяем пункт 2, но теперь выбираем большой полигон из которого нужно вырезать кусок.
5. В появившемся диалоге редактирования координат нажимаем кнопку "Добавить кольцо". В списке частей появится новое отрицательное значение (в этом списке положительные значения - номера частей мультиполигона или мультилинии, отрицательные - номера колец полигона или мультиполигона). Активируем новое кольцо щелкнув левой кнопкой мыши на новом отрицательном значении и нажимаем кнопку "Вставить из буфера обмена".
6. Нажав OK завершаем редактирование.
Повторяем пункты 2 - 6 для других небольших полигонов, которые необходимо вырезать.
Полное описание возможностей плугина можно найти в меню "Вектор"->"Добавление и редактирование объекта по координатам точек" -> "Помощь"
-
- Интересующийся
- Сообщения: 42
- Зарегистрирован: 20 сен 2019, 14:29
- Репутация: 1
- Откуда: Рыбинск
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
desertwolf! Прошу прощения.
Я НЕ внимательно прочитал 1-ый абзац.
Там, действительно, вполне приемлемый путь выбора маленьких полигонов, лежащих под большим.
Единственное, что выбирать буду "Выделить в радиусе", потому что "Выделить Полигоном" не получается, а "Выделить рамкой" - не наблюдаю...
А вот последующее перечисление 6 пунктов с плагином меня привело в уныние
Однако
я обнаружил, что разносить большие и малые полигоны на разные слои НЕ обязательно.
Если выделить маленькие полигоны, запустить "Разность" и в качестве Оверлейного слоя указать "только выбранные объекты", то всё прекрасненько получается...
Я НЕ внимательно прочитал 1-ый абзац.
Там, действительно, вполне приемлемый путь выбора маленьких полигонов, лежащих под большим.
Единственное, что выбирать буду "Выделить в радиусе", потому что "Выделить Полигоном" не получается, а "Выделить рамкой" - не наблюдаю...
А вот последующее перечисление 6 пунктов с плагином меня привело в уныние

Однако

Если выделить маленькие полигоны, запустить "Разность" и в качестве Оверлейного слоя указать "только выбранные объекты", то всё прекрасненько получается...
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 30 окт 2020, 22:31
- Репутация: 0
- Откуда: Липецк
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Чтобы не плодить тем спрошу здесь о другой похожей ситуации. Мне нужно разрезать полигон по границе другого полигона. То-есть есть большой полигон он выходит за границы проектирования (полигон поменьше) я хочу все что выходит за границы отрезать. Чтобы был полигон проектирования и полигоны которые в него попадают и отдельно полигоны которые выходят за этот полигон.
С простым удалением лишнего (то что выходит за полигон границ проектирования) я разобрался - выполняется командой обрезать. Просто у меня не получалось из-за неправильной геометрии. Почитал как это поправить и все получилось. Но именно разрезать полигон по границам другого пока не выходит.
С простым удалением лишнего (то что выходит за полигон границ проектирования) я разобрался - выполняется командой обрезать. Просто у меня не получалось из-за неправильной геометрии. Почитал как это поправить и все получилось. Но именно разрезать полигон по границам другого пока не выходит.
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Как в QGIS вычесть полигон из полигона (сделать дырку)?
Antuan, есть инструмент в тулбоксе, "Vector overlay"->"Split with lines". Но он режет только по линиям, поэтому надо преобразовать слой границ в линии. Либо физически новый слой сделать, либо виртуальный через ST_Boundary.
P.S. И да, он плодит некоторое количество пустых полигонов, надо потом подчищать
P.S. И да, он плодит некоторое количество пустых полигонов, надо потом подчищать
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость