Cara termudah bagi saya untuk mengatasi masalah ini adalah dengan menggunakan Format Virtual GDAL . Format ini memungkinkan saya untuk memperlakukan seluruh rangkaian gambar sebagai objek gambar tunggal, dan mengubahnya dalam tiga langkah yang relatif sederhana.
Membuat Dataset Virtual
GDAL (termasuk GISInternals Windows binari Tamas Szekeres ' dan versi terbaru OSGeo4W ) termasuk utilitas yang disebut gdalbuildvrt yang dapat digunakan untuk membangun dataset virtual awal.
Salah satu cara sederhana untuk menggunakan ini adalah menambahkan semua gambar Anda ke file teks, dan kemudian menggunakan file teks itu sebagai input ke gdalbuildvrt. Berikut ini sebuah contoh (Anda harus mengembalikan perintah kedua pada satu baris):
dir /b *.tif > my_images.txt
gdalbuildvrt
-hidenodata
-vrtnodata "255 255 255"
-resolution highest
-input_file_list my_images.txt
my_image.vrt
Ini akan memberi Anda file XML yang dapat Anda perlakukan sebagai gambar tunggal untuk semua operasi GDAL. Ini juga secara internal mewakili nodata sebagai putih, tetapi menyembunyikan definisi nodata dari alat yang membacanya.
Membuat Ikhtisar yang Di-Resampled
Selanjutnya, Anda akan melakukan resampling dan output dari gambar ikhtisar. Anda dapat melakukan ini dengan gdal_translate atau gdalwarp . Untuk salah satu dari ini, ingat bahwa ukuran yang dihasilkan adalah width * height * 3
(jumlah band 8 bit) Bytes. Jika ini akan lebih besar dari 4GB, Anda akan ingin melihat opsi GeoTIFF untuk sintaks untuk menentukan BigTIFF sebagai output Anda (-co "BIGTIFF = YA").
Untuk gdal_translate, Anda perlu menentukan dimensi gambar virtual menggunakan perintah gdalinfo yang praktis . Ambil dimensi ini dan bagi masing-masing dengan beberapa faktor yang konsisten untuk menentukan lebar dan tinggi output file Anda dalam piksel.
Perintahnya akan terlihat seperti (pada satu baris):
gdal_translate
-outsize 53120 14000
-co "TILED=YES"
-co "PROFILE=GEOTIFF"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
Untuk gdalwarp, Anda harus mengetahui pixelsize yang dihasilkan; dalam hal ini saya menggunakan 0,5 meter. Anda juga ingin melakukan panggilan dengan metode resampling. Saya lebih suka cubicspline untuk ikhtisar orthophoto. Ini lebih lembut, tetapi Anda tidak akan menggunakan ini ke resolusi penuh dan dalam pengalaman saya itu menciptakan gambar yang lebih kompresibel jika Anda menggunakan sesuatu seperti JPEG atau ECW.
gdalwarp
-r cubicspline
-of GTiff
-dstnodata "255 255 255"
-tr 0.5 0.5
-co "PROFILE=GEOTIFF"
-co "BIGTIFF=YES"
-co "TILED=YES"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
Anda mungkin juga ingin mempertimbangkan untuk menggunakan opsi kompresi JPEG untuk ikhtisar GeoTIFF yang di-resampled ini; itu menyusut file output jauh dengan ( menurut Frank ) hanya penalti kinerja marjinal.
-co "COMPRESS=JPEG"
-co "JPEG_QUALITY=80"
-co "PHOTOMETRIC=YCBCR"
Ikhtisar
Anda juga ingin menjalankan perintah gdaladdo yang praktis di atas gambar yang dihasilkan untuk membangun "piramida" internal, sehingga permintaan untuk resolusi yang lebih rendah daripada dimensi gambar penuh dapat dipenuhi dengan subset data. Peningkatan kinerja lebih dari layak ruang disk dalam banyak kasus. Anda ingin bermain-main dengan level yang Anda gunakan di sini; untuk gambar yang sangat besar Anda mungkin bisa menjatuhkan beberapa. Perintah gdaladdo terlihat seperti ini:
gdaladdo
-r average
my_image.tif
2 4 8 16 32 64 128 256
Saya akan menyarankan bereksperimen dengan level-level ini untuk kinerja yang optimal. Anda mungkin menemukan bahwa interval resampling yang berbeda lebih baik untuk aplikasi Anda atau, berdasarkan ukuran gambar Anda, bahwa Anda dapat menjatuhkan beberapa angka yang lebih tinggi (atau yang lebih banyak diperlukan)
Juga, jika Anda membuat tinjauan eksternal (menggunakan opsi -ro) pertimbangkan untuk menambahkan garis konfigurasi kompresi JPEG:
--config COMPRESS_OVERVIEW JPEG
--config PHOTOMETRIC_OVERVIEW YCBCR
--config INTERLEAVE_OVERVIEW BAND
(Saya percaya ini diwarisi dari induk GeoTIFF untuk ikhtisar tertanam)
Catatan
Ketika dihadapkan dengan masalah ini, saya bertanya di saluran #gdal di freenode.irc.net. Ini adalah sumber yang luar biasa, dan saya benar-benar berhutang budi kepada Howard Butler, Frank Warmerdam, dan Even Rouault karena membantu saya mengatasi hal ini.
^
untuk baris yang akan bergabung ketika dieksekusi (misalnya tambahkan^
ke akhir setiap baris kode contoh di atas untuk menjaga keterbacaan dan run-kemampuan). Peringatan penting: jangan pernah mengakhiri file atau baris perintah dengan tanda sisipan kecuali jika Anda ingin meminta konsumsi semua memoriYa, tetapi melalui coba-coba saya dapat menentukan bahwa -vrtnodata 255 memiliki efek menandai semua yang putih sebagai nodata, bukan hanya dari peta, yang kemudian diperlakukan gdal2tiles dengan transparansi alpha sesuai dengan bendera -a.
Jadi Anda berakhir dengan beberapa gambar sumber Anda diatur ke transparan, dalam kasus saya bagian putih dari jalan putus-putus. Ini bukan terminal tetapi tentu akan menyenangkan untuk dapat menentukan untuk gdal2tiles warna "no src image", baik sebagai hasil dari void asli di vrt, atau sebagai hasil dari warp. Untuk set saya warna biru pucat akan menjadi hal.
Setelah lebih banyak coba-coba, tampaknya hidenodata adalah kuncinya. Saya tidak tahu mengapa alat-alat ini sangat minim didokumentasikan. Inilah yang bekerja untuk saya, Gal 1.8.
sumber
Saya tidak terlalu terbiasa dengan GDAL, tapi saya rasa metode atau perintah tersedia di mana Anda dapat mengatur piksel nilai tertentu dengan nilai lain?
Tidak ada hubungannya dengan itu, tetapi dalam SQL sederhana seperti (hanya untuk menggambarkan - ini jauh lebih pseudo-code):
UPDATE SET raster pixel = 255 WHERE pixel = NoData;
Saya ingin tahu jawabannya!
sumber