Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

Можно ли решить такую задачу в QGIS: к полигонам темы “А” присвоить все значения из атрибутивной таблицы полигонов темы ”B”, которые накладываются на полигоны “А” (т.е. если, например) на полигоне А1 размещены два полигона В1 и В2, то атрибутивные данные из полигонов В1 и В2 присваиваются полигону А1.

Хорошо бы найти плагин, который прямо вытаскивает это для полигонов. Есть плагин с похожей задачей «Point sampling tool», но он вытаскивает данные только для точек.
Если нет прямого плагина, то как вообще можно это выполнить ?

На практике задача пока очень проста. Мне нужно к теме фрагментов леса присвоить название административного района и штата, в котором каждый фрагмент находится (2 поля у соотв. полигональной темы).
trir
Гуру
Сообщения: 5362
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение trir »

update A set A.attr = B.attr
from B
where ST_Overlaps(A.geom, B.geom)
Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Andrey Zhukov »

Вообще это называется Spatial join, но задача вида
атрибутивные данные из полигонов В1 и В2 присваиваются полигону А1
в нем (да и в принципе) не решается.
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

trir писал(а): 13 сен 2017, 06:46update A set A.attr = B.attr
from B
where ST_Overlaps(A.geom, B.geom)
Что это? Это связано с решением задачи?
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

Andrey Zhukov писал(а): 13 сен 2017, 08:50в нем (да и в принципе) не решается.
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.
Мне это видится просто присоединением атрибутивной таблицы. Я присоединяю только 2 полигональных темы - А и В. И вообще нужно присоединить только 1 поле Name (вот, с названиями). Итого, если в полигон А1, A2, A3… попадает от 1 до 3 полигона темы В, то в атрибутивной таблицы темы А должно быть такое (картинка в приложении). То есть, если нет еще присоединенного полигона, Name пишется как Name_1, если уже есть, то в Name_2, Name_3..


Мне кажется, здесь нет нереальной ГИС задачи. Если нельзя прямо решить, то как можно близко подойти? Spatial Join это где в QGIS?
Вложения
tab1.jpg
tab1.jpg (39.03 КБ) 11782 просмотра
Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Andrey Zhukov »

Волшебной кнопки для этого нет, потому что это не Join, а по сути Pivot отношения M - N. Эта задача к ГИС никакого отношения не имеет, а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

Andrey Zhukov писал(а): 13 сен 2017, 15:26 а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
Эх.. так я не умею.. :cry:
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

Andrey Zhukov писал(а): 13 сен 2017, 15:26Волшебной кнопки для этого нет, потому что это не Join, а по сути Pivot отношения M - N. Эта задача к ГИС никакого отношения не имеет, а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
Может быть, кто-то смог бы сделать этот скрипт? Не чтобы его просто скопировать. А чтобы при этом мне научиться еще на конкретном примере. Пока для меня это набор страшных слов.. postgis, sql.. :( Как и подойти к задаче - не знаю.
Когда я разбираю конкретные примеры - то осваиваю методы и софты.
trir
Гуру
Сообщения: 5362
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение trir »

Не обязательно использовать PostGIS, на Windows можно использовать MS SQL Server (вместе с SQL Server Management Studio). Сначала надо загрузить данные, можно через GDAL (я использую ogr2gui). Ну а после загрузки можно выполнять sql-запросы - вот так это примерно выглядит
Последний раз редактировалось trir 13 сен 2017, 19:52, всего редактировалось 1 раз.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

Кажется нашла ручной способ решения. Если его алгоритмизировать, то будет скрипт. :) Но и этот ручной способ меня пока устраивает – т.к. пока хочу разбить лишь по штатам.Поскольку их немного я могу сделать так. Но вот если делать более мелкое деление, а также дл множества других подобных задач, то описанный ниже алгоритм может быть реально превратить в скрипт? Или найти уже сделанный.
Мне кажется, опция полезная для многих задач.

Даже здесь алгоритм довольно сложный. Запишу всем и себе для памяти.

Br_admdistr_vib1.shp - полигональная тема с Административными штатами. Их д.б. немного. Так как перебирать нужно каждый.
FragmentsTest.shp - полигональная тема лесных фрагментов К КОТОРОЙ нужно присоединить атрибуты из Br_admdistr_vib1.shp
Инсталлируем плагин Spatial Query. Он открывается через Vector в верхней панели.
Выделяем 1 штат в теме Br_admdistr_vib1.

Запускаем плагин Spatial Query. Делаем установки как на картинке.

В верхнем окне "Select source features from" выбираем FragmentsTest
В нижнем окне "Reference features of" выбираем Br_admdistr_vib1 Должно появится «1 selected geometries» - то есть, что выборку он будет делать только по наложению с одним выделенным полигоном темы Br_admdistr_vib1.shp
В Where the feature - ставим Overlaps.. "Intersect" (выделяет все фрагменты, которые находятся внутри штата и которые пересекают границы штата).

В And use the result to – выбираем Create new selection.
После нажатия на Apply в окне справа появляются результаты выборки.

Внизу указано, что 5 of 7 identified (т.е. 5 объектов из темы фрагментов пересекаются с выделенным полигоном-штатом).
Нажимаем на кнопку внизу окна Create layer with list of items и получаем тему FragmentsTest <Overlaps> BR_admdistr_vib1
Всё. Дальше ее пересохраняем, создем поле Name, куда вписываем значение штата в котором находятся фрагменты.Если по условию фрагменты там находится целиком, то нужно для выборки выбрать другую опцию в поле "Where the feature"

Делаем так по каждому штату. И на выходе получаем желаемое – темы лесных фрагментов для каждого штата.

Продолжение по алгоритму: https://gis-lab.info/forum/viewtopic.ph ... 11#p156711
Вложения
spatial-quaery.jpg
spatial-quaery.jpg (255.77 КБ) 11729 просмотров
Последний раз редактировалось Natalia Novoselova 20 сен 2017, 02:45, всего редактировалось 3 раза.
trir
Гуру
Сообщения: 5362
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение trir »

вот лень вам искать плагин на каждый чих, когда достаточно изучить SQL и иметь полный контроль над данными?
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

trir писал(а): 13 сен 2017, 20:04вот лень вам искать плагин на каждый чих, когда достаточно изучить SQL и иметь полный контроль над данными?
Как его изучить? Если у меня почти ноль по базе программирования. Я не против попробовать.

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

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение trir »

Как его изучить?
странный вопрос - берёшь книжку и учишь
ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение ericsson »

Угу, странный вопрос. Гугл выдает больше 16 миллионов страниц по ключевым словам SQL Tutorial (с которого надо начинать), 350 тысяч страниц - если добавить еще слово spatial.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?

Сообщение Natalia Novoselova »

ericsson писал(а): 13 сен 2017, 23:55Угу, странный вопрос. Гугл выдает больше 16 миллионов страниц по ключевым словам SQL Tutorial (с которого надо начинать), 350 тысяч страниц - если добавить еще слово spatial.
Конечно надо освоить . Даже тот алгоритм выше - в реалии оказался большой работой, т.к. объемы данных по фрагментам очень большие и просто так их полигонами штатов не выделишь.. памяти не хватает (точнее скорости софта? в общем он глючит и надо уменьшать объемы).
Ответить

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

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

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