Suite

Des problèmes avec Reclassify et RemapRange dans ArcPy ?


J'ai un peu de mal avec un script qui utilise ArcPy. Je reçois toujours l'erreur suivante :

ExecuteError : ERREUR 000622 : Échec de l'exécution (reclassification). Les paramètres ne sont pas valides. ERREUR 000628 : Impossible de définir l'entrée dans le remappage des paramètres.

Cela semblerait simple à corriger, mais j'ai atteint le bord de mes connaissances sans avancer. La chose la plus frustrante est que RemapRange n'est pas jetant des erreurs du tout, donc je ne sais pas pourquoi Reclassify semble avoir un problème avec le type de paramètre que je lui donne. La partie pertinente de mon code est ci-dessous.

# Définir le nom du raster en sortie out = "MMRWFS__for" + str(forestValue) + "__gra" + str(grassValue) + "__agr" + str(agricultureValue)+ "__dev" + str(developmentValue) + ".asc" outASCII = "Resistance Surfaces" + out # Définir les plages de reclassification arcpy.CheckOutExtension("Spatial") reclassifyValues ​​= RemapRange([[11,12,"NODATA"], [21,24,developmentValue],[41,43,forestValue ],[71,81,grassValue],[82,82,agricultureValue],[90,95,wetlandValue]]) # 11 Eau libre # 12 Glace/neige pérenne # 21 Aménagée, Espace libre $ # 22 Aménagée, Faible intensité # 23 Aménagé, à intensité moyenne # 24 Aménagé, à intensité élevée # 31 $ Terres arides # 41 Forêt de feuillus * # 42 Forêt sempervirente * # 43 Forêt mixte * # 52 Arbuste/broussaille # 71 Prairie/Herbacée ** # 81 Pâturage Foin ** # 82 Cultures cultivées *** # 90 Zones humides ligneuses 000 # 95 Zones humides herbacées émergentes 000 # PROCESSUS : Reclasser et convertir en ASCII print "Creating " + out arcpy.RasterToASCII_conversion(Reclassify(inRaster, reclassField, reclassifyValues, "NODATA" ), env.workspace + "" + outASCII)

Toutes les importations, etc. sont correctes. Je suis sûr qu'il y a quelque chose d'évident ici qui me manque en tant que novice.


Une analyse

Je voudrais partager le processus de découverte et de résolution du problème (dont la solution est documentée dans les commentaires à la question) car cela fonctionne dans de nombreuses circonstances similaires.

  1. Regardez le message d'erreur. Vraiment lis il. Celui-ci dit

    Les paramètres ne sont pas valides.

  2. Faites des suppositions sur ce que signifie ce charabia. (L'expérience aide énormément ici.) J'interprète les "paramètres" comme étant les arguments dans un appel fonctionnel.

  3. Devinez où l'erreur s'est produite. (Un bon logiciel vous le dira, mais cela ne s'est pas produit ici.) Une façon de deviner est de commencer par supprimer le code par le bas. Si l'erreur ne se produit pas, rajoutez du code ; si cela persiste, retirez un peu plus de code. C'est un recherche binaire pour la source de l'erreur. Il convergera rapidement vers le (ou au moins un) problème. Dans le cas présent, aucune recherche n'était nécessaire car on nous a présenté une question bien formulée dans laquelle le code est déjà court. Il est clair que l'erreur doit être localisée dans l'invocation deRemapRange.

  4. Recherchez et lisez la documentation. ArcGIS dispose d'une aide publique complète. (J'ai recherché "arcgis help remaprange" sur Google et j'ai obtenu la bonne page sur le premier coup.)

    Parce que cette erreur particulière semble avoir quelque chose à voir avec l'appel de fonction lui-même, je suis passé directement à la documentation de la syntaxe, à la recherche d'une description des arguments ("paramètres") attendus par cette fonction :

    Les composants sont :

    startValue-La limite inférieure… (type de données : double) endValue-La limite supérieure… (type de données : double) newValue-La nouvelle valeur à attribuer… (type de données : entier)
  5. Comparez le code à la documentation. À ce stade, j'ai pu détecter un problème possible : l'un des arguments, "NODATA", n'était clairement pas d'un type de données entier, contrairement à ces exigences explicites. Cependant, j'ai été bloqué parce que le code utilise des variables pour certains des arguments - et la question n'a fourni aucune information sur ces variables.

Cela laissait deux pistes d'investigation évidentes à poursuivre. (Est-ce que "NODATA" est autorisé ? Quelles sont les valeurs des variables ?) Il s'est avéré que "NODATA" est en fait valide, comme expliqué ailleurs dans la page d'aide en contradiction avec la citation précédente. L'OP (affiche originale) a trouvé cela (je ne l'ai pas fait). Je ferai seulement remarquer que les pages d'aide qui se contredisent (les chaînes ne sont certainement pas des entiers) peuvent être pires que sans valeur, et en rester là. Le PO, reprenant l'orientation de cette enquête, a vérifié les types des autres arguments et a trouvé qu'un (au moins) n'était pas un entier. Problème résolu.


Rétrospective

Il n'est pas rare que le logiciel nous fasse défaut (notez le manque d'informations utiles et claires dans le message d'erreur) et que la documentation soit confuse voire erronée. C'est en partie ce qui rend l'informatique judiciaire si amusante : malgré de tels obstacles, il existe suffisamment d'indices pour que vous puissiez presque toujours localiser et résoudre un problème. C'est aussi ce qui rend parfois le travail avec de tels logiciels si exaspérant : n'est-ce pas évident qu'il pourrait être amélioré, comment pourrait-il être amélioré, et que des améliorations exigeraient si peu d'efforts ?


Voir la vidéo: Reclassifying Raster Data (Octobre 2021).