У меня есть довольно большой класс точечных объектов в файловой базе геоданных (~ 4 000 000 записей). Это регулярная сетка точек с разрешением 100 м.
Мне нужно выполнить своего рода обобщение на этом слое. Для этого я создаю новую сетку, где каждая точка находится в середине 4 «старых» точек:
* * * *
o o o
* * * *
o o o
* * * *
[*] = точка исходной сетки - [o] = точка новой сетки
Значение атрибута каждой новой точки рассчитывается на основе взвешенных значений ее 4-х соседей в старой сетке. Таким образом, я зацикливаюсь на всех точках моей новой сетки и для каждой из них я зацикливаюсь на всех точках моей старой сетки, чтобы найти соседей (сравнивая значения X и Y в таблице атрибутов). Как только 4 соседа были найдены, мы выходим из цикла.
Здесь нет методологической сложности, но моя проблема в том, что, основываясь на моих первых тестах, этот сценарий будет длиться недели, чтобы завершиться ...
Видите ли вы возможность сделать его более эффективным? Несколько идей на моей голове:
- Индексируйте поля X и Y => Я сделал это, но не заметил значительного изменения производительности
- Сделайте пространственный запрос, чтобы найти соседей, а не на основе атрибутов. Это действительно поможет? Какая пространственная функция в ArcGIS должна выполнять эту работу? Я сомневаюсь, что, например, буферизация каждой новой точки окажется более эффективной
- Преобразуйте класс пространственных объектов в массив NumPy. Это поможет? До сих пор я мало работал с NumPy, и я не хотел бы углубляться в это, если кто-то не скажет мне, что это действительно может помочь сократить время обработки
- Что-нибудь еще?