Saya memiliki raster (sebenarnya USGS DEM) dan saya perlu membaginya menjadi potongan-potongan kecil seperti gambar di bawah ini. Itu dicapai dalam ArcGIS 10.0 menggunakan alat Split Raster. Saya ingin metode FOSS untuk melakukan ini. Saya telah melihat GDAL, berpikir pasti itu akan melakukannya (entah bagaimana dengan gdal_translate), tetapi tidak dapat menemukan apa pun. Pada akhirnya, saya ingin dapat mengambil raster dan mengatakan seberapa besar (4KM dengan 4KM potongan) Saya ingin dibagi menjadi.
18
Jawaban:
gdal_translate akan bekerja menggunakan opsi -srcwin atau -projwin.
Anda harus menemukan lokasi piksel / garis atau koordinat sudut dan kemudian mengulangi nilainya dengan gdal_translate. Sesuatu seperti python cepat dan kotor di bawah ini akan berfungsi jika menggunakan nilai pixel dan -srcwin cocok untuk Anda, akan sedikit lebih banyak pekerjaan untuk diselesaikan dengan koordinat.
sumber
Solusi saya, berdasarkan yang dari @wwnick membaca dimensi raster dari file itu sendiri, dan mencakup seluruh gambar dengan membuat ubin tepi lebih kecil jika diperlukan:
sumber
Ada skrip python yang dibundel khusus untuk retiling raster, gdal_retile :
misalnya:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
sumber
Untuk @ Harun yang bertanya:
Penafian Sedikit
Ini menggunakan
gdalwarp
, meskipun saya tidak sepenuhnya yakin akan ada banyak peningkatan kinerja. Sejauh ini saya sudah terikat I / O - menjalankan skrip ini pada raster besar yang memotongnya menjadi banyak bagian yang lebih kecil tampaknya tidak intensif CPU, jadi saya menganggap hambatannya adalah menulis ke disk. Jika Anda berencana memproyeksikan ulang ubin secara bersamaan atau yang serupa, maka ini mungkin berubah. Ada tips menyetel di sini . Permainan singkat tidak menghasilkan perbaikan bagi saya, dan CPU sepertinya tidak pernah menjadi faktor pembatas.Di samping penafian, inilah skrip yang akan digunakan
gdalwarp
untuk membagi raster menjadi beberapa ubin yang lebih kecil. Mungkin ada beberapa kerugian karena pembagian lantai tetapi ini bisa diatasi dengan memilih jumlah ubin yang Anda inginkan. Ini akan menjadin+1
tempatn
angka yang Anda bagi untuk mendapatkantile_width
dantile_height
variabel.sumber
Anda dapat menggunakan r.tile dari GRASS GIS. r.tile menghasilkan peta raster yang terpisah untuk setiap ubin dengan nama peta bernomor berdasarkan awalan yang ditentukan pengguna. Lebar ubin (kolom) dan tinggi ubin (baris) dapat ditentukan.
Menggunakan API Python sesi-rumput hanya beberapa baris kode Python yang diperlukan untuk memanggil fungsionalitas r.tile dari luar, yaitu untuk menulis skrip mandiri. Menggunakan r.external dan r.external.out juga tidak ada duplikasi data yang terjadi selama langkah pemrosesan GRASS GIS.
Kode palsu:
sumber