Saya sedang menulis sebuah utilitas sederhana untuk memotong banyak file raster geotiff multi-band ke area yang sama (lebih kecil). Dengan menggunakan gdalwarp, saya dapat dengan mudah memotong file menggunakan shapefile kliping poligon tunggal:
gdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
Namun, area aktual yang saya ingin klip untuk akan selalu awalnya ditentukan oleh file raster geotiff lain, bukan shapefile. Akan lebih baik jika saya bisa menggunakan tingkat raster itu sebagai file kliping, tapi saya tidak yakin bagaimana melakukan ini. Tidak mengherankan, berikut ini tidak berfungsi (itu tidak menimbulkan kesalahan, itu hanya tidak menghasilkan apa-apa):
gdalwarp -cutline clipper.tif-crop_to_cutline input.tif output.tif
Jadi, pertanyaan saya adalah, adakah cara untuk memasok raster gdalwarp -cutline
? Bergantian, apakah ada fungsi gdal lain yang dapat klip raster menggunakan raster lain? Jika tidak satu pun dari ini yang mungkin, adakah cara yang sangat sederhana untuk menghasilkan shapefile dengan poligon tunggal yang ditentukan oleh tingkat raster?
Kode ini akan dibungkus dengan skrip python yang lebih luas, jadi saya bisa menggunakan utilitas command line gdal atau salah satu binding python untuk gdal.
Sebagai catatan, saya tahu bahwa saya bisa dengan mudah membuat kliping kliping yang mencakup tingkat raster saya di QGIS. Saya mungkin akhirnya melakukan itu jika saya tidak menemukan solusi yang mudah, tetapi pada akhirnya saya akan berakhir menggunakan utilitas ini pada puluhan jika tidak ratusan area sebagai bagian dari analisis otomatis yang besar, jadi saya lebih suka tidak memiliki yang membosankan langkah manual bahkan jika itu sangat mudah.
gdaltindex clipper.shp clipper.tif
, diikuti olehgdalwarp -cutline clipper.shp -crop_to_cutline input.tif output.tif
Untuk poligon tidak teratur, dan dengan asumsi bahwa file raster geotiff Anda adalah raster biner, Anda bisa menggunakan GDAL_Calc :
Kueri ini akan mengisi 0 di mana Mask.tif <= 0 dan BigImage di mana Mask> 0. Untuk melakukan ini, kedua raster harus memiliki ukuran, baris, dan kolom sel yang sama. Untuk mengekstrak luasan yang sama, gunakan GDAL_Translate dengan
-projwin ulx uly lrx lry
opsi (kotak dalam koordinat yang diproyeksikan), tetapi pastikan bahwa kotak projwin tidak melampaui tepi raster mana pun.Nilai pengganti untuk kotak projwin yang berasal dari Mask.
sumber
Solusi dalam Python secara langsung, tanpa membuat bentuk:
sumber