J'ai un outil basé sur un script Python dans ArcGIS. L'un des paramètres de l'outil est un fichier raster en entrée, que j'ai défini (en utilisant les propriétés de l'outil dans la boîte à outils) pour être une couche raster. Cela signifie que lorsque j'exécute l'outil, j'ai la possibilité de sélectionner ce paramètre dans une liste déroulante des couches raster actuellement chargées, ou en naviguant pour trouver une nouvelle couche raster dans le système de fichiers.
J'utilise ensuite le arcpy.GetParameterAsText(0)
code standard pour obtenir le paramètre dans mon script Python. Cela fonctionne bien lorsque je sélectionne un fichier en parcourant le système de fichiers, car le texte dans la boîte de dialogue est le chemin d'accès complet au fichier, mais lorsque je sélectionne simplement dans la liste déroulante, le texte que je récupère n'est que le nom de fichier (par exemple file.tif
) . .
Le code que j'utilise doit connaître le chemin d'accès complet au fichier - comment puis-je l'obtenir?
Si je pouvais supposer que le fichier était toujours dans l'espace de travail, je pourrais ajouter le nom de fichier à arcpy.env.workspace
, mais je ne peux pas le supposer. Dois-je parcourir toutes les couches chargées jusqu'à ce que j'en trouve une du même nom, puis trouve son chemin complet, ou existe-t-il un moyen plus simple?
la source
Réponses:
J'ai eu le même problème il y a quelque temps. C'est une solution assez simple, utilisez simplement l'outil de description.
Vous obtenez déjà le nom de la couche à partir de vos paramètres. Il vous suffit donc de décrire le calque, de trouver le chemin puis de fusionner les deux.
Cela ne devrait pas poser de problème.
J'espère que cela t'aides
la source
Si vous souhaitez tenir compte de la possibilité que l'utilisateur spécifie un raster dans le système de fichiers:
la source
Il existe également un moyen un peu plus court de le faire. Les objets de données décrivent ont une propriété catalogPath qui est le chemin d'accès complet au fichier.
Avec la version 10.1 que nous utilisons, vous pouvez faire:
la source
Vous pouvez utiliser
arcpy.GetParameter(0)
plutôt quearcpy.GetParameterAsText(0)
car cela obtiendra l'objet calque plutôt qu'une simple chaîne avec le nom du calque.Si vous pouvez obtenir un objet calque, vous pouvez obtenir
Layer
directement les propriétés et éviter d'avoir à faire unDescribe
.Quelque chose comme ça pourrait vous donner ce que vous voulez:
la source
Voici ce que j'ai fini par utiliser. Il fonctionne comme un charme.
la source