Fazendo nova varredura usando o script con () usando o ArcPy?

8

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")
user12433
fonte
Na linha em que você diz 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.
Fezter
Infelizmente ainda não consigo fazer com que a função de substituição funcione - True tem o mesmo resultado que TRUE e 1 e recebo o erro. OutRaster.save ("C: / ...") RuntimeError: ERRO 000871: C: ....: Não é possível excluir a saída ?????????????????? Mais alguma ideia?
User12433 6/11/12

Respostas:

6

Eu acho que o problema está nessa expressão

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

Con espera o seguinte formato

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

Que no seu caso

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

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.

insira a descrição da imagem aqui

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.

insira a descrição da imagem aqui

Btw, qual é o intervalo de valores na varredura original?

RK
fonte
Obrigado pela sua resposta - agora me sinto bem boba. Acho que, enquanto tentava coisas diferentes com o código, consegui virar o sinal de maior que para menor que um e não o peguei. Quando altero o código para: InConRaster = ((inRaster <= var [0]) & (inRaster> = var [1])) OutRaster = Con (InConRaster, 1), ele funciona, então, obrigado pela dica de formato. Apenas para sua informação, quando tentei com o sinal correto, mas não mudei a expressão contrária, ainda não funcionou, então parece que esse é o formato necessário. Muito grato pela ajuda. Obrigado
user12433
De nada :) Não se esqueça de clicar na marca de seleção ;-)
RK