Suite

Rasters séquentiels - quand le point x a-t-il changé


Utilisation d'ArcGIS 10.1 avec les analystes spatiaux et 3D et Python 2.7

J'ai une série de rasters reclassés dans lesquels chaque cellule est soit un, soit zéro. Je dois créer par programmation un seul raster qui indique quand chaque cellule a pour la première fois la valeur un. Les rasters contiennent la date dans le nom de fichier, ainsi que dans un champ de date dans le raster. (Description plus détaillée des données ci-dessous)

Je suis complètement bloqué. J'ai essayé d'utiliser la fonction Plus dans Spatial Analyst, mais je perds la date. J'ai très peu d'expérience avec les rasters, j'espère donc que le problème vient de ma méconnaissance de la terminologie et que quelqu'un pourra m'orienter dans la bonne direction.

Si je peux comprendre comment le faire "à la main" dans ArcMap, je suis convaincu que je peux créer les scripts pour automatiser le processus. Bien sûr, un script prêt à l'emploi serait très sympa :^)

Les données correspondent à 35 ans de fichiers de formes de concentration de glace de mer du Service canadien des glaces. Des tifs écrêtés ont été générés et reclassés de sorte que chaque cellule du raster ait une valeur de l'une, si la concentration de glace est inférieure à 50 % (démolition), ou de zéro si ce n'est pas le cas (c'est-à-dire concentration supérieure à 50 % ou terre) . J'ai ensuite ajouté la date, analysée à partir du nom de fichier, à l'aide de Create et CalculateField_management. L'objectif est de créer des cartes annuelles montrant la progression de la débâcle à utiliser dans les analyses biologiques.


Parce que cette analyse est local--le résultat dans n'importe quelle cellule ne dépend que de la pile de valeurs dans cette cellule--nous pourrions d'abord nous inspirer de l'ensemble d'outils local. Il est préférable que de tels outils puissent être appliqués sans aucune transformation préalable des données, car cela évite une boucle potentiellement longue sur tous les rasters.

La solution la plus générale disponible sous cette forme utilise peut-être la position la plus élevée. Ce calcul s'applique à une séquence de rasters, qui doivent être parfaitement alignés et enregistrés (il n'y a donc aucune complication à rééchantillonner les valeurs). Il renvoie l'indice 1, 2, 3,… , etc., du premier raster auquel la valeur maximale de la séquence est rencontrée. Ainsi, lorsque la séquence est purement binaire et qu'il y en a un, la position de sa première occurrence est renvoyée - et c'est exactement ce qui est nécessaire.

Lorsqu'il y a un raster par unité de temps (comme une année), sans intervalle, l'ajout de l'année précédant l'année de début convertira ce résultat en date raster. Sinon, reclasser le résultat pour obtenir les années correspondantes.

Deux mises en garde s'imposent.

Premièrement, si l'un des rasters en entrée a NoData dans une cellule, la sortie de cette cellule sera NoData. Si cela pose problème, les rasters devront être pré-traités pour remplacer les valeurs NoData par des codes appropriés. Une valeur négative constante pourrait bien fonctionner. Utilisez un opérateur conditionnel pour effectuer les remplacements.

Deuxièmement, si toutes les valeurs d'une cellule sont des zéros, alorsPosition la plus élevéerenverra l'index du premier de ces zéros, à savoir, 1. Cela ne se distingue pas du résultat d'une cellule où toutes les valeurs sont des uns. Bien qu'un post-traitement conditionnel puisse être utilisé pour discriminer ces deux situations, un moyen simple et élégant d'éviter ce problème consiste à créer un raster de zéros au départ et à le lister en premier dans le calcul. Désormais, un 1 sera renvoyé pour toute cellule à zéro et un 2 sera renvoyé pour toute cellule à un.