Cara terbaik untuk klip file ECW raster besar?

9

Saya mencoba untuk klip ECW besar (detail di bawah) tetapi file raster terlalu besar untuk diproses seluruhnya.

Beberapa detail ECW di bawah ini

Pengemudi: ECW / ERDAS Compressed Wavelets (SDK 5.0)

ukuran file: 50gb Ukurannya adalah 450000, 565081 Ukuran piksel: 0,15 0,15 COLORSPACE = RGB COMPRESSION_RATE_TARGET = 9 VERSION = 2 Jumlah band: 4

Area yang ingin saya klip kira-kira 1/5 dari file asli.

Berikut adalah metode yang saya coba tanpa hasil:

  1. Menggunakan Arcgis untuk menyimpan file ke format / lainnya ... (Saya cepat menyerah)

  2. Qgis bekas dan alat pemotongnya ... pembuatan file tetap macet sekitar 40%.

  3. Digunakan gdal_translate keluar dari OSGeo4W dengan opsi lain selain Qgis. (Mencoba berpikir bahwa MUNGKIN membebaskan beberapa memori tidak menggunakan Qgis akan menjadi trik)

  4. Digunakan gdal_retile berpikir bahwa saya akan memotong gambar menjadi potongan-potongan dan mengambil yang saya inginkan. Perintah "gdal_retile -ps 10000 10000 -dari ecw -tileIndex tile.shp -targetDir input.ecw Ini macet lebih cepat"

Adakah yang punya ide?

Untuk info saya menjalankan windows 7 64bits pada i5-3470 3.2Ghz dengan 16gb ram.

Biru
sumber

Jawaban:

5

Gagasan lain yang dapat Anda coba:

  1. gdal_translate dengan switch -srcwin
  2. gdalwarp dengan -cutline dan -crop_to_cutline dan -wm switch. Yang terakhir menentukan memori untuk caching dan dapat membantu Anda mengatasi masalah yang Anda gunakan clipper di QGIS (karena ini pada dasarnya fungsi yang sama)
  3. Kalkulator raster QGIS mengatur sejauh mana area yang Anda inginkan (lebih sederhana daripada clipper).
  4. SAGA-> Kotak klip dengan poligon - siapa tahu, mungkin lebih hemat memori.
  5. Buat kode solusi menggunakan Python dan Numpy / SciPy untuk membaca hanya sebagian dari raster ke dalam memori dan simpan.

Saya menduga bahwa melakukan pemangkasan yang sangat sederhana (baik dengan kalkulator raster atau -srcwin switch di gdal_translate) akan lebih sedikit memori yang haus daripada memangkas dengan poligon karena Anda tidak memiliki pemeriksaan geometri dan konversi. Opsi 5 harus menggunakan memori paling sedikit karena Anda hanya membaca apa yang Anda butuhkan. Lihatlah tutorial ini jika Anda memerlukan 'cara melakukannya' (sesuaikan bit pada membaca dan menulis dengan blok).

MappaGnosis
sumber
Terima kasih atas jawabannya! Saya akan mencoba SAGA dan jika tidak berhasil saya akan mencoba Numpy.
Biru
5

Anda dapat memotongnya langsung dengan alat gdal, gdal_translate jika Anda mengetahui koordinat Area Minat Anda, jika georeferensi-nya:

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

Jika tidak menggunakan -srswinbendera seperti ini:

gdal_translate -srcwin [xoff yoff xsize ysize] infile outfile.

Pilihan lain adalah membuat raster 'virtual' (dari beberapa kilobyte) yang menunjuk pada dataset awal Anda, dengan gdalbuildvrt .

gdalbuildvrt -te [xmin ymin xmax ymax] infile outfile.vrt

Sayangnya Anda akan memerlukan file georeferensi untuk menggunakan gdalbuildvrt.

Setelah Anda memotong, jangan lupa untuk membuat piramida agar mudah dilihat. Perintah berikut akan membangun piramida eksternal yang dikompres dengan algoritma DEFLATE (lossless):

gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16

Sebagai langkah terakhir Anda dapat menghitung statistik juga untuk menghindari beberapa masalah bodoh dengan program komersial tertentu:

gdalinfo -stats outfile
Nickes
sumber
Terima kasih atas jawabannya, nick. Saya telah membangun raster virtual dan menjalankan <code> gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16 </code> Saya tidak terlalu yakin mengapa saya mendapatkan pesan kesalahan berikut KESALAHAN 1: Tidak dapat membuat file TIFF karena hilang codec untuk DEFLATE. Bangunan ikhtisar gagal.
Biru
Periksa bug qgis-bug: 8782 dan osge4w-bug: 382 jika mereka menjelaskan kasus Anda. Sementara itu cobalah untuk membuat ikhtisar tanpa algoritma kompresi, atau pilih yang lain .
nickves
sepertinya saya membuatnya bekerja dalam 2 langkah: gdaladdo -ro input.vrt 2 4 8 16lalu gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16. Tujuan saya adalah untuk mengakhiri dengan ECW jadi saya mencoba gdal_translate -of ECW input.vrt output.ecw dan mendapat kesalahan berikut:0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
Biru
@blue ECW adalah format berpemilik dan perlu penanganan khusus. Silakan periksa dulu apakah gdal dapat menulis dalam ECW dengan gdalinfo --formats. Jika Anda tidak melihat ECW dalam daftar, coba instruksi itu: faunalia.pt/node/438
nickves
0

'Klip' langsung gdalwarpharus digunakan (saya tahu ini adalah pertanyaan lama: 18 bulan IRL seperti zaman geologis dalam tahun internet).

Saya memiliki antena 70Gb (ECW, 94000x81000 piksel pada 10cm / px), dan GDAL dapat secara sewenang-wenang memangkasnya dengan shapefile menggunakan

gdalwarp -cutline [clipfile] -crop_to_cutline [infile] [outfile]

di baris perintah Windows. (Saya menyadari bahwa solusi ini membutuhkan pembangunan shapefile untuk area target yang diminati, tetapi itu bukan tantangan terbesar yang diketahui GIS).

Untuk mengekstrak potongan setengah pinggiran kota membutuhkan ~ 0.4sec; untuk mengiris file menjadi empat bagian dibutuhkan 4sec. Spesifikasi mesin saya tidak jauh berbeda (i7-4770 @ 3.4GHz, RAM 16GB, Win7-64 Ultimate).

GT
sumber
gdalwarp sudah disebutkan. Info tentang kinerja dan contoh ukuran gambar tertentu adalah tambahan selamat datang, tetapi sebenarnya ini harus menjadi komentar untuk gis.stackexchange.com/a/74450/108 (dan membuat edit yang disarankan dengan baris perintah dengan pemformatan kode akan diterima juga ; lebih mudah dibaca)
matt wilkie