Saya baru mengenal Python dan telah mencoba kode skrip gaya kalkulator raster. Pada dasarnya, saya ingin mengubah raster yang memiliki nilai 0 hingga -10.000 menjadi raster yang diisi oleh 1s antara nilai-nilai tertentu.
Alasan saya ingin melakukannya dengan Python adalah karena saya akhirnya ingin mengotomatiskan proses ini sehingga saya dapat memilih nilai yang berbeda (yaitu 0 hingga -10, -5 hingga -25 dll) dan berakhir dengan raster 1s untuk setiap . Tujuan saya kemudian adalah untuk mengonversikannya menjadi poligon sehingga saya dapat melakukan sejumlah operasi klip vektor di sekitar 800 shapefile.
Saya telah menulis sebuah skrip yang menghasilkan raster baru di akhir, tetapi alih-alih kisi-kisi ini penuh dengan 1, ia memiliki nilai 0-256, jadi di suatu tempat dalam kode saya ada bug. Saya akan berterima kasih jika ada yang bisa menemukannya! Jika ada yang punya cara untuk mempercepat kode atau ide yang lebih baik untuk bagaimana saya bisa melakukan semua ini juga maka itu akan menarik untuk diketahui.
Ini kode saya:
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")
sumber
arcpy.env.overwriteOutput = 1
, coba gunakan:arcpy.env.overwriteOutput = True
Python peka huruf besar kecil dan dalam komentar Anda, Anda BENAR.Jawaban:
Saya pikir masalahnya ada pada ungkapan ini
Con mengharapkan format berikut
Yang mana dalam kasus Anda
dapat dipecah menjadi
in_conditional_raster,
(inRaster <= var[0])&(inRaster <= var[1])
in_true_raster_or_constant,
1
Saya agak bingung dengan apa yang Anda coba lakukan. Anda tampaknya ingin menjadikan 1 nilai yang cocok dengan kedua kriteria berikut
inRaster <= -2500
inRaster <= -3000
Dua ekspresi itu dapat direduksi menjadi
inRaster <= -3000
.Jadi semua piksel yang memiliki nilai kurang dari atau sama dengan -3000 telah berubah menjadi 1. Selebihnya dibiarkan apa adanya. Setidaknya itulah yang dikatakan kode Anda. Tidak ada cara untuk mengetahui dengan pasti kecuali Anda memposting tabel atribut raster ini atau file raster yang sebenarnya.
Saya pikir Anda maksud
(inRaster <= var[0])&(inRaster > var[1])
. Dengan begitu Anda akan menangkap nilai antara -2500 dan -3000.Btw, berapa kisaran nilai dalam raster asli?
sumber