Kinerja buruk dengan menyimpan raster besar di PostGIS dan memvisualisasikan di QGIS

23

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.

mbcaradima
sumber
Apakah raster harus ada di PostGIS? Apa manfaat / fungsi tambahan yang Anda harapkan dari ini? Saya menemukan bahwa vektor PostGis dapat diterima, dan menawarkan pengeditan multi-pengguna tetapi raster PostGis tidak memiliki manfaat nyata dibandingkan raster berbasis file. Pertanyaan yang bagus; sangat mungkin ada beberapa manfaat yang saya lewatkan dalam evaluasi saya ...
Michael Stimson
Saya pikir raster PostGIS memungkinkan perhitungan raster yang lebih cepat serta kinerja yang lebih baik dengan operasi raster / vektor. Itu di samping manfaat dari DB spasial: keandalan, aksesibilitas, fasilitas cadangan, penyimpanan yang lebih kompak, dll. Dalam hal apa pun, pendekatan file / ubin tidak memungkinkan untuk fungsi pencarian, piramida yang sudah dibangun sebelumnya, ubin, dan kemampuan lain yang meningkatkan cara raster digunakan dan divisualisasikan.
mbcaradima
Saya telah melihat tidak ada metrik yang mengatakan raster PostGIS lebih cepat pada perhitungan raster .. dalam kedua kasus dengan 240GB SSD (BTW pilihan bagus, lebih cepat dari RAID di sebagian kecil dari biaya / usaha) Anda akan mengisinya dengan sangat cepat dengan raster ... ECW / JP2 untuk 8bit atau GeoTIFF dengan kompresi LZW / Deflate mencentang sebagian besar dari kotak-kotak itu, piramida pra-bangun, ubin (melalui VRT), cadangan sebagai file, dll ... satu-satunya keuntungan adalah fungsi pencarian. Saya sadar saya mendapatkan sedikit topik, tetapi jika PostGIS raster tidak melakukan apa yang Anda harapkan, mengapa tidak tetap menggunakan file raster untuk ditampilkan?
Michael Stimson
3
Siapa yang pernah mengatakan bahwa raster PostGIS lebih cepat dari apa pun? Mereka bisa lebih nyaman (API akses SQL praktis) dan mereka dapat berguna untuk analisis (raster dan vektor dalam ember yang sama) tetapi lebih cepat ? Tak pernah.
Paul Ramsey
1
Saya sedang mengerjakan sebuah buku tentang PostGIS (PostGIS in Action, 2nd ed) dan tampaknya wajar untuk mengasumsikan bahwa manfaat menyimpan shapefile dalam DB spasial akan diperluas ke raster juga. Tentu saja, mengingat model data yang berbeda, saya dapat melihat asumsi ini murni intuitif. Meski demikian, raster umumnya disimpan dalam basis geodatase dengan ArcGIS dan memungkinkan untuk membangun piramida, geoproses yang lebih cepat, dan membangun mosaik. Dalam alur kerja dengan perangkat lunak sumber terbuka, bagaimana seharusnya pengguna GIS bekerja dengan raster? BTW, saya akan meninju wajah saya dengan sepatutnya.
mbcaradima

Jawaban:

9

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,16empat tingkat piramida akan dibuat, seperti pada lapisan di bawah ini:

Piramida dihasilkan dengan -l 2,4,8,16

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.

masukkan deskripsi gambar di sini

Untuk meringkas, jawaban untuk pertanyaan ini adalah: mengimpor raster dengan opsi -ldan menggunakan jumlah tingkat piramida yang sama seperti yang Anda gunakan untuk raster yang sama pada sistem file.

Sebagai contoh:

raster2pgsql -s 3161 -d -C -I -M -l 2,4,8,16,32,64,128,256 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres
jgrocha
sumber
5

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.

Jurang
sumber
Terima kasih atas komentar Anda, Cliff. Saya telah menerapkan beberapa perubahan Anda dan akan melaporkan peningkatan kinerja besar apa pun. Secara keseluruhan saya harus mengatakan bahwa kinerja QGIS mengecewakan untuk memvisualisasikan raster PostGIS dan memuat / meng-query tabel atribut. Kinerja raster di PostGIS juga mengecewakan. Saya tidak punya masalah dengan geodatabases file, jadi saya ingin tahu apa yang salah?
mbcaradima
1
Sentimen saya tepatnya. Saya menghabiskan minggu mencoba untuk menjalankan ini dan tidak bisa menjalankannya. Saya sekarang sedang menguji VM saya (Ubuntu Server) dengan 10 prosesor dan 10GB ram. Jika itu masih lamban, saya pasti melakukan sesuatu yang salah. Saya juga bingung mengapa lapisan WMS di QGIS pada dasarnya tidak dapat digunakan karena kecepatan renderingnya yang lambat. Kita harus lebih terhubung pada ini karena kita berdua berada di kapal yang sama.
Cliff
Jika mereka memuat hebat sebagai VRT, mengapa Anda tidak berhenti di situ? Apa untung yang Anda harapkan dari perjalanan raster yang hebat ini?
Paul Ramsey
Saya kira jawaban saya untuk ini, Paul, adalah persis apa yang OP katakan pada posting berikutnya: "Namun, pada saat itu saya mempertanyakan mengapa saya akan menjalankan QGIS + PostGIS sama sekali untuk kebutuhan GIS saya, terutama ketika ESRI fileGDBs mengaktifkan atribut raster, set data 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. "
Tebing
1
Lebih jauh, saya akan mengatakan bahwa sekitar 70% dari analisis yang saya lakukan adalah pada raster, dan sekitar 40% dari data yang ingin saya layani untuk organisasi saya melalui QGIS adalah data raster. Masuk akal untuk memiliki semua data raster dan vektor dalam satu basis data sehingga pengguna dapat mengatur satu koneksi dan memiliki akses ke seluruh basis data organisasi kami. Sebagai gantinya, saya harus membuat kredit untuk dbase dan kredit untuk berbagi file. Bergantian, saya serius mempertimbangkan untuk membatalkan QGIS dan membangun aplikasi web dengan Geoserver (ps: selalu bersedia untuk berkolaborasi dalam hal ini dengan siapa pun yang tertarik).
Cliff
4

Tidak yakin apakah itu kasus Anda, tapi saya tahu -Isebaiknya tidak digunakan bersama dengan menambahkan data -a.

Saya mengimpor banyak file TIF ke dalam DB, dan -Ibenar - benar membuat indeks lagi dan tampil analysedi atas meja untuk setiap file, yang membutuhkan waktu 10x lebih banyak.

-Iseharusnya hanya digunakan saat membuat tabel, dengan -popsi.

Raphael Jolivet
sumber