Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Можно ли решить такую задачу в QGIS: к полигонам темы “А” присвоить все значения из атрибутивной таблицы полигонов темы ”B”, которые накладываются на полигоны “А” (т.е. если, например) на полигоне А1 размещены два полигона В1 и В2, то атрибутивные данные из полигонов В1 и В2 присваиваются полигону А1.
Хорошо бы найти плагин, который прямо вытаскивает это для полигонов. Есть плагин с похожей задачей «Point sampling tool», но он вытаскивает данные только для точек.
Если нет прямого плагина, то как вообще можно это выполнить ?
На практике задача пока очень проста. Мне нужно к теме фрагментов леса присвоить название административного района и штата, в котором каждый фрагмент находится (2 поля у соотв. полигональной темы).
Хорошо бы найти плагин, который прямо вытаскивает это для полигонов. Есть плагин с похожей задачей «Point sampling tool», но он вытаскивает данные только для точек.
Если нет прямого плагина, то как вообще можно это выполнить ?
На практике задача пока очень проста. Мне нужно к теме фрагментов леса присвоить название административного района и штата, в котором каждый фрагмент находится (2 поля у соотв. полигональной темы).
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
update A set A.attr = B.attr
from B
where ST_Overlaps(A.geom, B.geom)
from B
where ST_Overlaps(A.geom, B.geom)
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Вообще это называется Spatial join, но задача вида
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.
в нем (да и в принципе) не решается.атрибутивные данные из полигонов В1 и В2 присваиваются полигону А1
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Мне это видится просто присоединением атрибутивной таблицы. Я присоединяю только 2 полигональных темы - А и В. И вообще нужно присоединить только 1 поле Name (вот, с названиями). Итого, если в полигон А1, A2, A3… попадает от 1 до 3 полигона темы В, то в атрибутивной таблицы темы А должно быть такое (картинка в приложении). То есть, если нет еще присоединенного полигона, Name пишется как Name_1, если уже есть, то в Name_2, Name_3..Andrey Zhukov писал(а): ↑13 сен 2017, 08:50в нем (да и в принципе) не решается.
Если в полигон Cn попадают полигоны Ba...Bz, то что должно вообще произойти? Декартово произведение? Это апокалипсис.
Мне кажется, здесь нет нереальной ГИС задачи. Если нельзя прямо решить, то как можно близко подойти? Spatial Join это где в QGIS?
- Вложения
-
- tab1.jpg (39.03 КБ) 9551 просмотр
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Волшебной кнопки для этого нет, потому что это не Join, а по сути Pivot отношения M - N. Эта задача к ГИС никакого отношения не имеет, а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Эх.. так я не умею..Andrey Zhukov писал(а): ↑13 сен 2017, 15:26а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Может быть, кто-то смог бы сделать этот скрипт? Не чтобы его просто скопировать. А чтобы при этом мне научиться еще на конкретном примере. Пока для меня это набор страшных слов.. postgis, sql.. Как и подойти к задаче - не знаю.Andrey Zhukov писал(а): ↑13 сен 2017, 15:26Волшебной кнопки для этого нет, потому что это не Join, а по сути Pivot отношения M - N. Эта задача к ГИС никакого отношения не имеет, а trir дал правильный вектор: заливайте данные в postgis и пишите sql-скрипты.
Когда я разбираю конкретные примеры - то осваиваю методы и софты.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Не обязательно использовать 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 присвоить к полигону атрибутивные данные из наложенных полигонов?
Кажется нашла ручной способ решения. Если его алгоритмизировать, то будет скрипт. Но и этот ручной способ меня пока устраивает – т.к. пока хочу разбить лишь по штатам.Поскольку их немного я могу сделать так. Но вот если делать более мелкое деление, а также дл множества других подобных задач, то описанный ниже алгоритм может быть реально превратить в скрипт? Или найти уже сделанный.
Мне кажется, опция полезная для многих задач.
Даже здесь алгоритм довольно сложный. Запишу всем и себе для памяти.
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
Мне кажется, опция полезная для многих задач.
Даже здесь алгоритм довольно сложный. Запишу всем и себе для памяти.
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 (255.77 КБ) 9498 просмотров
Последний раз редактировалось Natalia Novoselova 20 сен 2017, 02:45, всего редактировалось 3 раза.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
вот лень вам искать плагин на каждый чих, когда достаточно изучить SQL и иметь полный контроль над данными?
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Как его изучить? Если у меня почти ноль по базе программирования. Я не против попробовать.
Может быть, вам известны какие-то вводные простые вещи. Мне надо немного, на самом деле, чтобы освоить что-то для возможности начать там работать и развиваться.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
странный вопрос - берёшь книжку и учишьКак его изучить?
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Угу, странный вопрос. Гугл выдает больше 16 миллионов страниц по ключевым словам SQL Tutorial (с которого надо начинать), 350 тысяч страниц - если добавить еще слово spatial.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Конечно надо освоить . Даже тот алгоритм выше - в реалии оказался большой работой, т.к. объемы данных по фрагментам очень большие и просто так их полигонами штатов не выделишь.. памяти не хватает (точнее скорости софта? в общем он глючит и надо уменьшать объемы).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 30 гостей