Eu sou novo no Python e tenho tentado codificar um script no estilo de calculadora raster. Basicamente, quero converter uma varredura que tenha valores de 0 a -10.000 em uma varredura que é preenchida por 1s entre determinados valores.
O motivo pelo qual desejo fazê-lo em Python é porque, eventualmente, quero automatizar esse processo para poder escolher valores diferentes (por exemplo, 0 a -10, -5 a -25 etc.) e acabar com uma varredura de 1s para cada . Meu objetivo, então, é convertê-los em polígonos, para que eu possa executar várias operações de clipe de vetor em cerca de 800 shapefiles.
Eu escrevi um script que produz uma nova varredura no final, mas em vez de essa grade estar cheia de 1s, ela tem valores de 0 a 255, então em algum lugar do código há um erro. Ficaria muito grato se alguém puder encontrá-lo! Se alguém tiver uma maneira de acelerar o código ou uma idéia melhor de como eu também posso fazer tudo isso, também seria interessante saber.
Aqui está o meu 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")
fonte
arcpy.env.overwriteOutput = 1
, tente usar:arcpy.env.overwriteOutput = True
Python faz distinção entre maiúsculas e minúsculas e em seus comentários você tem VERDADEIRO.Respostas:
Eu acho que o problema está nessa expressão
Con espera o seguinte formato
Que no seu caso
pode ser dividido em
in_conditional_raster,
(inRaster <= var[0])&(inRaster <= var[1])
in_true_raster_or_constant,
1
Estou um pouco confuso com o que você está tentando fazer. Parece que você deseja transformar em 1 os valores que se encaixam nos dois critérios a seguir
inRaster <= -2500
inRaster <= -3000
Essas duas expressões podem ser reduzidas a
inRaster <= -3000
.Portanto, todos os pixels com valores menores ou iguais a -3000 foram girados para 1. O restante é deixado como está. Pelo menos é o que o seu código diz. Não há como ter certeza, a menos que você publique a tabela de atributos dessa varredura ou o próprio arquivo de varredura real.
Eu acho que você quis dizer
(inRaster <= var[0])&(inRaster > var[1])
. Dessa forma, você capturaria valores entre -2500 e -3000.Btw, qual é o intervalo de valores na varredura original?
fonte