Eu tenho uma ferramenta baseada em script Python no ArcGIS. Um dos parâmetros para a ferramenta é um arquivo raster de entrada, que eu defini (usando as propriedades da ferramenta na caixa de ferramentas) para ser uma Camada Raster. Isso significa que, quando executo a ferramenta, obtenho a opção de selecionar esse parâmetro em uma lista suspensa de camadas de varredura carregadas no momento ou navegando para encontrar uma nova camada de varredura no sistema de arquivos.
Em seguida, estou usando o arcpy.GetParameterAsText(0)
código padrão para obter o parâmetro no meu script Python. Isso funciona bem quando seleciono um arquivo navegando pelo sistema de arquivos, pois o texto na caixa de diálogo é o caminho completo para o arquivo, mas quando seleciono na lista suspensa o texto que recebo é apenas o nome do arquivo (por exemplo, file.tif
) .
O código que estou executando precisa saber o caminho completo para o arquivo - como faço para obtê-lo?
Se eu pudesse assumir que o arquivo estava sempre no espaço de trabalho, poderia anexar o nome do arquivo arcpy.env.workspace
, mas não posso assumir isso. Preciso percorrer todas as camadas carregadas até encontrar uma com o mesmo nome e depois encontrar o caminho completo ou existe uma maneira mais fácil?
fonte
Respostas:
Eu tive o mesmo problema há um tempo. É uma solução bastante fácil, basta usar a ferramenta de descrição.
Você já está recebendo o nome da camada de seus parâmetros. Então, tudo o que você precisa fazer é descrever a camada, encontrar o caminho e mesclar os dois.
Isso não deve causar problemas.
Espero que isto ajude
fonte
Se você deseja considerar a possibilidade de o usuário especificar uma varredura no sistema de arquivos:
fonte
Há uma maneira um pouco mais curta de fazer isso também. Os objetos de dados descrever têm uma propriedade catalogPath, que é o caminho completo para o arquivo.
Com a versão 10.1 que estamos usando, você pode:
fonte
Você pode usar
arcpy.GetParameter(0)
e não,arcpy.GetParameterAsText(0)
pois isso obterá o objeto de camada, em vez de apenas uma string com o nome da camada.Se você pode obter um objeto de camada, pode obter as
Layer
propriedades diretamente e evitar a necessidade de fazer aDescribe
.Algo assim pode dar o que você deseja:
fonte