Оптимизация объединения атрибутов

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
slimfedya
Новоприбывший
Сообщения: 6
Зарегистрирован: 02 сен 2017, 04:48
Репутация: 0
Откуда: Москва

Оптимизация объединения атрибутов

Сообщение slimfedya » 06 дек 2017, 18:32

Добрый день! Столкнулся со следующей проблемой:
Есть слой точек и слой полигонов, задача в том, чтобы присвоить каждой точке атрибут полигона, в который она попадает.
Нужный инструмент известен: Объединение атрибутов по районам. Но тут и возникает проблема. Точек около 1,5 тыс., полигонов - около 80 тыс. При запуске алгоритма QGIS стабильно умирает - оставлял думать на 2,5 часа, результата 0 - все висит. Пробовал объединять полигоны в составные объекты - без толку. При этом те же 1,5к точек с 2-3 тыс. полигонов объединяются довольно быстро.
Вопрос - как можно оптимизировать работу алгоритма и все-таки получить результат?

Аватара пользователя
jerry-maori
Завсегдатай
Сообщения: 465
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 98
Ваше звание: it-дворник
Откуда: Нижний Новгород

Re: Оптимизация объединения атрибутов

Сообщение jerry-maori » 06 дек 2017, 19:13

делать через питон. там можно попробовать развести по потокам.

gamm
Гуру
Сообщения: 2557
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 530
Ваше звание: программист
Откуда: Казань

Re: Оптимизация объединения атрибутов

Сообщение gamm » 06 дек 2017, 20:36

slimfedya писал(а):
06 дек 2017, 18:32
Вопрос - как можно оптимизировать работу алгоритма и все-таки получить результат?
не мудрите, снесите ID полигонов на мелкий растр, и сделайте выборку с растра в точках, потом по ID подцепите тематику. Все это в R (пакет raster), или вообще через утилиты GDAL, будет работать меньше минуты.

P.S. Я не знаю что там в QGIS наделали, но в нормальной системе должны быть пространственные индексы, и должно работать быстрее. Мы когда-то (лет 20 назад) выгружали охватывающие прямоугольники полигонов в базу FoxPro, запросом выбирали кандидатов для каждой точки, и потом искали пересечения только с кандидатами (такой запрос нынче можно и в Ёкселе соорудить, наверное).

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

Re: Оптимизация объединения атрибутов

Сообщение trir » 06 дек 2017, 20:48

но в нормальной системе должны быть пространственные индексы
для этого надо заставить GDAL делать индексы при открытии каждого слоя

1. Загрузить в БД
2. Построить индексы
3. Выполнить запрос

Игорь Белов
Гуру
Сообщения: 1446
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 894
Откуда: Казань

Re: Оптимизация объединения атрибутов

Сообщение Игорь Белов » 07 дек 2017, 08:27

Предположим, данные в шейпфайлах. Если Вы не создали пространственные индексы, сделайте это:
[Vector] → [Data management tools] → [Create spatial index]
Возможно, этого будет достаточно.

slimfedya
Новоприбывший
Сообщения: 6
Зарегистрирован: 02 сен 2017, 04:48
Репутация: 0
Откуда: Москва

Re: Оптимизация объединения атрибутов

Сообщение slimfedya » 08 дек 2017, 01:43

Игорь Белов писал(а):
07 дек 2017, 08:27
Возможно, этого будет достаточно.
Увы, по-прежнему все висит.

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

Re: Оптимизация объединения атрибутов

Сообщение trir » 08 дек 2017, 06:59

было
делать через питон. там можно попробовать развести по потокам.
потоки в python - это миф

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3325
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 495
Ваше звание: Author
Контактная информация:

Re: Оптимизация объединения атрибутов

Сообщение Denis Rykov » 08 дек 2017, 07:44

Потоки в Python - это не миф, всё зависит от задач - где-то от их использования можно получить выигрыш, где-то нет.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
jerry-maori
Завсегдатай
Сообщения: 465
Зарегистрирован: 22 авг 2012, 17:02
Репутация: 98
Ваше звание: it-дворник
Откуда: Нижний Новгород

Re: Оптимизация объединения атрибутов

Сообщение jerry-maori » 08 дек 2017, 08:54

Потоки в питон миф только в Windows.
В Linux -- всё ок и норм.

Александр Мурый
Гуру
Сообщения: 5059
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 715
Ваше звание: званий не имею
Откуда: Москва

Re: Оптимизация объединения атрибутов

Сообщение Александр Мурый » 08 дек 2017, 11:54

По моим наблюдениям, проблемы возникают с топологически проблемными полигонами. Ну и количество вершин влияет тоже.
Если для теста построить простую прямоугольную сетку (например, штук 200 000 полигонов) и рэндомные точки в её пределах (например, штук 50 000), то объединение атрибутов проходит за считанные секунды.

Вариант через растр, который предложил gamm, самый адекватный, по-моему.
Редактор материалов, модератор форума

Игорь Белов
Гуру
Сообщения: 1446
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 894
Откуда: Казань

Re: Оптимизация объединения атрибутов

Сообщение Игорь Белов » 08 дек 2017, 12:31

Объединять полигоны плохая идея. Напротив, нужно перед индексацией разбить их на элементарные. Если же и элементарные полигоны велики и сложны, нарезать их мелкими тайлами.

Ответить

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