Saya memanipulasi dan memproses raster global dengan resolusi 30m. Total ukuran raster biasanya [1.440.000 560.000]. Saya memiliki akses ke komputer super, jadi saya telah menulis kode yang memungkinkan saya untuk memecah raster global menjadi beberapa bagian yang dapat dikelola, melakukan beberapa perhitungan secara paralel, dan menulisnya ke disk dengan cukup cepat.
Saya telah menabrak dinding, ketika datang untuk menampilkan hasil. Saya biasanya membangun raster ubin virtual yang menutupi globe dan menariknya ke QGIS. Tapi itu sangat lambat (menit untuk memuat, jika ya). Dan jika saya mencoba menggeser atau memperbesar, itu beberapa menit lagi. Pendekatan pertama saya untuk memecahkan masalah ini adalah membangun tinjauan umum menggunakan gdaladdo. Namun, ini membutuhkan waktu yang lama untuk membangun (seperti dalam hari), yang tidak kondusif untuk mengembangkan algoritma. Berikut adalah daftar hal-hal yang telah saya coba dan mengapa / bagaimana mereka gagal.
membangun ikhtisar di vrt. Seperti disebutkan di atas, ini membutuhkan 2+ hari untuk menyelesaikan 8 level. Itu tidak dapat diterima untuk tujuan saya.
membangun ikhtisar pada ubin individu, lalu entah bagaimana bergabung menjadi vrt yang berisi ikhtisar tersebut. Saya bisa membuat ikhtisar di atas ubin agak cepat (superkomputer), tetapi saya belum dapat menginstalnya. Saya mencoba:
2a. gdal_merge pada ubin dengan ikhtisar, tetapi ikhtisar tidak dipertahankan (atau setidaknya tidak dikenali oleh QGIS) di tiff keluaran.
2b. gdalbuildvrt pada ubin dengan ikhtisar, tetapi seperti di atas, ikhtisar tidak dipertahankan. [Ini tidak benar, lihat edit.]
2c. Saya juga mencoba hibrida membangun ikhtisar untuk ubin untuk tingkat 1-6 dan membangun tingkat 7-8 langsung di vrt (pada dasarnya opsi 2b) tetapi masih butuh waktu lama untuk hanya dua tingkat ini. Saya melakukan beberapa pengujian dan melihat bahwa ikhtisar genteng yang benar-benar digunakan untuk membangun untuk ikhtisar vrt, tapi masih di urutan hari untuk menyelesaikan ikhtisar pada vrt tersebut.
Jadi saya berharap seseorang di sini memiliki beberapa saran tentang ke mana saya harus pergi selanjutnya. Berikut ini beberapa opsi yang saya pertimbangkan:
Buat sendiri piramida global secara manual. Saya khawatir rekombinasi mereka menjadi file .ovr karena saya menganggap itu akan sulit.
Gunakan mapserver (Geoserver). Saya tahu sedikit tentang hal ini dan khawatir itu tidak akan mengatasi rintangan waktu sambil menambahkan kompleksitas pada proses saya.
Bagi domain dengan benua atau wilayah lain. Saya benar - benar ingin menghindari opsi ini.
Anda mungkin bertanya "mengapa Anda perlu melihat seluruh dunia dengan resolusi 30m?" Salah satu contoh: Saya mengambil topeng piksel air (secara global) dan membuat kerangka untuk menemukan sungai dan melakukan pengukuran. Algoritma skeletonization saya memerlukan sedikit penyetelan (untuk pemangkasan cabang, menghapus loop, pembersihan umum, dll.), Dan hasilnya harus pada 30 m. Karena sungai dan bentang alam beragam di seluruh dunia, saya harus dapat berkeliling untuk melihat efek dari setiap perubahan yang telah saya terapkan.
Saya juga telah memeriksa QGIS untuk memastikan tidak ada pengaturan yang dapat saya mainkan untuk membuat raster besar lebih cepat, tetapi saya tidak melihat apa-apa. Kurang membeli drive SSD, saya pikir itu cranking secepat mungkin. (HDD saya memiliki I / O ~ 250MB / s).
Saya menemukan bahwa membangun ikhtisar pada ubin individu, lalu membangun vrt tampaknya mempertahankan ikhtisar - bagian "Piramida" QGIS dalam metadata untuk file kosong, tetapi di bagian "Dimensi" ada entri untuk setiap tingkat ikhtisar (mis. X 720000, Y 140; X 360000, Y 70, dll.). Jadi saya salah tentang 2b.
Saya juga menemukan bahwa jika saya hanya menarik semua ubin ke QGIS, itu merender dalam waktu kurang dari satu menit, sementara jika saya menarik vrt yang mereferensikan ubin, dibutuhkan> 5 menit (tidak tahu berapa lama tepatnya sejak saya membunuh proses).
Saya melakukan beberapa pengujian pada komputer dengan SSD, dan saya menemukan bahwa saya dapat memuat, menampilkan, dan membuat vrts global (tanpa ikhtisar apa pun) dengan sukses dan pada tingkat yang dapat diterima. Saya telah memesan 1TB PCIe SSD dengan harapan itu akan memungkinkan saya untuk melakukan hal yang sama di komputer saya. Akan diperbarui dengan hasil.
I also tried a hybrid of building overviews for the tiles for levels 1-6 and building levels 7-8 directly on the vrt
yang terasa sama dengan urutan yang Anda rekomendasikan dan itu wajar saja. Saya sendiri tidak akan menghitung 2 4 8 ... ikhtisar untuk VRT jika setiap ubin memilikinya untuk menghemat waktu dan ruang disk. ROI kecil kemudian akan menemukan ikhtisar dari beberapa ubin dan itu harus cukup cepat.Jawaban:
Anda tampaknya memiliki dua masalah utama: Id VRT lambat dengan penjelajahan dan lambat untuk membangun tinjauan global.
Walaupun saya yakin bahwa GDAL VRT dulu lambat bagi saya dan MapServer saya bertahun-tahun yang lalu, mungkin situasinya telah berubah. Saya membuat lapisan uji dengan 10.000 gambar udara (ukuran gambar / ubin dari 10000x10000 hingga 12000x12000 piksel) dan sekarang GDAL VRT sebenarnya lebih cepat daripada indeks shapefile MapServer asli dan melayani dengan komputer uji 6 ubin (256x256) per detik dalam tes sederhana dengan 1 utas tempat GetMaps menekan selalu tingkat tinjauan pertama. Mosaik dengan 10.000 gambar masih cukup kecil dan saya kira dalam pengujian saya Linux memiliki seluruh file VRT dalam memori cache. Berapa banyak gambar yang Anda miliki di VRT Anda?
Bab berikut mungkin berisi informasi lama, dibaca secara bertanggung jawab:
Ada beberapa bukti bahwa VRT lambat ketika mengandung sejumlah besar gambar. Itu bukan karena VRT adalah indeks dalam format XML dan itu tidak mendukung indeks spasial yang mengarah ke pemindaian penuh seluruh file XML setiap waktu. Tidak ada yang dapat Anda lakukan untuk meningkatkannya dengan GDAL biasa bahkan telah ada beberapa diskusi tentang penerapan indeks spasial untuk VRT http://osgeo-org.1560.x6.nabble.com/gdal-dev-Don-t-we- have-any-ideas-for-GSoC-2017-td5309810.html .
Jika Anda ingin menginstal perangkat lunak baru, solusi termudah adalah menggunakan MapServer dengan tileindex http://www.mapserver.org/optimization/tileindex.html . Jika Anda membuat tileindex dengan gdaltindex http://www.gdal.org/gdaltindex.html dan membuat indeks untuk tileindex juga dengan shptree http://www.mapserver.org/utilities/shptree.htmlmaka MapServer harus dapat mengakses dengan sangat cepat semua file gambar yang Anda miliki. Buat ikhtisar untuk ubin individu dan sajikan lapisan melalui WMS untuk QGIS dan Anda telah menyelesaikan bagian pertama dari masalah tetapi tidak masalah dengan ikhtisar global. Bahkan jika Anda telah membuat ikhtisar untuk ubin individu, akan lambat untuk membuka ribuan file gambar untuk mencakup area yang luas dan karenanya Anda harus membatasi jumlah file dengan membuat gambar gambaran umum yang mencakup area yang lebih besar. Itulah yang sudah Anda coba lakukan dengan membangun ikhtisar untuk lubang VRT dengan gdaladdo.
Saya tidak tahu alat yang siap pakai di dunia GDAL / MapServer untuk membuat piramida global secara otomatis. Anda dapat mengubah ubin dari VRT global menjadi satu set gambar dengan ukuran piksel lebih besar dengan menulis skrip yang menjalankan gdal_translate http://www.gdal.org/gdal_translate.html dengan geser -prowjin atau -srswin. Kemudian Anda bisa menggabungkan ubin yang dihasilkan ke dalam lapisan ikhtisar baru dengan gdalbuildvrt atau gdaltindex.
Karena Anda juga mempertimbangkan untuk menggunakan GeoServer, saya akan merekomendasikan untuk menjarah di skrip gdal_retile http://www.gdal.org/gdal_retile.html yang ditulis untuk menangani kasus Anda. Bisa juga menggunakan ubin yang dibuat gdal_retile secara langsung sebagai gambaran umum dengan QGIS dengan membangun VRT di atasnya. Namun, masalah pertama dengan file VRT besar yang lambat akan tetap ada.
sumber
Ok, well saya menyelesaikan kedua masalah saya ... terutama dengan membeli NVMe SSD. Disk saya baca / tulis telah berubah dari 125 MB / s menjadi 1200 MB / s.
Secara pemrograman, ada beberapa hal yang dapat Anda lakukan untuk membantu kecepatan baca / tulis Anda. Pertama, pertimbangkan pemblokiran tiff Anda. Jika Anda menggunakan tiff bergaris, saat Anda memperbesar ke wilayah tertentu, perangkat lunak GIS harus membaca setiap baris lengkap wilayah, termasuk bagian tiff yang tidak akan ditampilkan, untuk menampilkan wilayah. Misalnya, jika Anda memperbesar wilayah 256 x 256 piksel, jika Anda memiliki garis bergaris perangkat lunak harus membaca setidaknya 256 blok (satu per baris). Jika Anda memiliki ubin tiff (ubin 256 x 256), jumlah maksimum blok yang harus dibaca adalah 4 (dan minimum 1). Jadi hal pertama yang dapat Anda lakukan adalah memastikan bahwa Anda menggunakan tiff tiff (TILED = opsi pembuatan YES di gdal),
Kedua, pendekatan hibrida untuk ikhtisar tampaknya bekerja dengan baik. Jika Anda dapat memparalelkan operasi Anda, Anda dapat menambahkan ikhtisar ke ubin individu dengan cepat, tetapi ini hanya akan menguntungkan Anda untuk resolusi yang lebih kecil dari ubin Anda. Saya membuat ikhtisar internal level 2 4 8 16 32 dan 64 pada ubin individu. Kemudian bangun VRT dan buat ikhtisar level 128, 256, dan 512 pada VRT (perlu diingat bahwa ini adalah untuk kumpulan data global dengan resolusi 30m - level Anda akan berubah tergantung pada jumlah piksel dalam tiff Anda). Total waktu untuk membuat ikhtisar individual adalah dalam urutan menit (tergantung pada berapa banyak utas yang dapat Anda jalankan dan berapa banyak ubin yang Anda miliki), tetapi membuat ikhtisar pada VRT masih dalam urutan satu jam. Peningkatan runtime atas posting awal saya adalah karena SSD dan membuat level lebih sedikit pada VRT.
Ketiga, Anda dapat bermain dengan opsi GDAL_MAX_DATASET_POOL_SIZE saat membuat vrts seperti dijelaskan di bagian bawah halaman ini . Ini mengatur jumlah maksimum tiff untuk disimpan dalam memori sekaligus.
Keempat, saya menemukan bahwa mengompresi dengan PACKBITS memberikan waktu tampilan tercepat. File-file ini tidak sekecil LZW, tetapi itu adalah tradeoff yang mungkin Anda bersedia buat.
Hasilnya adalah VRT yang memuat dengan cepat dan wajan / zoom hampir mulus.
sumber