¿Hacer un nuevo ráster usando el script con () usando ArcPy?

8

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")
usuario12433
fuente
La línea donde dices arcpy.env.overwriteOutput = 1, intenta usar: arcpy.env.overwriteOutput = True Python distingue entre mayúsculas y minúsculas y en tus comentarios tienes VERDADERO.
Fezter
Desafortunadamente, todavía no puedo hacer que la función de sobrescritura funcione: True tiene el mismo resultado que VERDADERO y 1 y obtengo el error. OutRaster.save ("C: / ...") RuntimeError: ERROR 000871: C: ....: ¿No se puede eliminar la salida ??????????????????? ¿Alguna idea más?
usuario12433

Respuestas:

6

Creo que el problema es con esta expresión.

OutRaster = Con((inRaster <= var[0])&(inRaster <= var[1]),1)

Con espera el siguiente formato

Con (in_conditional_raster, in_true_raster_or_constant, {in_false_raster_or_constant}, {where_clause})

Que en tu caso

Con((inRaster <= var[0])&(inRaster <= var[1]),1)

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.

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

Por cierto, ¿cuál es el rango de valores en el ráster original?

RK
fuente
Gracias por su respuesta, ahora me siento bastante tonto. Creo que mientras intentaba cosas diferentes con el código, pude cambiar el signo mayor a menor y no lo había recogido. Cuando cambio el código a: InConRaster = ((inRaster <= var [0]) & (inRaster> = var [1])) OutRaster = Con (InConRaster, 1) entonces funciona, así que gracias por la sugerencia de formato. Solo para tu información, cuando lo probé con el signo correcto pero no cambié la expresión de estafa, todavía no funcionaba, así que parece que este es el formato que se necesita. Realmente agradecido por la ayuda. Gracias
user12433
De nada :) No olvides hacer clic en la marca de verificación ;-)
RK