Kecepatan berbagai format data raster

25

Saya mengalami kesulitan menemukan diskusi atau pembandingan perbandingan format file raster yang berbeda (misalnya, untuk digunakan dalam analisis data dalam R). Adakah yang tahu mengapa format tertentu lebih cepat atau lambat? Atau haruskah perbedaannya minimal?

Secara khusus, saya tertarik jika mengonversi raster (mis., File GEOTIFF) ke format lain (mis., NetCDF) pernah bermanfaat untuk keperluan mempercepat baca / tulis dan operasi lainnya.

George
sumber
2
Pertanyaan ini relevan dengan GIS, tetapi saya curiga Anda lebih mungkin mendapatkan jawaban pada SO, yang memiliki sub-komunitas yang kuat dari para pakar R. Jika Anda tidak mendapatkan jawaban dengan cepat, harap tandai saja pertanyaan ini dan moderator akan memigrasikannya untuk Anda.
whuber

Jawaban:

9

Berikut ini adalah artikel blog lama saya yang melihat ukuran file dan waktu akses format. Saya tidak menyelidiki kecepatan menulis, hanya waktu akses. Saya akan mengatakan mereka mungkin berhubungan langsung, tetapi tidak akan dapat menjaminnya.

Ringkasan Artikel: Tampaknya Packbits memberi Anda waktu akses terbaik (dengan mengorbankan ruang disk), sedangkan Deflate memberi Anda waktu akses menengah / lambat untuk file menengah / kecil. Selain itu, Anda dapat menguji waktu akses secara lebih empiris dengan membuat thumbnail berbagai ukuran dan menentukan waktu yang diperlukan. Contoh perintah:time gdal_translate -outsize <thumbnail dimensions> -of GTiff <compressed image file> <thumbnail file>

Dengan asumsi bahwa satu-satunya hal yang relevan dengan R dalam hal ini adalah seberapa cepat ia dapat membaca data dari file, sama seperti proses lainnya, maka itu akan memberi Anda indikasi yang baik.

R Thiede
sumber
Memberi +1 untuk artikel yang ditautkan, tetapi info penting di luar kantor dan akan hilang bagi kami jika laman itu turun atau bergerak. Saya menyarankan untuk memberikan kesimpulan ringkasan artikel sehingga jika halaman tersebut tidak tersedia, bahkan untuk sementara waktu, pembaca memiliki sesuatu untuk dikerjakan untuk penelitian dan pemikiran di masa depan. Terima kasih!
matt wilkie
Cukup adil! Tampaknya Packbits memberi Anda waktu akses terbaik (dengan mengorbankan ruang disk), sedangkan Deflate memberi Anda waktu akses menengah / lambat untuk file menengah / kecil. Selain itu, Anda dapat menguji waktu akses secara lebih empiris dengan membuat thumbnail berbagai ukuran dan menentukan waktu yang diperlukan. Contoh perintah: "time gdal_translate -tukuran <thumbnail thumbnail> -dari GTiff <file gambar terkompresi> <file thumbnail>"
R Thiede
1
Terima kasih! Saya melipat ringkasan menjadi jawaban itu sendiri, jadi lebih lengkap (lihat tautan edit di kiri bawah setiap jawaban / pertanyaan).
matt wilkie
@RThiede memiliki kekhawatiran yang valid: tampaknya memang sekarang tautan ke blog tidak lagi valid?
Matifou
@RThiede Tautan Anda sudah mati, dapatkah Anda memberikan yang baru?
Majid Hojati
6

Untuk operasi baca / tulis , Anda dapat menguji kecepatan operasi tersebut menggunakan system.time (). Berikut adalah beberapa hasil dari memuat file DEM dalam R (paket Raster) yang diterjemahkan ke dalam empat format (ASCII, IMG dan TIF tanpa kompresi dan Deflate). Misalnya, pada raster ~ 26MB:

> system.time(dem <- raster("~/workspace/TEMP/kideporegion.img"))
 user  system elapsed 
 0.154   0.002   0.157 

'Elapsed' memberikan total waktu (detik) yang diambil untuk operasi. Menjalankan operasi masing-masing 10 kali dan melihat rata-rata waktu yang telah berlalu:

              mean   diff
ASC         0.2237 0.3317
IMG         0.1544 0.0318
tif-Deflate 0.1510 0.0099
tif-none    0.1495 0.0000
tif-pack    0.1513 0.0118

TIFF tanpa kompresi adalah yang tercepat ... diikuti oleh Deflate (0,1% lebih lambat) dan TIFF-Packbits (1,8% lebih lambat), kemudian IMG (3,2% lebih lambat) dan ASC (33% lebih lambat). (Ini pada Macbook Pro 2.4 GHz dengan SSD, jadi operasi disk jadi cepat)

Ini hanya untuk memuat file, bukan memanipulasi mereka.

Simbamangu
sumber
4

Mungkin ini benar-benar bukan pertanyaan format gambar raster mana yang memiliki tolok ukur pembukaan yang lebih baik - melainkan format gambar raster mana yang merupakan format sumber raster paling efisien untuk dibuka dan dibaca sebagai input ke dalam array numerik R. Dan selanjutnya - apa format output paling efisien dari R dengan asumsi Anda akan mengeluarkan hasil kembali ke raster.

Either way, jika Anda akan bekerja dengan raster di R Anda kemungkinan akan menggunakan paket rgdal dan R ncdf untuk melengkapi apa yang terkandung dalam paket r raster . Dengan mengandalkan prinsipal pada perintah gdalwarp . Perlu mengerjakan dependensi format di sana untuk membuat pilihan raster Anda. Anda akan menemukan cakupan yang adil pada SO dan berbagai OSGEO dan forum R / blog / wiki.

