Voir ce lien pour plus de détails.
Le problème:
Je veux parcourir un raster continu (un qui n'a pas de table attributaire), cellule par cellule, et obtenir la valeur de la cellule. Je veux prendre ces valeurs et exécuter des conditions dessus, en émulant les étapes d'algèbre de carte détaillées ci-dessous sans réellement utiliser la calculatrice raster.
Par demande de commentaires ci-dessous, j'ai ajouté des détails fournissant un contexte au problème et justifiant la nécessité de mettre en œuvre une méthode en tant que telle dans la section ci-dessous intitulée "L'analyse nécessaire:".
L'analyse proposée ci-dessous, tout en étant pertinente pour mon problème en fournissant un contexte, n'a pas besoin d'être implémentée dans une réponse. La portée de la question ne concerne que l'itération à travers un raster continu pour obtenir / définir les valeurs des cellules.
L'analyse avait besoin:
Si TOUTES les conditions suivantes sont remplies, donnez à la cellule de sortie une valeur de 1. Ne donnez à la cellule de sortie une valeur de 0 que si aucune des conditions n'est remplie.
Condition 1: si la valeur de la cellule est supérieure aux cellules supérieure et inférieure, donnez la valeur 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Où le fichier noyau ressemble à ceci:
3 3
0 1 0
0 0 0
0 1 0
Condition 2: si la valeur de la cellule est supérieure aux cellules gauche et droite, donnez la valeur 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Où le fichier noyau ressemble à ceci:
3 3
0 0 0
1 0 1
0 0 0
Condition 3: si la valeur de la cellule est supérieure aux cellules de gauche et de droite, donnez la valeur 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Où le fichier noyau ressemble à ceci:
3 3
1 0 0
0 0 0
0 0 1
Condition 4: si la valeur de la cellule est supérieure aux cellules de gauche et de droite, donnez la valeur 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Où le fichier noyau ressemble à ceci:
3 3
0 0 1
0 0 0
1 0 0
Condition 5: si l' une des cellules adjacentes a une valeur ÉGALE à la cellule centrale, donnez au raster en sortie une valeur de 1 (en utilisant la variété focale avec deux calculs de voisinage les plus proches )
Pourquoi ne pas utiliser l'algèbre cartographique?
Il a été noté ci-dessous que mon problème pourrait être résolu en utilisant l'algèbre de la carte, mais comme vu ci-dessus, il s'agit d'un total de six calculs raster, plus un pour combiner tous les rasters créés ensemble. Il me semble qu'il est beaucoup plus efficace de procéder cellule par cellule et de faire toutes les comparaisons à la fois dans chaque cellule au lieu de parcourir sept fois individuellement et d'utiliser beaucoup de mémoire pour créer sept rasters.
Comment le problème doit-il être attaqué?
Le lien ci-dessus conseille d'utiliser l'interface IPixelBlock, mais il n'est pas clair dans la documentation ESRI si vous accédez réellement à une seule valeur de cellule via IPixelBlock, ou si vous accédez à plusieurs valeurs de cellule à partir de la taille de l'IPixelBlock que vous définissez. Une bonne réponse devrait suggérer une méthode pour accéder aux valeurs de cellule d'un raster continu et fournir une explication de la méthodologie derrière le code, si ce n'est apparemment évident.
En résumé:
Quelle est la meilleure méthode pour parcourir chaque cellule d'un raster CONTINU (qui n'a pas de table attributaire ) pour accéder à ses valeurs de cellule?
Une bonne réponse n'a pas besoin de mettre en œuvre les étapes d'analyse décrites ci-dessus, il suffit de fournir une méthodologie pour accéder aux valeurs de cellule d'un raster.