Saya ingin mereklasifikasi file raster dari raster dengan 10 kelas ke raster dengan 8 kelas menggunakan pyhton, gdal dan / atau numpy. Kelas-kelas direpresentasikan sebagai bilangan bulat. Saya telah mencoba mengikuti langkah-langkah dari pos ini. Mengklasifikasi raster menggunakan GDAL dan Python , doc numpy.equal dan juga doc gdal_calc. Namun, sia-sia.
File raster yang akan direklasifikasi memiliki nilai integer mulai dari 0 hingga 11 dan juga menyertakan nilai 100 dan 255. Berikut ini menunjukkan reklasifikasi (dari nilai: ke nilai):
nodata: 4, 0: 4, 1: 1, 2: 2, 3: 3, 4: 3, 5: 4, 6: 5, 7: 5, 8: 6, 9: 7, 10: 8, 100: nodata, 255: nodata,
Apa yang dapat saya lakukan adalah memilih file raster untuk direklasifikasi menggunakan tkinter.FileDialog dan mendapatkan info raster seperti geotransform, dan ukuran piksel dengan reclass = gdal.Open (raster, GA_ReadOnly).
Bagaimana cara saya menyelesaikan masalah di atas.
Mungkin perlu disebutkan bahwa raster yang akan direklasifikasi dapat cukup besar dalam beberapa kasus (500mb hingga 5gb).
sumber
Jawaban:
Di sini Anda memiliki skrip python sederhana untuk reklasifikasi, saya menulisnya dan itu berfungsi untuk saya:
Ubah saja rentangnya.
Saya harap ini akan membantu.
sumber
file2
dengandel file2
ataufile2 = None
untuk memastikannya ditulis ke disk..FlushCache()
hanya memengaruhi cache ubin internal GDAL.Alih-alih melakukan reklasifikasi sebagai double for loop yang dijelaskan oleh dmh126, lakukan dengan menggunakan
np.where
:Pada array 6163 kali 3537 piksel (41,6mb) klasifikasi dilakukan dalam 1,59 detik, di mana dibutuhkan 12 menit 41d menggunakan double for loop. Total hanya speedup 478x.
Bottomline, jangan pernah gunakan double untuk loop menggunakan
numpy
sumber
Berikut ini contoh dasar menggunakan rasterio dan numpy:
sumber
Hanya untuk melengkapi jawaban dari @Mattijn, saya pikir itu akan menimbulkan masalah jika kelas input tumpang tindih dengan kelas output. Saya tidak ingin nilai baru saya diubah oleh aturan selanjutnya.
Saya tidak tahu apakah saya kehilangan kecepatan tetapi saya harus melakukan salinan yang dalam:
sumber
Berikut ini adalah pendekatan Rasterio lain yang saya retas bersama menggunakan Rasterio Cookbook dan jawaban @ Mattijn.
sumber
Dalam beberapa kasus, digitalisasi numpy dapat berguna untuk dengan cepat beralih dari rentang ke nampan.
sumber
Dengan dukungan tabel warna RGB raster:
sumber
Alternatif yang sedikit berbeda adalah sebagai berikut:
Skrip ini diputar dengan numpy.where ( https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html ): di semua langkah terpisah dari yang terakhir, alih-alih mengembalikan nilai saat kondisi tidak puas, ia mengembalikan np.where lain. Dan itu terus berjalan sampai semua nilai raster yang mungkin dipertimbangkan.
sumber