J'ai une classe d'entités ponctuelles assez importante dans une géodatabase fichier (~ 4 000 000 d'enregistrements). Il s'agit d'une grille de points régulière avec une résolution de 100 m.
J'ai besoin d'effectuer une sorte de généralisation sur cette couche. Pour cela, je crée une nouvelle grille où chaque point se situe au milieu de 4 "anciens" points:
* * * *
o o o
* * * *
o o o
* * * *
[*] = point de la grille d'origine - [o] = point de la nouvelle grille
La valeur d'attribut de chaque nouveau point est calculée sur la base des valeurs pondérées de ses 4 voisins dans l'ancienne grille. Je boucle donc sur tous les points de ma nouvelle grille et, pour chacun d'eux, je boucle sur tous les points de mon ancienne grille, afin de trouver les voisins (en comparant les valeurs de X et Y dans la table attributaire). Une fois que 4 voisins ont été trouvés, nous sortons de la boucle.
Il n'y a pas de complexité méthodologique ici mais mon problème est que, sur la base de mes premiers tests, ce script va durer des semaines ...
Voyez-vous une possibilité de le rendre plus efficace? Quelques idées sur le dessus de ma tête:
- Indexez les champs X et Y => Je l'ai fait mais je n'ai pas remarqué de changement de performance significatif
- Effectuez une requête spatiale pour trouver les voisins plutôt que basée sur un attribut. Cela aiderait-il réellement? Quelle fonction spatiale dans ArcGIS devrait faire le travail? Je doute que, par exemple, la mise en mémoire tampon de chaque nouveau point se révélera plus efficace
- Transformez la classe d'entités en tableau NumPy. Est-ce que cela aiderait? Je n'ai pas beaucoup travaillé avec NumPy jusqu'à présent et je ne voudrais pas m'y plonger à moins que quelqu'un ne me dise que cela pourrait vraiment aider à réduire le temps de traitement
- Rien d'autre?