Membuat skrip raster baru menggunakan con () menggunakan ArcPy?

8

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")
pengguna12433
sumber
Baris tempat Anda berkata arcpy.env.overwriteOutput = 1, coba gunakan: arcpy.env.overwriteOutput = True Python peka huruf besar kecil dan dalam komentar Anda, Anda BENAR.
Fezter
Sayangnya saya masih belum bisa menjalankan fungsi overwrite - True memiliki hasil yang sama dengan TRUE dan 1 dan saya mendapatkan error. OutRaster.save ("C: / ...") RuntimeError: ERROR 000871: C: ....: Tidak dapat menghapus output ?????????????????????? Ada ide lagi?
user12433

Jawaban:

6

Saya pikir masalahnya ada pada ungkapan ini

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

Con mengharapkan format berikut

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

Yang mana dalam kasus Anda

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

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.

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

Btw, berapa kisaran nilai dalam raster asli?

RK
sumber
Terima kasih atas tanggapan Anda - Saya sekarang merasa sangat konyol. Saya pikir ketika saya mencoba hal-hal yang berbeda dengan kode saya berhasil membalik tanda lebih besar dari tanda ke kurang dari satu dan saya belum mengambilnya. Ketika saya mengubah kode menjadi: InConRaster = ((inRaster <= var [0]) & (inRaster> = var [1])) OutRaster = Con (InConRaster, 1) itu kemudian berfungsi jadi terima kasih atas tip formatnya. Hanya FYI, ketika saya mencobanya dengan tanda yang benar tetapi tidak mengubah ekspresi con itu masih tidak berfungsi sehingga sepertinya ini adalah format yang diperlukan. Sangat berterima kasih atas bantuannya. Terima kasih
user12433
Sama-sama :) Jangan lupa mengklik tanda centang ;-)
RK