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

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

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

Сообщение Natalia Novoselova » 13 сен 2017, 06:33

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

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

На практике задача пока очень проста. Мне нужно к теме фрагментов леса присвоить название административного района и штата, в котором каждый фрагмент находится (2 поля у соотв. полигональной темы).

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

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

Сообщение trir » 13 сен 2017, 06:46

update A set A.attr = B.attr
from B
where ST_Overlaps(A.geom, B.geom)

Аватара пользователя
Andrey Zhukov
Гуру
Сообщения: 788
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 149
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

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

Сообщение Andrey Zhukov » 13 сен 2017, 08:50

Вообще это называется Spatial join, но задача вида
атрибутивные данные из полигонов В1 и В2 присваиваются полигону А1
в нем (да и в принципе) не решается.
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 15:03

trir писал(а):
13 сен 2017, 06:46
update A set A.attr = B.attr
from B
where ST_Overlaps(A.geom, B.geom)
Что это? Это связано с решением задачи?

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 15:20

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 КБ) 413 просмотров

Аватара пользователя
Andrey Zhukov
Гуру
Сообщения: 788
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 149
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

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

Сообщение Andrey Zhukov » 13 сен 2017, 15:26

Волшебной кнопки для этого нет, потому что это не Join, а по сути Pivot отношения M - N. Эта задача к ГИС никакого отношения не имеет, а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 16:19

Andrey Zhukov писал(а):
13 сен 2017, 15:26
а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
Эх.. так я не умею.. :cry:

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 16:34

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

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

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

Сообщение trir » 13 сен 2017, 19:51

Не обязательно использовать PostGIS, на Windows можно использовать MS SQL Server (вместе с SQL Server Management Studio). Сначала надо загрузить данные, можно через GDAL (я использую ogr2gui). Ну а после загрузки можно выполнять sql-запросы - вот так это примерно выглядит
Последний раз редактировалось trir 13 сен 2017, 19:52, всего редактировалось 1 раз.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 19:52

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

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

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 КБ) 360 просмотров
Последний раз редактировалось Natalia Novoselova 20 сен 2017, 02:45, всего редактировалось 3 раза.

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

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

Сообщение trir » 13 сен 2017, 20:04

вот лень вам искать плагин на каждый чих, когда достаточно изучить SQL и иметь полный контроль над данными?

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 13 сен 2017, 20:14

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

Может быть, вам известны какие-то вводные простые вещи. Мне надо немного, на самом деле, чтобы освоить что-то для возможности начать там работать и развиваться.

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

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

Сообщение trir » 13 сен 2017, 23:16

Как его изучить?
странный вопрос - берёшь книжку и учишь

ericsson
Гуру
Сообщения: 3154
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 664
Ваше звание: Вредитель полей

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

Сообщение ericsson » 13 сен 2017, 23:55

Угу, странный вопрос. Гугл выдает больше 16 миллионов страниц по ключевым словам SQL Tutorial (с которого надо начинать), 350 тысяч страниц - если добавить еще слово spatial.

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 2568
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 37
Ваше звание: /

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

Сообщение Natalia Novoselova » 14 сен 2017, 01:23

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

Ответить

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