pertanyaan saya menyangkut penggunaan dan kinerja beberapa alat perangkat lunak dalam hubungannya, yaitu PostgreSQL, PostGIS, QGIS, dan GDAL.
Saya adalah pengguna lama ArcGIS, Python, dan R yang tertarik untuk melakukan diversifikasi ke dalam ekosistem GIS open source dan Linux juga. Baru-baru ini saya sangat tertarik menggunakan QGIS (ver 2.8) bersama dengan PostgreSQL (ver 9.4) dan PostGIS (ver 2.1), dan saya telah menginstal perangkat lunak pada komputer dengan Windows 8.1 x64 (spesifikasi komputer secara singkat: ThinkPad X200s dengan 2.1GHz Core 2, 8GB RAM, dan 240GB SSD). Setelah saya belajar cara mengelola data spasial saya (senilai ~ 100GB), saya ingin menjalankan Ubuntu di mesin ini.
Saat ini, saya hanya mencoba untuk menyimpan dan mengambil shapefile dan raster secara andal. Sejauh ini saya telah berhasil memuat shapefile ke PostGIS, tetapi raster terbukti lebih bermasalah. Saya telah berhasil menyelesaikan impor tunggal dan batch dari file geoTIFF dan GRID yang kecil, tetapi raster yang lebih besar (katakanlah, file IMG atau TIFF sel 15619x14655 sel dalam ukuran disk 870MB dalam disket) membutuhkan waktu lama untuk memuat ke PostGIS. Saya telah membaca dan mengkonfigurasi alat raster2pgsql untuk membangun indeks spasial dan memuat raster dengan ubin menggunakan parameter ini:
raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres
Kinerja dalam mengimpor masih sangat buruk, dan perangkat kerasnya tidak menjadi masalah. Visualisasi raster PostGIS di QGIS bahkan lebih buruk, secara perlahan memuat raster kecil atau membeku sama sekali. Raster besar seperti yang saya sebutkan tidak mungkin divisualisasikan dalam QGIS. Dari dokumentasi dan diskusi forum, kekurangan ini tampaknya disebabkan oleh driver raster PostGIS GDAL dan bukan QGIS itu sendiri. Forum diskusi menyebutkan masalah ini secara singkat dan beberapa bahkan menyarankan bahwa raster tidak boleh disimpan di PostGIS (apa gunanya dalam database spasial yang tidak menangani raster dengan lancar?). Namun saya secara rutin menggunakan file geodatabase ESRI untuk menyimpan, memvisualisasikan, dan menganalisis raster yang cukup besar (~ 70GB) dengan cepat dan mudah, dan ArcGIS 10.1 tidak pernah membeku atau melambat karena operasi rutin seperti itu.
Apakah ada sesuatu yang saya lewatkan di sini, hambatan yang belum saya bicarakan? Apakah PostgreSQL perlu disetel untuk mewujudkan manfaat kinerja PostGIS? Apakah saya kehilangan versi GDAL yang harus saya buru dan kompilasi? Bagaimana cara saya meningkatkan kinerja dan visualisasi PostGIS dalam QGIS tentang shapefile dan raster? Bagaimana saya bisa menikmati kejayaan manajemen data spasial yang komprehensif dan cepat melalui terminal Linux? Bantuan apa pun tentang masalah ini akan diterima!
Saya mengikuti panduan ini oleh seorang Duncan Golicher: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/
Saya menggunakan ubin dengan pengaturan otomatis awalnya, tapi saya mereset ubin ke 100x100 sel per baris dan kemudian memasukkan piramida seperti yang ditunjukkan dalam panduan seperti ini:
raster2pgsql -s 3161 -d -C -I -M -l 4 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres
Saya berhasil mengimpor raster IMG 870MB dalam waktu yang baik dan menampilkannya di QGIS tanpa memperlambat atau membuat crash aplikasi. Waktu rendering tidak secepat yang saya harapkan, tetapi itu dapat diterima. Saya akan membaca lebih lanjut tentang parameter -l untuk menggunakannya dengan benar.
Kebetulan, dalam mengimpor file dem.img sebagai tabel dem100, tabel raster lain dibuat dengan nama "o_4_dem100". Ketika saya mengimpornya sebagai layer di QGIS, ia memiliki rentang nilai antara 201 hingga 524, sedangkan lapisan dem100 memiliki kisaran 36 hingga 524. Apakah saya benar dengan menganggap bahwa tabel tambahan ini adalah tabel piramida yang memiliki lebih sempit rentang nilai sebagai hasil dari agregasi ke resolusi yang lebih rendah?
Saya tidak berpikir perangkat keras yang tidak memadai adalah masalahnya. Berikut ringkasan singkat dari apa yang saya temukan sejauh ini.
Pengemudi raster PostGIS GDAL telah mengalami masalah kinerja sebelumnya ( lihat di sini juga ). Meskipun masalah ini dicatat pada tahun 2012, saya bertanya-tanya apakah GDAL 1.11.2 yang ditemukan di QGIS 2.8 masih memiliki masalah ini. Tentunya ada orang lain yang menggunakan QGIS dan PostGIS untuk visualisasi dan penyimpanan raster?
Pada catatan terkait yang mungkin, saya juga memiliki masalah kinerja dengan membuka tabel atribut PostGIS di QGIS dengan tabel ~ 4,7 juta catatan . Setelah beberapa saran di utas itu dan tanpa memperbaiki masalah, saya akhirnya mengajukan laporan bug dengan QGIS yang akhirnya ditutup dan ditautkan ke laporan bug serupa berikut ini . Meskipun laporan bug ditutup, sepertinya tidak diperbaiki ...
Singkatnya upaya saya sejauh ini:
- Saya telah mengoptimalkan server PostgreSQL untuk data spasial.
- Saya telah membangun indeks spasial untuk tabel geometri dan melakukan VACUUM.
- Perilaku QGIS untuk membuka tabel atribut besar (~ catatan 4.7m) tampaknya mencoba membaca semua catatan daripada mengembalikan subset untuk tampilan instan. Ini menyebabkan kinerja yang buruk.
Kinerja dalam merender tabel geometri PostGIS yang besar sepertinya tidak menjadi masalah.
Dengan raster2pgsql, raster diindeks, ubin, dan diimpor sebagai tabel raster dengan piramida di PostGIS.
- Raster dengan ukuran berapapun masih sangat lambat untuk mengimpor ke PostGIS, apalagi terbuka dan berjalan di QGIS.
Perlu juga dicatat bahwa ketika mengimpor raster besar atau membuka tabel atribut besar dengan PostGIS, konsumsi memori untuk raster2pgsql dan qgis-bin lebih dari 1GB. Seperti yang disebutkan oleh @Michael dan @Paul sebagai jawaban atas pertanyaan awal saya, tampaknya PostGIS tidak dimaksudkan untuk membawa banyak manfaat bagi penyimpanan raster. Namun, pada saat itu saya mempertanyakan mengapa saya menjalankan QGIS + PostGIS sama sekali untuk kebutuhan GIS saya, terutama ketika ESRI fileGDB mengaktifkan atribut raster, dataset mosaik, dan operasi raster lainnya yang difasilitasi oleh geodatabase. Jadi mungkin saya benar - benar kehilangan sesuatu atau QGIS dan PostGIS tidak memenuhi kebutuhan GIS saya. Saya menemukan yang terakhir sulit dipercaya.
sumber
Jawaban:
Jika Anda ingin menampilkan raster besar di QGIS, Anda harus membuat piramida, baik untuk gambar tif pada sistem file atau untuk gambar yang terdaftar di Postgis.
Perbedaan kinerja dalam render QGIS antara raster besar dalam sistem file atau di Postgis adalah miminal. Pengguna tidak akan melihat perbedaannya. Tetapi - jika dan hanya jika - Anda membangun piramida dengan opsi
-l
.Jika Anda sederhana mengimpor gambar tanpa opsi -l, atau hanya dengan
-l 4
itu tidak akan berfungsi .Jika Anda menggunakan, misalnya,
-l 2,4,8,16
empat tingkat piramida akan dibuat, seperti pada lapisan di bawah ini:Jika Anda ingin memiliki pengalaman pengguna yang lebih baik, Anda harus menambahkan lebih banyak level piramida
-l 2,4,8,16,32,64,128,256
. Ini akan membuat delapan level piramida.Untuk meringkas, jawaban untuk pertanyaan ini adalah: mengimpor raster dengan opsi
-l
dan menggunakan jumlah tingkat piramida yang sama seperti yang Anda gunakan untuk raster yang sama pada sistem file.Sebagai contoh:
sumber
Saya memiliki masalah yang sama persis dengan rendering raster di QGIS dari PostGIS (lihat pertanyaan saya baru-baru ini ). Saya merasa posting ini bermanfaat dan sedikit meningkatkan raster rendering berikut:
shared_buffers = 5000MB work_mem = 100MB maintenance_work_mem = 100MB
Namun, dengan itu, saya setuju sepenuhnya bahwa kinerja raster PostGIS di QGIS tidak bagus. Saya berurusan dengan 608 geotiff terkompresi yang memuat hebat sebagai VRT tetapi pada dasarnya tidak dapat digunakan di PostGIS. Cobalah untuk meningkatkan kinerja server dbase, tetapi di luar itu saya tidak bisa terlalu membantu. Saya juga mungkin harus bergantung pada sistem file untuk melayani raster dalam organisasi saya.
sumber
Tidak yakin apakah itu kasus Anda, tapi saya tahu
-I
sebaiknya tidak digunakan bersama dengan menambahkan data-a
.Saya mengimpor banyak file TIF ke dalam DB, dan
-I
benar - benar membuat indeks lagi dan tampilanalyse
di atas meja untuk setiap file, yang membutuhkan waktu 10x lebih banyak.-I
seharusnya hanya digunakan saat membuat tabel, dengan-p
opsi.sumber