Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Вообще, задача редуцировалась до вороса Как в QGIS провести выделение множества полигональных объектов темы А – одним полигоном темы В?
Нет ли еще какого-то способа это сделать? Технически - должно работать с Spatial Query. Но с моими объемами данных числа лесных фрагментов - QGIS делает это страшно медленно. 20 мин - 1%. И сейчас вообще завис. Короче - нельзя так.
Если бы режде разбивать по адм. районам, то объема данных было бы меньше для выделения. Но это вручную никак.
Может еще есть способы, менее памятеемкие. Задача выделить объекты с помощью полигона - наверняка должна быть реализована.
Нет ли еще какого-то способа это сделать? Технически - должно работать с Spatial Query. Но с моими объемами данных числа лесных фрагментов - QGIS делает это страшно медленно. 20 мин - 1%. И сейчас вообще завис. Короче - нельзя так.
Если бы режде разбивать по адм. районам, то объема данных было бы меньше для выделения. Но это вручную никак.
Может еще есть способы, менее памятеемкие. Задача выделить объекты с помощью полигона - наверняка должна быть реализована.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
По алгоритму через Spatial Query - добила, т.е. что мне надо - могу сделать. Но это противный ручной труд , т.е. - не то решение, которое нужно.
Может быть еще таки есть менее памятеёмкие плагины чтобы выполнить выделение множества полигональных объектов темы А – одним полигоном темы В?
Может быть еще таки есть менее памятеёмкие плагины чтобы выполнить выделение множества полигональных объектов темы А – одним полигоном темы В?
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
даже любопытно стало, а можно данные посмотреть? Как они в БД себя повидутНо с моими объемами данных числа лесных фрагментов - QGIS делает это страшно медленно. 20 мин - 1%.
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Попробуйте. Может быть, дело и в мощности компа – сейчас я на ноуте, но его хватало раньше.
По ссылке
https://drive.google.com/file/d/0B6TJ2V ... sp=sharing
P1_AtlanForests_epsg4326.shp - четвертая часть данных фрагментов леса.
И Two_Braz_States.shp – 2 штата, которые приходятся на них.
Для них я пока только и вырезала. Тормозит жутко, сначала вручную максимально удаляю объекты из темы фрагментов. Потом вроде выделяет.
Но как... если долго зависает на 1% - то виснет. Если прорывается через 1%, то медленно доходит до конца. Но при большом объеме – не создает виртуальный слой. Однако делает выделение нужных фрагментов – и я его сохраняю в нужный шейп. А если не обрезать тему фрагментов, то и к процентам не переходит - сразу виснет.
Главная цель по всем данным (которые могу все прислать) это разбить все фрагменты на отдельные темы. Где 1 тема фрагментов – 1 штат.
Внутри плагина Spatial Query я использую в настройке «Where the feature» - "Intersect" (выделяет все фрагменты, которые находятся внутри штата и которые пересекают границы штата). А не Overlaps (как сказала сначала в описании алгоритма).
Почему тормозит? Да потому что в этой четверти – 68787 фрагментов! А всего их в 4-х файлах – 317 233!
Триста семнадцать тысяч – это число фрагментов, на которые сейчас разделен биом Атлантический лес.. Поле с рисом на карте.. Мой главный интерес – самые крупные фрагменты (в этой теме их немного, в основном, они в 3х других). Вот их надо спасать и от них вести восстановление и сохранение биома для будущих поколений.
Если у вас получится вдруг более оптимальный способ – с SQL запросом, я готова или прислать все данные, или по вашему алгоритму разобраться и сделать (для меня это наилучший способ обучения новой технике – просто делать сразу свои задачи)
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
лечится надо...
Код: Выделить всё
ogr2ogr.exe : ERROR 1: INSERT command for new feature failed. [Microsoft][ODBC SQL Server Driver][SQL Server]Произошла ошибка .NET Framework во время выполнения определя
емой пользователем подпрограммы или агрегатной функции "geometry":
строка:3 знак:1
+ &$exe --config GDAL_DATA "G:\NextGIS_QGIS\share\gdal" -overwrite -f "MSSQLSpatia ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ERROR 1: INSERT...ии "geometry": :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
System.FormatException: 24119: вход Polygon является недопустимым, так как начальная и конечная точки внешнего кольца не совпадают. Начальная и конечная точки каждого ко
льца в многоугольнике должны совпадать.
System.FormatException:
в Microsoft.SqlServer.Types.GeometryValidator.ValidatePolygonRing(Int32 iRing, Int32 cPoints, Do
ERROR 1: INSERT command for new feature failed. [Microsoft][ODBC SQL Server Driver][SQL Server]Произошла ошибка .NET Framework во время выполнения определяемой пользоват
елем подпрограммы или агрегатной функции "geometry":
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Запрос выполнялся чуть больше часа
В слое P1_AtlanForests_epsg432 почти 4 миллиона точек (3812760)
результат
Код: Выделить всё
INSERT INTO [AtlanForests].[dbo].[res_tbl] ([oid],[Geom],[ID_por],[ID_1],[NAME_1], ins_time)
SELECT fr.[Oid], fr.[Geom], fr.[ID_por], st.[ID_1], st.[NAME_1], CURRENT_TIMESTAMP
FROM [AtlanForests].[dbo].[Two_Braz_States] as st RIGHT join
(SELECT * FROM [AtlanForests].[dbo].[P1_AtlanForests_epsg4326]) as fr
on st.[Geom].STIntersects(fr.[Geom]) = 1
результат
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Скачала результат. Спасибо! Там вижу разделение на 2 штата. Но часть данных - без присвоения имения штата (поле Name пустое). Это ошибка в запросе, или вы пробовали только по двум штатам?
В общем, сейчас не хочу никого загружать еще своей работой. Но по сделанному вами разобраться. Как я поняла, код выше - это код вашего запроса? Или что? Почему "лечится надо...", почему ошибки в коде? Если можно бы привести тот код, по которому вы делали запрос. Чтобы мне попробовать разрбраться на этом примере.
В этом слое 68 782 полигонов. Каких 4 млн точек?
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
ну так вы мне дали границы только двух штатов - по ним и назначил, остальные данные в эти штаты не попалиНо часть данных - без присвоения имения штата (поле Name пустое). Это ошибка в запросе, или вы пробовали только по двум штатам?
"вход Polygon является недопустимым, так как начальная и конечная точки внешнего кольца не совпадают. Начальная и конечная точки каждого кольца в многоугольнике должны совпадать."Почему "лечится надо..."
геометрия в shp'е не соответствует требованиям к геометрии в базе и ogr не может её импортировать и её надо "лечить", но я нашёл прогу для импорта
выполняем запрос:В этом слое 68 782 полигонов. Каких 4 млн точек?
Код: Выделить всё
SELECT sum([Geom].STNumPoints()) FROM [AtlanForests].[dbo].[P1_AtlanForests_epsg4326]
и получаем количество точек во всём слое
а запрос:
Код: Выделить всё
SELECT sum([Geom].STNumPoints()) FROM [AtlanForests].[dbo].[Two_Braz_States]
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Чтобы получилось четыре миллиона, в каждом полигоне должно быть всего-навсего порядка шестидесяти точек.
И что вообще значит это "Каких ...?" - вы что, больше доверяете своим ощущениям, чем цифрам, которые вам дает человек, на порядок лучше вас владеющий обработкой данных?
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Точно! Совсем забыла.
Я не могу понять, как в полигоне могут быть точки.и получаем количество точек во всём слое
Это какие-то другие точки, которые применимы при SQL запросах?
Чтобы это понять, нужно найти базовые упражнения - как делать такие запросы в SQL. Вижу по вашему сопровождению, что логика тут сильна отлична от ГИСовской. Точки какие-то в полигонах, "геометрия в shp'е не соответствует требованиям к геометрии в базе и ogr "
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Я не понимаю, как точки могут быть в полигоне? Или это узловые точки его контура? Типа в квадрате (неважно какой площади) будет 4 точки? А в круге - 0 точек??
-
- Гуру
- Сообщения: 5287
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
читаем про wktЯ не понимаю, как точки могут быть в полигоне?
полигон с дыркой:
точка - 35 10POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))
чисто ГИС'ская логика, даже я бы сказал геометрическая логикаВижу по вашему сопровождению, что логика тут сильна отлична от ГИСовской.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Мда, человек с диссертацией, жертва ArcGIS и собственных выдумок...
Любая геометрия в GIS (в CAD - иначе, там число примитивов больше) состоит из узлов. В окружности узлов, образующих ее контур, может быть хоть миллион - зависит от степени подробности того, как ломаная линия имитирует истинную окружность. Окружности, которые описаны точкой центра и радиусом, в GIS практически не встречаются, встречаются в CAD (софте для инженерной графики и моделирования).
Любая геометрия в GIS (в CAD - иначе, там число примитивов больше) состоит из узлов. В окружности узлов, образующих ее контур, может быть хоть миллион - зависит от степени подробности того, как ломаная линия имитирует истинную окружность. Окружности, которые описаны точкой центра и радиусом, в GIS практически не встречаются, встречаются в CAD (софте для инженерной графики и моделирования).
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Да.. как то не сообразила. Не то что "не знала", но в работе учет точек полигонов не приходилось вести, и выпало из активного мышления. Замкнуло на "point object", который не имеет площади (от этого и странным показалось наличие точек в полигоне). Конечно, да.. полигон должен описываться узлами его границ (точками с координатами), а чем же еще.ericsson писал(а): ↑16 сен 2017, 22:16Мда, человек с диссертацией, жертва ArcGIS и собственных выдумок...
Любая геометрия в GIS (в CAD - иначе, там число примитивов больше) состоит из узлов. В окружности узлов, образующих ее контур, может быть хоть миллион - зависит от степени подробности того, как ломаная линия имитирует истинную окружность. Окружности, которые описаны точкой центра и радиусом, в GIS практически не встречаются, встречаются в CAD (софте для инженерной графики и моделирования).
- Natalia Novoselova
- Гуру
- Сообщения: 3020
- Зарегистрирован: 15 янв 2013, 20:14
- Репутация: 69
- Ваше звание: Лиса
- Откуда: **
- Контактная информация:
Re: Как в QGIS присвоить к полигону атрибутивные данные из наложенных полигонов?
Сравнила сделанное через Spatial Query, Intersect и по SQL запросу.
У меня вопрос – вы руками ведь данные не правили? Дело в том, что некоторые полигоны пересекают границы штата. И у меня (при использовании «Intersect» в Spatial Query) они присвоились сразу двум штатам. То есть надо править вручную (оставляя в том штате, где большая площадь) или так и оставлять. А в вашем примере – сразу полигоны остались в том штате, в котором они занимают наибольшую площадь. По крайней мере, так вышло по нескольким просмотренным примерам.
Это вы достигли путем формулы запроса ?
Неоднозначная штука. Так, если полигон занимает в двух штатах примерно равную площадь, его логичней и оставить в двух штатах (для моего анализа по штатам). Но где в одном штате он проходит по границе, а в другом – его основная площадь, то из первого его лучше исключать. И вот интересно, это вы так тонко смогли сделать запрос, или вручную правили?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 23 гостя