Eu tenho uma classe de recurso de ponto bastante grande em um geodatabase de arquivo (~ 4 000 000 registros). Esta é uma grade regular de pontos com uma resolução de 100m.
Eu preciso executar um tipo de generalização nessa camada. Para isso, crio uma nova grade onde cada ponto fica no meio de 4 pontos "antigos":
* * * *
o o o
* * * *
o o o
* * * *
[*] = ponto da grade original - [o] = ponto da nova grade
O valor do atributo de cada novo ponto é calculado com base nos valores ponderados de seus 4 vizinhos na grade antiga. Assim, faço um loop em todos os pontos da minha nova grade e, para cada um deles, faço um loop em todos os pontos da minha grade antiga, para encontrar os vizinhos (comparando os valores de X e Y na tabela de atributos). Uma vez que quatro vizinhos foram encontrados, saímos do circuito.
Não há complexidade metodológica aqui, mas meu problema é que, com base nos meus primeiros testes, esse script durará semanas para ser concluído ...
Você vê alguma possibilidade de torná-lo mais eficiente? Algumas idéias no topo da minha cabeça:
- Indexe os campos X e Y => fiz isso, mas não percebi nenhuma alteração significativa no desempenho
- Faça uma consulta espacial para encontrar os vizinhos em vez de uma baseada em atributos. Isso realmente ajudaria? Que função espacial no ArcGIS deve fazer o trabalho? Duvido que, por exemplo, tamponar cada novo ponto seja mais eficiente
- Transforme a classe de recurso em uma matriz NumPy. Isso ajudaria? Até agora, não trabalhei muito com o NumPy e não gostaria de me aprofundar, a menos que alguém me diga que isso pode realmente ajudar a reduzir o tempo de processamento
- Algo mais?