Площадь полигонов в границах большого полигона

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
ECOsens
Новоприбывший
Сообщения: 4
Зарегистрирован: 14 фев 2024, 11:27
Репутация: 0
Откуда: PL

Площадь полигонов в границах большого полигона

Сообщение ECOsens » 14 фев 2024, 12:43

День добрый.
Я обрабатываю геоданные на PHP но вот такую задачу в нём решить проблематично. По этому вопрос к QGIS или ArcGis.
Для наглядности, посмотрите на рисунок:
Изображение
Есть векторный слой-1 с мелкими (синими) полигонами. Каждый имеет свой ID и числовой параметр (в данном примере 10).
Есть второй векторный слой-2 с крупными полигонами (зелёный). Это, как границы области.

В идеале, создать третий векторный слой (или дописать в слой-2) сумму процентных частей от числовых параметров всех мелких полигонов, которые попали в границы крупного. На рисунке, один синий находится в большом полигоне на 60% своей площади, а второй - 50%. В сумме получаем 6+5=11. Её (сумму) и нужно вписать в параметры большого зелёного полигона.

На практике же, мне достаточно получить площади, а числовые параметры рассчитаю уже в других программах.
Тогда для ГИС программы задача упрощается. Нужно разбить мелкие полигоны слоя-1 на еще более мелкие по границам полигонов слоя-2. При этом, добавить параметр Id к какому именно полигону слоя-2 (в границах какого именно) эта мелкая часть синего полигона относится. А дальше, для каждого большого полигона слоя-2 я уже в других программах найду все мелкие куски слоя-1, которые относятся к границам большого, посчитаю проценты от их числовой части и просуммирую.

У знакомого географа есть подобный вопрос. Нужно посчитать площадь полигонов леса, которые попадают в границы полигона области из другого векторного слоя. Это уже будет проще, если считать лес однородным. В моём же случае, каждый полигон леса имеет свой id да еще и уникальную числовую характеристику.
Последний раз редактировалось ECOsens 14 фев 2024, 15:54, всего редактировалось 1 раз.

AlexRomantsov
Завсегдатай
Сообщения: 316
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 137
Ваше звание: хм, сам не знал
Откуда: Томск

Re: Площадь полигонов в границах большого полигона

Сообщение AlexRomantsov » 14 фев 2024, 13:22

Попробуйте QGIS - Инструменты анализа - Вектор анализ - Анализ наложения. Создает новый слой, в атрибуты которого сохранит попавшую площадь и процент от площади

AlexRomantsov
Завсегдатай
Сообщения: 316
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 137
Ваше звание: хм, сам не знал
Откуда: Томск

Re: Площадь полигонов в границах большого полигона

Сообщение AlexRomantsov » 14 фев 2024, 14:03

Вообще, в ГИСах довольно много полезных инструментов, но результат - не единственной кнопкой. Еще вариант из десятка возможных, QGIS:
1. Предварительно, в атрибуты Слоя 1, в новое поле, собираем площадь S1 (Таблица - Калькулятор выражений, $area)
2. QGIS - Анализ - Инструменты пространственных операций - Объединение. Результат - новый слой, в котором все полигоны Слоя 1 порезаны Слоем 2, а в атрибутах - указанные поля из Слоя 2.
3. Таблица атрибутов нового слоя, опять собираем площадь S2 (уже для подрезанных фигур). Далее, калькулятором выражений, Параметр*(S2/S1), в новое поле.

ECOsens
Новоприбывший
Сообщения: 4
Зарегистрирован: 14 фев 2024, 11:27
Репутация: 0
Откуда: PL

Re: Площадь полигонов в границах большого полигона

Сообщение ECOsens » 14 фев 2024, 14:31

Спасибо за ответ и эффективную подсказку.
Понравился второй вариант, так как частично я его уже сделал по мануалу: https://gis-lab.info/qa/shapecalc-qgis.html.

На практике же, если не углубляться в расчёты параметров и суммы, а остановиться на том, что мне было нужно посчитать площади полигонов в границах большего полигона, то всё получилось на уровне одной кнопки.

