Apa yang harus dilakukan dengan nilai nodata -3.4e + 38?

17

Saya mencoba memproses beberapa file raster bioklimatik, seperti dapat diunduh dari http://www.worldclim.org/current (set bioclim). Mereka tampaknya memiliki nilai nodata yang diatur -3.4e+38menurut QGIS (melihat output dari gdalinfo, itu -3.39999999999999996e+38).

Tampaknya alat gdal tidak dapat menangani nilai nodata ini, dan qgis tampaknya tidak dapat mengenalinya juga. Dalam style layer, ada entri untuk -3.4e + 38 yang diatur ke 100% transparan, tetapi masih menampilkan nilai-nilai tersebut, meskipun pemilih "Identifikasi fitur" menunjukkan mereka memiliki nilai -3.4e + 38.

Saya telah mencoba membuat vrt untuk mengubah nilai nodata ke -9999, tetapi itu tidak berhasil.

Bagaimana saya bisa memproses file tersebut untuk memiliki nilai nodata yang dapat digunakan?

nilai nodata diambil dari file pengaturan transparansi tidak berpengaruh

rudivonstaden
sumber
Seharusnya dalam versi baru qgis memiliki dukungan nodata JAUH lebih baik. Saya memiliki banyak masalah "nodata" dengan 1,8 (terutama ketika saya mencoba untuk menghitung histogram atau cara dalam suatu area).
nickves

Jawaban:

4

GDAL dapat menangani nilai-nilai ini. Faktanya, nilai NoData default GDAL hampir sama dengan nilai Anda. Saya pikir masalahnya adalah kesalahan floating point di QGIS. Saya memiliki masalah yang sama dengan nilai-nilai NoData floating point.

Jika Anda ingin mengubah nilai NoData menggunakan GDAL Anda bisa menggunakan gdalwarp atau mungkin gdal_translate dan mengatur nilai nodata ke integer dari sana (masing-masing -dstnodata dan -a_nodata). Sebagai contoh, saya telah berhasil menetapkan Nilai NoData saya menjadi -999 dalam raster float 64bit di masa lalu. Namun, mengingat bahwa kami telah menetapkan ada masalah titik mengambang dalam hal ini, saya tidak ingin menjamin ini akan berhasil dalam semua kasus.

MappaGnosis
sumber
Terima kasih atas jawaban Anda, Sylvester. Saya tidak bisa membuat gdal_translate bekerja menggunakan gdal_translate -a_nodata -9999 input.tif output.tifmeskipun gdalwarp -dstnodata -9999 input.tif output.tifmelakukan trik. Dari file input 9MB, pendekatan saya menghasilkan file 26MB, sedangkan gdalwarp menghasilkan file output 52MB. Namun, jika raster berisi nilai float, pendekatan saya tidak akan berfungsi di mana yang ini.
rudivonstaden
Sudahkah Anda memeriksa apakah ada tiket terbuka di pelacak bug QGIS untuk ini?
underdark
1
Penggembungan data bisa disebabkan oleh penggunaan kedalaman piksel yang lebih besar (63-bit vs 16 bit, katakanlah) atau bisa juga karena aslinya menjadi JPEG dan hasil baru Anda menjadi TIFF. @underdark - Maaf! Tidak, saya belum memeriksa apakah ada tiket terbuka.
MappaGnosis
@underdark Saya tidak dapat menemukan tiket yang cocok dengan ini, jadi saya menambahkan laporan bug ( hub.qgis.org/issues/6786 ).
rudivonstaden
1
Untuk ukuran file yang lebih kecil, Anda hanya perlu menambahkan -co COMPRESS=LZW.
j08lue
11

Saya berhasil menemukan solusi untuk masalah ini dengan mengubah format data ke Int16 dari Float32. Nilai minimumnya adalah -32768 dan dapat diproses sebagai nilai nodata. Perintah berikut melakukan trik:

gdal_translate -ot Int16 -a_nodata -32768 input.tif output.tif

Mungkin ada solusi yang lebih baik, tetapi ini setidaknya memecahkan masalah saya segera.

nodata mengambil dengan benar

rudivonstaden
sumber
0

Anda dapat mencoba gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0

kmu2019
sumber