Saya mencoba untuk menggabungkan beberapa data raster (semua .tif) hingga resolusi yang lebih kasar (dari .05 derajat hingga .25 derajat) menggunakan gdalwarp dalam python, tetapi perintahnya tidak berfungsi. Alih-alih mendapatkan output dengan rentang nilai yang luas, semua nilai output adalah 0. Resolusi dan kedalaman piksel / tipe sudah benar, tetapi nilainya tidak.
Berikut ini dokumentasi untuk perintah gdalwarp: http://www.gdal.org/gdalwarp.html
Saya memiliki dua file input yang ingin saya himpun hingga resolusi 0,25 derajat, menghasilkan beberapa output:
'NDVI_raster': Input pertama adalah raster bertanda 16-bit yang mewakili NDVI, dengan nilai berkisar antara -10.000 hingga 10.000 dan nilai nodata -15.000.
'nodata_mask': Yang kedua adalah topeng NoData, float 32-bit, di mana 1 = nilai data "baik", dan 0 = NoData.
Dengan 'NDVI_raster' sebagai input, saya ingin menghasilkan 7 output yang berbeda, masing-masing mewakili statistik yang berbeda. Saya melakukan ini dengan memanggil gdalwarp 7 kali, setiap kali mengatur metode resampling (-r) ke salah satu dari yang berikut: rata-rata, mode, maks, min, median, q1, q2. Saya akan memanggil output NDVI_ave.tif, NDVI_mode.tif, dll. Saat ini, saya menggunakan GDAL 1.10.1, yang hanya memungkinkan rata-rata dan mode, jadi saya menguji hanya dengan dua statistik ini sekarang.
Menggunakan 'nodata_mask' sebagai input, saya ingin akhirnya menghasilkan QAL (lapisan jaminan kualitas). Untuk melakukan ini, saya menggunakan gdalwarp, dengan mode resampling diatur ke 'rata-rata' untuk mengumpulkan hingga 0,25 derajat. Ini menghasilkan setiap piksel yang mewakili rasio piksel baik / total piksel dari input. Sebut saja output QAL.
Inilah yang ada di kode saya (menggunakan mode sebagai contoh untuk input pertama):
os.system('gdalwarp -tr .25 .25 -r mode -srcnodata -15000 %s %s' % (NDVI_raster, NDVI_mode))
Dan untuk lapisan QA:
os.system('gdalwarp -tr .25 .25 -r average -srcnodata -15000 %s %s' % (nodata_mask, QAL))
Hasilnya adalah raster dengan resolusi, proyeksi, dan kedalaman piksel yang benar, tetapi nilai pikselnya semua 0.
Adakah yang akrab dengan python / gdal tahu apa yang terjadi?
Saat memanggil perintah gdalwarp dari baris perintah (linux), saya mendapatkan hasil yang diinginkan. Saat menggunakan os.system untuk memanggil gdalwarp dari python, saya mendapatkan raster kosong. Jadi mungkin ada yang salah dengan binding gdal / python saya?
Alih-alih memanggil perintah melalui os.system, saya menggunakan subproses. Alat melalui metode ini juga tampaknya berjalan lancar, tetapi hasilnya sama: raster penuh 0's.
Saya mencoba memasukkan panggilan gdalwarp ke dalam skrip bash shell dan memanggil skrip shell itu dari python, tetapi hasilnya adalah sekelompok -1s bukannya 0s. Cukup aneh, saya telah mengujinya sebelumnya dan cukup yakin itu berhasil, tetapi tes itu dihapus dari server saya dan sekarang saya tidak dapat membuatnya kembali untuk beberapa alasan.
Menempatkan perintah gdalwarp dalam skrip bash shell dan kemudian memanggil skrip shell itu dari baris perintah memberi saya hasil yang diinginkan. Memanggil skrip shell yang sama dari python, tidak. Sepertinya ada yang salah dengan python, tapi apa dan bagaimana cara memperbaikinya?
os.system
sebenarnya memulai sebuah shell dan mengeksekusi perintah yang diberikan. Selain nilai pengembalian, Anda mungkin harus memverifikasi variabel yang ingin Anda sampaikan (mis. Segala masalah penawaran? Dll.)
os.system
ke subprocess
yang merupakan modul baru dan berisi sejumlah (keamanan) perbaikan.
-ot Float32
atau sesuatu yang serupa untuk topeng kualitas, karena Anda tidak dapat mewakili fraksi dengan raster integer.