Tengo una herramienta basada en script Python en ArcGIS. Uno de los parámetros para la herramienta es un archivo ráster de entrada, que he configurado (usando las propiedades de la herramienta dentro de la caja de herramientas) para que sea una capa ráster. Esto significa que cuando ejecuto la herramienta tengo la opción de seleccionar ese parámetro de una lista desplegable de capas ráster cargadas actualmente, o navegando para encontrar una nueva capa ráster dentro del sistema de archivos.
Luego estoy usando el arcpy.GetParameterAsText(0)
código estándar para obtener el parámetro en mi script Python. Esto funciona bien cuando selecciono un archivo navegando a través del sistema de archivos, ya que el texto en el cuadro de diálogo es la ruta completa al archivo, pero cuando solo selecciono de la lista desplegable, el texto que recibo es solo el nombre de archivo (p. Ej. file.tif
) .
El código que estoy ejecutando necesita conocer la ruta completa del archivo. ¿Cómo obtengo esto?
Si pudiera suponer que el archivo siempre estaba en el espacio de trabajo, podría agregar el nombre de archivo arcpy.env.workspace
, pero no puedo suponer eso. ¿Necesito recorrer en iteración todas las capas que están cargadas hasta que encuentre una con el mismo nombre y luego encuentre su ruta completa, o hay una manera más fácil?
fuente
Respuestas:
Tuve el mismo problema hace un tiempo. Es una solución bastante fácil, solo use la herramienta de descripción.
Ya está obteniendo el nombre de la capa de sus parámetros. Entonces, todo lo que tiene que hacer es describir la capa, encontrar la ruta y luego fusionar las dos.
Eso no debería ser un problema.
Espero que esto ayude
fuente
Si desea tener en cuenta la posibilidad de que el usuario especifique un ráster dentro del sistema de archivos:
fuente
Hay una forma un poco más corta de hacer esto también. Los objetos de datos de descripción tienen una propiedad catalogPath que es la ruta completa al archivo.
Con la versión 10.1 que estamos usando, puede hacer:
fuente
Puede usarlo en
arcpy.GetParameter(0)
lugar de hacerlo,arcpy.GetParameterAsText(0)
ya que obtendrá el objeto de capa en lugar de solo una cadena con el nombre de la capa.Si puede obtener un objeto de capa, puede obtener las
Layer
propiedades directamente y ahorra tener que hacer unDescribe
.Algo como esto podría darte lo que quieres:
fuente
Esto es lo que terminé usando. Funciona a las mil maravillas.
fuente