Bagaimana cara mengatur semua piksel dengan nilai <= 0 ke “nodata” di DEM raster?

28

Saya memiliki raster DEM dengan nilai piksel antara sekitar 3000 dan -0.0003. Saya perlu mengatur semua piksel dengan nilai 0 dan smaler (<= 0) menjadi "nodata" (untuk perhitungan raster selanjutnya dan untuk mengurangi ukuran file).

Tampaknya bagi saya bahwa ini adalah tugas untuk kalkulator raster (menetapkan nilai piksel <= 0 ke "nodata") atau klasifikasi ulang (menetapkan nilai piksel <= 0 ke "nodata" dan menyimpan semua nilai lainnya) tetapi saya tidak tahu caranya.

PETA
sumber
Saya juga perlu mengatur semua piksel dengan nilai <0 hingga "nodata". Jadi pos dari vascobnunes tidak membantu saya.
PETA
Maaf, tetapi ini tidak membantu saya untuk mengubah gaya bagaimana raster ditampilkan. Saya perlu mengedit rasterfile saya.
PETA
Dari komentar dan saran penutup, sepertinya Anda harus mengedit Pertanyaan Anda untuk mengklarifikasi dengan tepat apa yang Anda inginkan dan apa yang sudah Anda coba.
PolyGeo

Jawaban:

29

Saya tidak menemukan solusi satu alat, tetapi Anda pertama-tama dapat menggunakan kalkulator raster untuk mengubah semua nilai di bawah ambang batas tertentu menjadi nol dan kemudian menggunakan gdal_translate dengan -a_nodata 0 untuk mengubah 0 menjadi nodata.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

underdark
sumber
17

Berikut ekspresi GRALCAL mapcc untuk menetapkan rentang ke NULL:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"
Micha
sumber
Bagus, bekerja untukku!
ilFonta
16

Ini dapat dilakukan dalam satu langkah dalam QGIS dalam kalkulator raster.

Di QGIS3, untuk layer raster bernama "x", gunakan ekspresi berikut:

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

Trik ini memetakan nilai raster x> 0 ke dalam rasio x / 1 = x, dan nilai raster x <= 0 ke dalam rasio 0/0 = NaN. NaN ini diterjemahkan sebagai FLOAT_MIN (alias -3.402832 ... e + 38) jika rasternya adalah float 4-byte.

Anehnya, pertanyaan ini tampaknya sudah ada sejak lama, dengan (sejauh pencarian Google cepat saya hari ini) sebagian besar responden mengatakan itu tidak dapat dilakukan dalam satu langkah. Seharusnya tidak perlu diretas seperti ini. Dokumentasi QGIS juga bisa lebih baik.

Colin Stark
sumber
10

Banyak terima kasih kepada Dominik. Jawaban pertama saya tidak benar untuk QGIS 2.8.3 (ekspresi "myraster@1" > 0mengembalikan 0 atau 1 untuk input non- nodata , untuk input nodata ia mengembalikan nodata ).

Ekspresi Kalkulator Raster QGIS berikut harus memadai (lapisan raster bernama "myraster"), karena Kalkulator Raster QGIS menetapkan semua piksel yang tidak memenuhi kondisi untuk nodata :

("myraster @ 1"> 0) * "myraster @ 1"

Solusi berikut didasarkan pada https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html , dan berfungsi untuk QGIS 2.8.3 dengan SAGA 2.1.2.

Dalam Pemrosesan QGIS, gunakan kalkulator SAGA Raster dan masukkan yang berikut ini dalam Formula :

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

atau

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

Ini akan mengubah semua nilai kurang dari atau sama dengan 0 menjadi nodata (0/0).

Håvard Tveite
sumber
ini tidak berfungsi karena piksel yang tidak memenuhi syarat adalah 0, bukan nodata
Dominik
Super. Dapat menggunakannya untuk filter nilai raster: Misalnya filter (0,5; 23]: ifelse (g1 <0,5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop
10

Anda juga dapat menyimpan layer (klik kanan, simpan sebagai ...) dan tentukan rentang nodata. Ini akan mempertahankan nodata asli dan membuat nodatas baru untuk rentang nilai yang ditentukan.

Joost Beckers
sumber
Ini adalah solusi terbaik
Alexander
5

Saya memiliki masalah yang sama, tetapi memiliki KEDUA nilai yang ingin saya konversi menjadi tidak ada data DAN nilai tidak ada data di dalam raster.

Identifikasi Hasil

Saya datang ke halaman ini untuk meminta bantuan, tetapi saya pikir ada peringatan untuk pendekatan di sini. Metode @underdark dan @Micha tampaknya hanya berfungsi di mana tidak ada nilai no-data di raster.

Untuk mengatasinya, Anda perlu mengonversi nilai no-data, dan nilai yang ingin Anda konversi ke no-data, ke angka yang konsisten. Maka boleh saja menggunakan langkah kedua @underdark.

Untuk melakukan ini, gunakan Processing Toolbox> Reclassify Grid Values ​​(SAGA) untuk mengonversi nilai dan nilai no-data ke nomor umum (misalnya -999), pada saat yang sama. Secara khusus, gunakan metode "rentang" dan tentukan rentang. Kemudian dalam mengganti nilai tidak ada data, pilih nilai yang sama ini (mis. -999). Hapus centang nilai-nilai lain. Ini berfungsi untuk perubahan nilai tunggal atau perubahan yang lebih kompleks juga.

Kemudian ikuti metode @underdark, dan simpan raster menggunakan Raster> Conversion> Translate, dan centang no-data, masukkan nilai yang Anda gunakan (mis. -999).

Sarracenia
sumber
-3

Klik kanan pada raster, pergi ke properti raster, pilih opsi ketiga "transparansi", di tab tidak ada nilai data, tambahkan nilai tambahan 0 dan klik berlaku. Ini adalah opsi yang sama "tampilan nilai latar belakang" di arcgis.

Bharadwaj AK
sumber
4
Bukan metode yang bagus. Anda sebenarnya tidak mengubah data jadi jika Anda perlu menghitung statistik atau melakukan analisis hasilnya akan salah
khafen