Как в QGIS сделать буферные зоны на внутренней стороне полигона
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Как в QGIS сделать буферные зоны на внутренней стороне полигона
Как в QGIS для выпуклого полигона (например, круга) построить буферные зоны в виде полигональных объектов «бублик», но сделать это от границы исходного полигона ВНУТРЬ.
Почему-то простые плагины, которые строят буфер, строят его только на внешней стороне – вокруг исходного полигона. А мне надо построить внутрь – от исходного контура (окружности) внутрь с заданной дистанцией до самого центра. Примерно как на картинке.
Вообще, итоговая задача построить профиль по полигону, но не единичный, а осредненный (зональной статистикой). То есть с каким-то шагом от границ круга (в общем случае - любого выпуклого полигона) к его центру сделать бублико образные полигоны, по которым посчитать Mean, Mediana подстилающего растра. Мне кажется, что идеально – построить внутренние буферные зоны. Но пока не нашла возможности их построить.
Почему-то простые плагины, которые строят буфер, строят его только на внешней стороне – вокруг исходного полигона. А мне надо построить внутрь – от исходного контура (окружности) внутрь с заданной дистанцией до самого центра. Примерно как на картинке.
Вообще, итоговая задача построить профиль по полигону, но не единичный, а осредненный (зональной статистикой). То есть с каким-то шагом от границ круга (в общем случае - любого выпуклого полигона) к его центру сделать бублико образные полигоны, по которым посчитать Mean, Mediana подстилающего растра. Мне кажется, что идеально – построить внутренние буферные зоны. Но пока не нашла возможности их построить.
- Вложения
-
- circle_example1.jpg (30.77 КБ) 11690 просмотров
-
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 08 дек 2015, 17:19
- Репутация: 6
- Откуда: Россия
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Нужно сделать буфер с отрицательным значением.
Если нужна именно буферная зона границы полигона, то преобразовать полигоны в линии и построить буфер этих линий.
Если нужна именно буферная зона границы полигона, то преобразовать полигоны в линии и построить буфер этих линий.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Я пробую с Vector > Geoprecessing Tool > Fixed Distance buffer. Задаю там отрицательную дистанцию (-500) и 5 секторов. Он строит 1 буфер. Почему один? Все (проект и тестовый полигон - в UTM 22s)Andrey Naumkin писал(а): ↑15 дек 2017, 03:49Нужно сделать буфер с отрицательным значением.
Если нужна именно буферная зона границы полигона, то преобразовать полигоны в линии и построить буфер этих линий.
Настройки как на картинке. Строю для тестового объекта как в приложении (1 круг). Как сделать так, чтобы для тестового круга построить внутренние буферные зоны-бублики с дистанцией 500 м от внешних границ до центра?
Другие плагины тоже пробовала - не получилось.
В плагине Multi ring buffer нет возможности задать отрицательное значение дистанции, Multi-distance buffer – вообще не понятно как работает. Вписать отрицательную дистанцию можно, но он у меня ничего не строит (при нажатии на ОК ничего не дает – может быть не разобралась с настройками). Еще и другие плагины с буферами использовала – тоже без резрезультатно.
Может подскажите, что нужно сделать? В Fixed Distance buffer или еще где-то?
Нет, мне не нужны линии буферов. Только сами "бублики" как полигональные объекты.
- Вложения
-
- Fixed-Distance-buffer.jpg (80.39 КБ) 11678 просмотров
-
- Circle1test.zip
- (11.96 КБ) 310 скачиваний
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
- Игорь Белов
- Гуру
- Сообщения: 2232
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1506
- Откуда: Казань
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
- преобразуем круги в окружности;
- вокруг окружностей строим буферы;
- вырезаем внутренние части буферов кругами, инструмент Clip.
- Вложения
-
- img_20171215_084028.png (1.74 КБ) 11630 просмотров
-
- img_20171215_084034.png (3.27 КБ) 11630 просмотров
-
- img_20171215_084042.png (2.17 КБ) 11630 просмотров
Последний раз редактировалось Игорь Белов 15 дек 2017, 12:13, всего редактировалось 1 раз.
The purpose of computing is insight, not numbers
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Игорь Белов писал(а): ↑15 дек 2017, 08:09преобразуем круги в окружности;
вокруг окружностей строим буферы;
вырезаем внутренние части буферов кругами, инструмент Clip.
А как построить окружности? Вот у меня есть тестовый круг - выше в приложении. Как построить серию кругов с тем же центром, но меньшим радиусом?
Потом, неужели нельзя просто построить внутренний буфер? Если есть внешний, какая ему разница? Вот, сказали, надо задать дистанцию со знаком минус. Но у меня так не получилось. А как правильно ее задать в буферных инструментах? Точно - аркгис строит буфер как внутрь, так и снаружи.
Это нужно еще и потому, что окружность - только пример (хотя в моем случае он нужен прямо). Но вообще нужно научиться строить внутренний буфер для любого полигона.
- Crackfox
- Активный участник
- Сообщения: 131
- Зарегистрирован: 02 мар 2016, 20:29
- Репутация: 17
- Ваше звание: разрядник
- Откуда: Москва
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
а вам необходим именно внутренний буфер ? из точек можно сразу создать кучу геометрических колец с помощью Multiple Ring Buffer. Точнее мультибуфер, удаляя лишние полигоны получите кольца
- Игорь Белов
- Гуру
- Сообщения: 2232
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1506
- Откуда: Казань
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Исходные круги превращаются в окружности инструментом "Polygons to lines".
Как построить внутренний буфер просто, не знаю.
Способ работает для любых полигонов:Natalia Novoselova писал(а): ↑15 дек 2017, 09:03окружность - только пример (хотя в моем случае он нужен прямо). Но вообще нужно научиться строить внутренний буфер для любого полигона.
- Вложения
-
- img_20171215_094427.png (1.66 КБ) 11605 просмотров
-
- img_20171215_094435.png (3.22 КБ) 11605 просмотров
-
- img_20171215_094439.png (2.14 КБ) 11605 просмотров
The purpose of computing is insight, not numbers
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Спасибо, но просто из картинки и слов "преобразуем круги в окружности" я не понимаю, как это можно воспроизвести в QGIS.Игорь Белов писал(а): ↑15 дек 2017, 09:52Исходные круги превращаются в окружности инструментом "Polygons to lines".
Способ работает для любых полигонов:
У меня есть круг (в приложении). Каким инструментом мне создать серию уменьшающихся кругов внутри него, чтобы сделать потом из них буферы по вашему способу? У меня нет этой серии. У меня есть только 1 исходный круг. Мне надо сделать через шаг 500 м много кругов, которые построены из того же центра, но имеют меньший радиус. Если я их построю, то смогу использовать ваш способ.
Аналогичное для полигона проивзольной формы. Каким инструментом можно построить серию уменьшающихся подобных полигонов ("как подобных уменьшающихся матрешек она в другой"), внутри этого полигона?
Главная проблема как раз в этом. Я не знаю как из 1-го исходного круга (полигона) сделать серию уменьшающихся кругов (полигонов), построенных из того же центра.
- Вложения
-
- Circle1test.zip
- (11.96 КБ) 273 скачивания
Последний раз редактировалось Natalia Novoselova 15 дек 2017, 14:06, всего редактировалось 2 раза.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Не поняла. Я нашла плагин Multi Ring Buffer. Пытаюсь строить внутренние плагины по тестовому кругу (в приложении на пост выше). Он у меня строит только на внешней стороне круга. Отрицательную дистанцию в поле "Distance" не дает вписать.
Не поняла, как это "из точек можно создать". Из каких точек? Я пытаюсь строить от полигонального объекта "круг". Может быть не правильно..
- Эдуард Казаков
- Гуру
- Сообщения: 547
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Наталья, кажется вы просто неправильно интерпретировали параметр segments - это не количество уровней вложения, а параметр степени аппроксимации буфера (насколько он будет приближен к окружности). Используете для своего исходного объекта N раз инструмент буферной зоны с увеличивающимся отрицательным значением. И затем просто инструментом difference в geoprocessing tools начинаете от меньших к большим отсекать "центральные области" окружностей, оставляя кольца. Принцип автоматизации, если она нужна, тот же.
- Игорь Белов
- Гуру
- Сообщения: 2232
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1506
- Откуда: Казань
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Извлекли контур полигона из Circle1test в линию outline:
[Vector] → [Geometry Tools] → [Polygons to lines]
Скопировали в тот же слой ещё 25 копий линии. Обновили поле Radius_m по формуле:
13000 - $id * 500
Вокруг outline создали слой буферов buf с радиусами из поля Radius_m:
[Vector] → [Geoprocessing Tools] → [Variable distance buffer]
Обрезали buf по границе Circle1test:
[Vector] → [Geoprocessing Tools] → [Clip]
Результат в слое inner_buf.
Multi Ring Buffer создаёт сразу много буферных зон, так что не надо возиться с копиями линий. Кроме того, позволяет создавать как собственно буферы (Central), так и концентрические полосы (Sequential). Отрицательные радиусы не принимает.
[Vector] → [Geometry Tools] → [Polygons to lines]
Скопировали в тот же слой ещё 25 копий линии. Обновили поле Radius_m по формуле:
13000 - $id * 500
Вокруг outline создали слой буферов buf с радиусами из поля Radius_m:
[Vector] → [Geoprocessing Tools] → [Variable distance buffer]
Обрезали buf по границе Circle1test:
[Vector] → [Geoprocessing Tools] → [Clip]
Результат в слое inner_buf.
Multi Ring Buffer создаёт сразу много буферных зон, так что не надо возиться с копиями линий. Кроме того, позволяет создавать как собственно буферы (Central), так и концентрические полосы (Sequential). Отрицательные радиусы не принимает.
- Вложения
-
- Circle1test.7z
- (659.66 КБ) 255 скачиваний
-
- img_20171215_143256.png (36.99 КБ) 11524 просмотра
The purpose of computing is insight, not numbers
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Эдуард Казаков писал(а): ↑15 дек 2017, 14:12Наталья, кажется вы просто неправильно интерпретировали параметр segments - это не количество уровней вложения, а параметр степени аппроксимации буфера (насколько он будет приближен к окружности). Используете для своего исходного объекта N раз инструмент буферной зоны с увеличивающимся отрицательным значением. И затем просто инструментом difference в geoprocessing tools начинаете от меньших к большим отсекать "центральные области" окружностей, оставляя кольца. Принцип автоматизации, если она нужна, тот же.
А как его обновлять по формуле? Делать по-очередно слой с каждым кругом редактируемым и дальше через Filed Calculator (в окне, где вбивают формулы для расчета) вбивать эту формулу?
Игорь, но я правильно поняла, что для полигонов произвольной формы уже так не получится через форумулу радиуса.
Но я поняла принцип работы буферного инструмента в QGIS и нашла инструмент, чтобы использовать описанный вами выше принцип.
Vector > Geoprocessing tool > Fixed Distance buffer. В поле Distance по-очередно задаем -500 м, -1000 м, -1500 м. И он строит нужные уменьшающиеся полигоны. Потом нужно меньшим вырезать внутри большего.
Я просто искала по логике аркгис, который сразу строит "бублики" в обе стороны (внешние и внутренние). В кугис, как я поняла, нет такой автоматизации. И буфер строит не вырезанный внутри полигон, а полигон сплошной, из которого еще вручную надо вырезать? Точнее для внешних колец - есть инструменты в кугис. Вот для построения буфера внутрь автоматически - ничего не нашла.
Мне кажется... может есть таки плагины, которые строят внутренние кольца автоматически (поищу еще, может быть найдется)
Но уже рабочий вариант для себя нашла, только немного трудоемкий... (мне то их много надо сделать.... для статистики.. , и еще каждый фрагмент много раз делить для создания буферов... без автоматизации очень грустно ).
Ед. не разобралась с параметром "Segments" в Fixed Distance buffer. Если он показывает степень приближенности к исходному полигону, а моя цель сделать его приближенным МАКСИМАЛЬНО, то какое значение мне туда ставить? Segments = 1, или, наоборот, надо завышать?
- Игорь Белов
- Гуру
- Сообщения: 2232
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1506
- Откуда: Казань
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Да, через калькулятор. Только формулу придётся менять в зависимости от количества буферов.
Нет, неправильно. В формуле радиус не окружности, а буфера, так что формула работает для полигонов произвольной формы…
Стоп. Забудьте про формулы, используйте плагин Multi Ring Buffer. Вот так:
А число сегментов ставьте не больше пяти. Если все Ваши полигоны такие сверхгладкие, как Circle1test, этого и так будет слишком много.
Нет, неправильно. В формуле радиус не окружности, а буфера, так что формула работает для полигонов произвольной формы…
Стоп. Забудьте про формулы, используйте плагин Multi Ring Buffer. Вот так:
- извлечь контур полигона;
- создать буферы плагином;
- обрезать по границе полигона.
А число сегментов ставьте не больше пяти. Если все Ваши полигоны такие сверхгладкие, как Circle1test, этого и так будет слишком много.
The purpose of computing is insight, not numbers
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS сделать буферные зоны на внутренней стороне полигона
Настоящие полигоны как раз сверх негладкие. Как на картинке внизу. Тогда какой сегмент нужен? Я поняла, что чем он больше, тем больше идет приближение. Но вот принцип пока не понимаю. То есть почему вообще этот параметр надо указывать, почем он не один для всех буферов? Ну ладно. Буду ставить 5.Игорь Белов писал(а): ↑15 дек 2017, 18:30А число сегментов ставьте не больше пяти. Если все Ваши полигоны такие сверхгладкие, как Circle1test, этого и так будет слишком много
Обработка слоем (сразу много фрагментов) затруднена тем, что они ж все разной площади, то есть разное будет и число внутренних полигонов.
В общем - буду сейчас по всякому пытаться. И после наработанный способ в теме опишу.
От идеи только круга (что изначално было наибольшей вписанной в каждый фрагмент окружностью) я откаказалась. Градиент параметра (профиль) нужно считать по всему полигону - двигаясь от границ к его осевой центральной линии.
Вот от этого такая технология - строить концентрические буферные зоны от границ фрагмента к его центральной оси. По каждому "бублику" зональной статистикой брать среднее и медиану подстилающего растра (искомые параметры растительности - ndvi и ряд других). И уже потом (по этим буферным зонам) строить обычный профиль (в каждой зоне - одна точка).
Нужно все это, чтобы понять, что происходит с параметром растительности от границ к центру фрагмента. Чистый профиль (что сначала пробовала) - слишком скачет, нужно осреднение.
- Вложения
-
- polygon.jpg (97.75 КБ) 11456 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя