Страница 1 из 1

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

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

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

Добавлено: 06 дек 2017, 19:13
jerry-maori
делать через питон. там можно попробовать развести по потокам.

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

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

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

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

Добавлено: 06 дек 2017, 20:48
trir
но в нормальной системе должны быть пространственные индексы
для этого надо заставить GDAL делать индексы при открытии каждого слоя

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

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

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

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

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

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

Добавлено: 08 дек 2017, 06:59
trir
было
делать через питон. там можно попробовать развести по потокам.
потоки в python - это миф

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

Добавлено: 08 дек 2017, 07:44
Denis Rykov
Потоки в Python - это не миф, всё зависит от задач - где-то от их использования можно получить выигрыш, где-то нет.

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

Добавлено: 08 дек 2017, 08:54
jerry-maori
Потоки в питон миф только в Windows.
В Linux -- всё ок и норм.

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

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

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

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

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