Итого, если имеем мелкие полигоны с параметрами, например, количество уток на болоте и общие полигоны с охотугодьями: Изображение
То нажатием одной функции Вектор-Геообработка-Объединение мы получаем отдельные полигоны, разрезанные в местах их изначального пересечения: Изображение
Методом тыка догадаться до такого не мог так как "Объединение" больше похоже на соединение полигонов, а не их сегментацию.
Главное, получил новые полигоны со всеми нужными айдишниками, а дальше уже через написание скриптов (не в QGIS) пересчитаю, сколько в них уток и какая их общая сумма на охотугодье.
Если что, проект QGIS вот: https://emuplay.eu/gis-lab/gis-lab.zip

ECOsens
Новоприбывший
Сообщения: 4
Зарегистрирован: 14 фев 2024, 11:27
Репутация: 0
Откуда: PL

Re: Площадь полигонов в границах большого полигона

Сообщение ECOsens » 15 фев 2024, 14:13

Итого, заканчиваю экспериментировать в QGIS да иду программировать на PHP.

Полигоны разделил. Площади и даже уток для новых участков посчитал:
Изображение

Но вот незадача. Как я понял проблему: разделённые полигоны каждый со своей стороны то заходит на границу (рамку) хозяйства, то выходит. И получается, что полигон в хозяйстве, не находится полностью внутри хозяйства (within). Иногда он заходит на границу (overlaps). И полигон по другую сторону тоже не находится на территории хозяйства, но иногда заходит на его границу. Нельзя просто отфильтровать "суммировать все, которые находятся внутри". Или "все, которые заходят на границу". Там нужно задавать логические условия фильтра "Геометрический предикат".
Средствами QGIS через инструмент "Присоединить атрибуты..." я так и не смог подобрать вариант.
Изображение

AlexRomantsov
Завсегдатай
Сообщения: 316
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 137
Ваше звание: хм, сам не знал
Откуда: Томск

Re: Площадь полигонов в границах большого полигона

Сообщение AlexRomantsov » 16 фев 2024, 09:58

Попробуйте Анализ - Вектор-Анализ - Статистика по категориям. В Диалоге настраиваете слой 3 (разделенные), в Поле для расчета - ваше поле с утками, Поля категорий - id исходного объекта из Слоя 1, или id хозяйства, или оба сразу. Результат - табличка с id, в которой для каждой категории (группы категорий) собраны суммы, средние, медианные, минимальные, максимальные и прочие статистические "утки".
Также, в таблице Слоя 3 можно отсортировать по признаку "вне хозяйств", т.е. по значениям в id хозяйств, выделить нужные, пустые без ID или наоборот, при желании дополнительно классифицировать новым полем. А дальше все расчеты производить для "Только выделенные объекты."
Да, и в Слое 3 необходимо, сортируя таблицу, выделить (и удалить) полигоны, в которых есть хозяйства (из Слоя 2) но не попали угодия (из Слоя 1) - это лишние артефакты из результата Объединения, которые портят статистику.
И запретите уже уткам перелетать!

ECOsens
Новоприбывший
Сообщения: 4
Зарегистрирован: 14 фев 2024, 11:27
Репутация: 0
Откуда: PL

Re: Площадь полигонов в границах большого полигона

Сообщение ECOsens » 28 фев 2024, 17:36

Могу только сказать, спасибо за ответ. Прошло 2 недели и я уже сам не пойму, что спрашивал.
Последовательность с последнего комментария пробовал:Изображение.
Но понять суть не так то просто. Вопрос я решил еще две недели назад так, как и написал. Скриптами на РНР.
Кто немного в json и РНР разбирается, скрипт подсчёта параметров в полигонах пишется за 10 минут. А средствами QGIS убил день и не получилось. Но! Знакомая географ как-то вот такими махинациями работы со слоями, путём выделения и нескольких разных отсеиваний, как-то сумму леса попавшего в "больший полигон" получила. Да, это возможно.

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

Re: Площадь полигонов в границах большого полигона

Сообщение trir » 29 фев 2024, 11:18

На SQL'е можно в один запрос сделать

Ответить

Вернуться в «Общие вопросы»

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

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