Soy nuevo en Python y he estado tratando de codificar un script de estilo de calculadora ráster. Básicamente, quiero convertir un ráster que tenga valores de 0 a -10,000 en un ráster que esté poblado por 1s entre ciertos valores.
La razón por la que quiero hacerlo en Python es porque eventualmente quiero automatizar este proceso para poder elegir diferentes valores (es decir, 0 a -10, -5 a -25, etc.) y terminar con una trama de 1s para cada . Mi objetivo es convertirlos en polígonos para poder realizar varias operaciones de recorte de vectores en unos 800 archivos de forma.
Escribí un script que produce un nuevo ráster al final, pero en lugar de que esta cuadrícula esté llena de 1s, tiene valores 0-256, por lo que en algún lugar de mi código hay un error. Estaría agradecido si alguien puede verlo! Si alguien tiene una manera de acelerar el código o una mejor idea de cómo puedo hacer todo esto, entonces también sería interesante saberlo.
Aquí está mi código:
import arcpy
from arcpy import env
from arcpy.sa import *
arcpy.env.overwriteOutput = 1 #this also doesn't work by the way, I have also tried
#TRUE, no errors come up but it still doesn't let me overwrite the output file
#Set environment settings
env.workspace = "C:/folderlocation where inRaster is stored"
# Set local variables
inRaster = Raster("inputraster")
# Check out Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# depths wanted from inputraster raster
var = [-2500,-3000] #min depth, max depth
#Execute and save Con
OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)
OutRaster.save("C:/drivelocation/outputfilename")
fuente
arcpy.env.overwriteOutput = 1
, intenta usar:arcpy.env.overwriteOutput = True
Python distingue entre mayúsculas y minúsculas y en tus comentarios tienes VERDADERO.Respuestas:
Creo que el problema es con esta expresión.
Con espera el siguiente formato
Que en tu caso
se puede dividir en
in_conditional_raster,
(inRaster <= var[0])&(inRaster <= var[1])
in_true_raster_or_constant,
1
Estoy un poco confundido sobre lo que estás tratando de hacer. Parece que quiere convertir en 1 los valores que se ajustan a los dos criterios siguientes
inRaster <= -2500
inRaster <= -3000
Esas dos expresiones se pueden reducir a
inRaster <= -3000
.Por lo tanto, todos los píxeles que tienen valores inferiores o iguales a -3000 se han convertido en 1. El resto se deja como está. Al menos eso es lo que dice tu código. Sin embargo, no hay forma de saberlo con seguridad a menos que publique la tabla de atributos de este ráster o el archivo ráster en sí.
Creo que quisiste decir
(inRaster <= var[0])&(inRaster > var[1])
. De esa forma, capturaría valores entre -2500 y -3000.Por cierto, ¿cuál es el rango de valores en el ráster original?
fuente