1 votos

Obteniendo el aspecto y reclasificando archivos ráster usando Python en un bucle

Usando Python en PythonWin 2.7.3, intenté obtener archivos de aspecto de una lista de archivos ráster en una carpeta (llamada database_Dem20) y guardarla en otra carpeta, database_Dem20/testOutput. En el mismo bucle, después de obtener el archivo de aspecto, quiero reclasificar este archivo de aspecto utilizando la caja de herramientas de reclasificación.

La primera parte, obtener el aspecto, está funcionando bien. Sin embargo, la parte de reclasificación tiene un error, ERROR 000622: Error al ejecutar (Reclasificar). Los parámetros no son válidos.

He leído la sintaxis del sitio web de Esri muchas veces e intenté escribir de diferentes maneras pero aún así no puedo averiguar dónde está el error.

¿Alguien puede ayudarme, por favor?

Aquí están mis scripts de Python:

# Importar el módulo arcpy
import arcpy
from arcpy import env
import os
from arcpy.sa import *

# Comprobar cualquier licencia necesaria
arcpy.CheckOutExtension("spatial")
arcpy.env.overwriteOutput = True  

# Establecer entornos de geoprocesamiento
env.workspace = "C:\\database_Dem20"
targetWorkspace = "C:\\database_Dem20\\testOutput"
print "==============================NUEVO INICIO================================"

# Proceso: Aspecto
# Obtener e imprimir una lista de TIFs desde el espacio de trabajo
rasters = arcpy.ListRasters("*", "TIF")

for raster in rasters:
    inRaster = raster
    outAspect = Aspect(inRaster)
    outAspect.save(targetWorkspace + "\\AA_" + inRaster)

    print("------------------------Reclasificar---------------------------------------")
    # Proceso: Reclasificar
    inAspect = str(outAspect)
    remap = RemapRange([[-1, -9.9999999999999995e-007, 1],[-9.9999999999999995e-007, 22.5, 2],[22.5, 67.5, 3],[67.5, 112.5, 4],[112.5, 157.5, 5],[157.5, 202.5, 6],[202.5, 247.5, 7],[247.5, 292.5, 8],[292.5, 337.5, 9],[337.5, 360, 10]])
    outReclassify = Reclassify(inAspect, "Value", remap ,"NODATA")
    outReclassify.save(targetWorkspace + "\\BB_" + inAspect)
    print("-------------------------Reclasificar--------------------------------------")
del raster
del rasters

1voto

Flinkman Puntos 4821

Novedoso en ArcGis 10+ es el objeto Raster... esto necesita un cambio de idioma para acostumbrarse a él. Para convertir una ruta de archivo en un ráster, use arcpy.Raster("d:\\ruta\\hacia\\raster.ext") o simplemente "raster.ext" si está en su arcpy.env.workspace actual. Esto también significa que debe deshacerse de estos objetos usando del.

Algunas herramientas funcionarán tanto con una ruta como con un objeto ráster como entrada, pero las salidas de arcpy.sa son ahora prácticamente exclusivamente objetos ráster.

En cuanto a su script, veo que hay un problema al intentar acceder a un ráster que está en un espacio de trabajo (carpeta) diferente... pero aún no estoy completamente seguro de qué le da str() de un objeto ráster.. los datos mismos están en su directorio %TMP%, en una carpeta llamada arcXXX que es única para la sesión (si es que la cadena de un objeto ráster devuelve algo en absoluto).

¿Qué tal intentarlo de esta manera?

for raster in rasters:
    inRaster = raster
    outAspect = Aspect(arcpy.Raster(inRaster)) # seguiría funcionando bien como una cadena
    outAspect.save(targetWorkspace + "\\AA_" + inRaster)

    print("------------------------Reclasificar---------------------------------------")
    # Proceso: Reclasificar
    # inAspect = str(outAspect) # aquí está tu problema, está en un espacio de trabajo diferente y no puede encontrarse

    remap = RemapRange([[-1, -9.9999999999999995e-007, 1],[-9.9999999999999995e-007, 22.5, 2],[22.5, 67.5, 3],[67.5, 112.5, 4],[112.5, 157.5, 5],[157.5, 202.5, 6],[202.5, 247.5, 7],[247.5, 292.5, 8],[292.5, 337.5, 9],[337.5, 360, 10]])
    outReclassify = Reclassify(outAspect, "Value", remap ,"NODATA") # ¿por qué no usar el objeto ráster aquí..
    del outAspect # ya he terminado con esto
    outReclassify.save(targetWorkspace + "\\BB_" + inAspect) # sin extensión, se guardará como GRID
    del outReclassify # ya he terminado con esto
    print("-------------------------Reclasificar--------------------------------------")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X