8 votos

Cómo hacer un nuevo ráster utilizando con() script en Python?

Soy nuevo en Python y han estado tratando de código de un raster calculator estilo de secuencia de comandos. Básicamente, quiero convertir un mapa de bits que tiene valores de 0 a -10,000 en una trama que está poblada por 1s entre ciertos valores.

La razón por la que quiero hacer en Python es debido a que finalmente se desea automatizar este proceso para que yo pueda elegir diferentes valores (es decir, de 0 a -10, -5 -25 etc) y terminan con un ráster de 1s para cada uno. Mi objetivo es convertir estos polígonos para que yo pueda, a continuación, hacer un número de vector clip de operaciones a través de unos 800 shapefiles.

He escrito un script que produce una nueva trama en la final, pero en lugar de esta red está llena de 1s tiene valores 0-256, así que en algún lugar de mi código que hay un error. Yo estaría muy agradecido si alguien puede ver! Si alguien tiene una manera de acelerar el código o una mejor idea de cómo puedo hacer todo esto también que también sería interesante saber.

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")

Si alguien tiene alguna idea de que sería recibido con gratitud! Muchas gracias.

6voto

shsteimer Puntos 8749

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 su caso

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

puede dividirse en

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

  • in_true_raster_or_constant, 1

Estoy un poco confundida en cuanto a lo que estamos tratando de hacer. Parece que quiere convertirse en 1 de los valores que corresponden a ambos de los siguientes criterios

  • inRaster <= -2500
  • inRaster <= -3000

Esas dos expresiones pueden ser reducidos a inRaster <= -3000.

enter image description here

Así que todos los píxeles que tienen un valor menor o igual a -3000 han convertido a 1. El resto se deja como está. Al menos eso es lo que el código dice. No hay manera de saber con seguridad, aunque menos que usted publique la tabla de atributos de esta trama o el real archivo raster sí mismo.

Creo que significaba (inRaster <= var[0])&(inRaster > var[1]). De esa manera te ibas valores entre -2500 y -3000.

enter image description here

Por cierto, ¿cuál es el rango de valores en el original de la trama?

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