Tetapi karena ini adalah forum GIS di mana penggunaan Python dalam kekuasaan relatif, saya akan mencatat bahwa ada keuntungan untuk bekerja dengan data raster dalam array numpy Python, dengan ketergantungan yang sama pada pustaka gdal untuk memuat raster, konversi dan ekspor. Beberapa orang menemukan manajemen memori dan struktur kode dalam Python lebih disukai daripada R asli - mungkin lihat RPy2 atau PypeR karena keduanya mungkin sesuai untuk penggunaan analisis Anda.

V Stuart Foote
sumber
Untuk memanipulasi data netCDF (sumber raster atau lainnya) di R, berikut adalah tautan ke dua paket netCDF yang di-host R CRAN, ncdf4 - cran.r-project.org/web/packages/ncdf4/index.html dan RNetCDF - cran. r-project.org/web/packages/RNetCDF/index.html
V Stuart Foote
4

Sebuah pertanyaan besar adalah apakah Anda akan membaca seluruh raster dari file ke dalam memori sebelum memprosesnya, atau apakah file tersebut sangat besar sehingga Anda akan memprosesnya secara bertahap, atau memproses beberapa bagian dari keseluruhan file.

Jika Anda akan memuat semuanya ke dalam memori, maka Anda akan melakukan sebagian besar akses sekuensial, dan format tercepat akan menjadi lemparan antara penyimpanan polos dan terkompresi (tergantung pada hal-hal seperti seberapa cepat CPU Anda versus disk). Salah satu format file biner mungkin akan sangat dekat (ASCII akan lebih lambat).

Jika Anda perlu memproses subset dari file yang sangat besar, maka format yang mengelompokkan subset yang Anda inginkan lebih dekat mungkin lebih cepat - misalnya: petak atau format yang dapat menghitung offset. Kadang-kadang pendekatan tanpa kompresi mendapatkan di sini karena mungkin sepele untuk menghitung di mana bagian tertentu dari gambar berada di dalam file, terutama jika Anda hanya memerlukan bagian dari baris yang sangat besar, tetapi kompresi dapat dilakukan dengan cara granular yang bekerja dengan baik untuk beberapa pola akses.

Maaf, tetapi Anda mungkin harus melakukan benchmark tergantung pada pola akses Anda, daripada mendapatkan satu ukuran untuk semua. Tentu saja ini tergantung tidak hanya pada format file dan faktor-faktor di atas, tetapi pada driver untuk format itu dan perangkat lunak Anda.

Zeph
sumber
2

Cara Anda berpikir tentang masalah-masalah semacam ini adalah dalam hal bagaimana aplikasi Anda mengakses file Anda, vs. bagaimana data diletakkan dalam file Anda. Idenya adalah bahwa jika Anda dapat mengakses data Anda secara berurutan, itu akan jauh lebih efisien daripada jika Anda mengaksesnya secara acak.

GeoTIFF adalah kumpulan "gambar" 2D atau array. NetCDF adalah penyimpanan untuk keperluan umum untuk array multidimensi. Tetapi jika Anda menyimpan array dengan cara yang sama di netCDF seperti di GeoTIFF, Anda akan mendapatkan kinerja yang sama, lebih atau kurang.

Anda juga dapat mengatur ulang data dalam netCDF, sehingga secara prinsip dapat mengoptimalkan pola bacaan Anda. Dugaan saya adalah bahwa sebagian besar aplikasi GIS dioptimalkan untuk tata letak GeoTIFF 2D, jadi tidak ada banyak keuntungan dengan menata ulang.

Akhirnya, Id mengatakan itu benar-benar hanya penting ketika Anda memiliki file yang sangat besar, setidaknya puluhan megabita.

John Caron
sumber
+1 untuk titik yang akses acak, atau membaca dari lokasi yang sewenang-wenang, sangat berbeda dari yang berurutan satu demi satu sampai seluruh file selesai dibaca. Saya mungkin tidak aktif, tapi saya pikir Geotiff juga mendukung penyimpanan ubin dan akses sewenang-wenang, hanya saja dengan strip / baris adalah yang paling umum dan didukung secara luas. Saat ini "file sangat besar" di GIS cenderung berada dalam kisaran multi GB. ;-)
matt wilkie
2

Saya membaca beberapa halaman tentang ini beberapa tahun yang lalu dan sejak itu menggunakan tiff dengan kompresi paket, ubin dengan header geotiff, dan telah senang.

artikel tim arcpad

wiki

Tetapi setelah membaca yang berikut, saya akan mempertimbangkan kembali dan mungkin menggunakan varietas deflate.

Situs Arcpad

Brad Nesom
sumber
2

Begitu banyak paket menggunakan GDAL di bawah tenda, misalnya, rgdal, QGIS, GRASS, dll. Jika saya menggunakan salah satu paket itu, maka saya akan berpikir untuk mengubah gambar saya ke vrt. Saya sering melihatnya merekomendasikan bahwa ketika Anda perlu menggunakan dua perintah GDAL, maka file perantara harus berupa file vrt karena overhead baca minimal (misalnya, http://www.perrygeo.com/lazy-raster-processing -dengan-gdal-vrts.html ). Kedengarannya seperti alur kerja Anda: konversi sekali dan baca berkali-kali. Mungkin vrt akan sesuai.

[Sunting: tautan disesuaikan]

pengguna55937
sumber