PostGIS'te büyük rasterleri saklamak ve QGIS'de görselleştirmek ile düşük performans


23

Sorum, PostgreSQL, PostGIS, QGIS ve GDAL gibi çeşitli yazılım araçlarının kullanımı ve performansı ile ilgilidir.

Ben uzun zamandır ücretsiz bir açık kaynaklı GIS ekosistemi ve Linux'u çeşitlendirmekle ilgilenen ArcGIS, Python ve R kullanıcısıyım. Son zamanlarda QGIS (sürüm 2.8) ile PostgreSQL (sürüm 9.4) ve PostGIS (sürüm 2.1) ile çok ilgilenmiştim ve yazılımı Windows 8.1 x64 olan bir bilgisayara yükledim (kısaca bilgisayardakiler: ThinkPad 2.1 GHz Çekirdek 2, 8 GB RAM ve 240 GB SSD olan X200'ler). Mekansal verilerimin nasıl yönetileceğini (~ 100GB değerinde) öğrendikten sonra, bu makinede Ubuntu'yu çalıştırmak istiyorum.

Şu anda sadece şekil dosyalarını ve tarama dosyalarını güvenilir bir şekilde depolamaya ve almaya çalışıyorum. Şimdiye kadar, PostGIS'e shapefiles yüklemede başarılı oldum, ancak rasterler daha problemli olduğunu kanıtladı. Küçük geoTIFF ve GRID dosyalarının tek tek ve toplu olarak içe aktarılmasını başarıyla tamamladım, ancak daha büyük rasterler (örneğin, 15619x14655 hücreli IMG veya 870 MB boyutunda TIFF dosyası diskte) PostGIS'e yükleme yapmak sonsuza dek sürüyor. Bu parametreleri kullanarak uzamsal dizinler oluşturmak ve rasterleri döşemelerle yüklemek için raster2pgsql aracını okudum ve yapılandırdım:

raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres

İthalatta performans hala çok düşük ve donanım sorunu değil. PostGIS rasterlerinin QGIS'de görselleştirilmesi daha da kötüdür, küçük rasterleri yavaşça en iyi şekilde yükler veya tamamen dondururlar. Bahsettiğim gibi büyük rasterlerin QGIS'te görselleştirilmesi imkansız. Dokümantasyon ve forum tartışmalarından, bu eksiklik GDAL'in PostGIS raster sürücüsü ve QGIS'in kendisinden kaynaklanıyor gibi görünüyor. Forum tartışmaları bu problemden kısaca bahseder ve hatta bazılarının rasterlerin PostGIS'te saklanmaması gerektiğini (rasterleri sorunsuz bir şekilde işlemeyen mekansal bir veritabanındaki nokta nedir?) Önerir. Yine de, oldukça büyük (~ 70GB) rasterleri hızlı ve kolay bir şekilde saklamak, görselleştirmek ve analiz etmek için ESRI'nin dosya coğrafi veritabanını rutin olarak kullanıyorum ve ArcGIS 10.1 bu rutin işlemler nedeniyle asla donmuyor veya yavaşlamıyor.

Burada özlediğim bir şey var mı, ele almadığım bir darboğaz mı? PostgreSQL'in PostGIS'in performans avantajlarını gerçekleştirmek için ayarlamaya ihtiyacı var mı? Saklamak ve derlemek için ihtiyaç duyduğum bir GDAL sürümü eksik mi? Özellikle şekil dosyalarının ve rasterlerin QGIS'sinde PostGIS performansını ve görselleştirmesini nasıl iyileştiririm? Bir Linux terminali aracılığıyla kapsamlı ve hızlı mekansal veri yönetimi görkeminin tadını nasıl çıkarabilirim? Bu konuda herhangi bir yardım memnuniyetle karşılanacaktır!


Bu kılavuzu bir Duncan Golicher tarafından takip ettim: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/

Orijinal olarak otomatik ayarlanmış döşemeler kullanıyordum, ancak döşemeyi her satırda 100x100 hücreye ayarlıyorum ve daha sonra kılavuzda gösterildiği gibi piramitleri ekledim

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

870 MB IMG rasterini iyi bir zamanda başarıyla içe aktardım ve uygulamayı yavaşlatmadan veya kilitlemeden QGIS'de gösterdim. Oluşturma süresi beklediğim gibi çabuk değil, ancak kabul edilebilir. Düzgün kullanmak için -l parametresinde daha fazla okuyacağım.

Bu arada, dem.img dosyasını dem100 tablosu olarak içe aktarırken "o_4_dem100" adı verilen başka bir raster tablo oluşturuldu. QGIS'te bir katman olarak içe aktardığımda, 201 ila 524 arasında bir değer aralığına sahipken, dem100 katmanı 36 ila 524 arasında bir değere sahiptir. düşük bir çözünürlükte toplanmanın sonucu olarak değer aralığı?


Yetersiz donanım sorun olduğunu sanmıyorum. İşte şimdiye dek ne bulduğuma dair kısa bir özet.

GDAL'in PostGIS raster sürücüsünün geçmiş performans sorunları var ( buraya da bakınız ). Bu sorunların 2012 yılında da belirtilmesine rağmen, QGIS 2.8'de bulunan GDAL 1.11.2'nin hala bu sorunu yaşayıp yaşamadığını merak ediyorum. Elbette, raster görselleştirme ve depolama için QGIS ve PostGIS kullananlar da var mı?

Olası bir notta, QGIS'de PostGIS özellik tablolarını QGIS'te ~ 4.7m kayıt tablolarıyla açmakla ilgili performans sorunlarım da oldu . Bu konudaki birkaç öneriden sonra ve sorunu çözmeden nihayetinde QGIS ile kapatılan ve aşağıdaki benzer hata raporuna bağlı bir hata raporu hazırladım . Hata raporu kapatılsa da, sabit görünmüyor ...

Şimdiye kadarki çabalarımı özetlemek için:

  • PostgreSQL sunucusunu mekansal veriler için optimize ettim.
  • Geometri tabloları için mekansal endeksler oluşturdum ve bir VAKUM yaptım.
  • Büyük öznitelik tablolarını (~ 4.7m kayıtlar) açmak için QGIS davranışı , anlık görüntüleme için bir altküme döndürmek yerine tüm kayıtları okumayı deniyor gibi görünüyor . Bu düşük performansa yol açar.
  • Büyük PostGIS geometri tabloları render Performans gelmez değil bir sorun olarak görünmektedir.

  • Raster2pgsql ile, rasterler indekslendi, döşendi ve PostGIS'te piramitlerle raster tabloları olarak içe aktarıldı.

  • Makul boyuttaki rasterlerin PostGIS'e aktarılması, QGIS'te serbestçe açılıp kaydırılmaya devam edilmesi hâlâ inanılmaz derecede yavaş.

Ayrıca, büyük rasterleri içe aktarırken veya PostGIS ile büyük öznitelik tablolarını açarken, raster2pgsql ve qgis-bin için bellek tüketiminin 1 GB'ın üzerinde olduğunu belirtmekte fayda var. @Michael ve @Paul ilk soruma cevaben bahsettiği gibi, PostGIS'in rasterleri saklamak için herhangi bir fayda sağlaması durumunda fazla bir şey getirmediği anlaşılıyor. Ancak, bu noktada, özellikle ESRI fileGDB'ler raster niteliklerini, mozaik veri kümelerini ve coğrafi veritabanının kolaylaştırdığı diğer raster işlemlerini etkinleştirdiğinde, CBS ihtiyaçlarım için neden QGIS + PostGIS'i çalıştırdığımı soruyorum. Öyleyse belki ya gerçekten bir şeyleri özlüyorum ya da QGIS ve PostGIS GIS ihtiyaçlarımı karşılamıyor. İkincisini inanması zor buluyorum.


Rasterle mu var PostGIS olmak? Bundan ne gibi faydalar / ekstra işlevler kazanmayı umuyorsunuz? PostGis vektörünün kabul edilebilir olduğunu ve çok kullanıcılı düzenlemeler sunduğunu ancak PostGis rasterinin dosya tabanlı (sunucuda depolanan) raster üzerinde gerçek bir faydası olmadığını buldum. Yine de iyi bir soru; değerlendirmemde kaçırmış olduğum bazı avantajlar olabilir ...
Michael Stimson

PostGIS taramalarının daha hızlı tarama hesaplamalarının yanı sıra tarama / vektör işlemleriyle daha iyi performans sağladığını düşündüm. Bu, mekansal bir DB'nin avantajlarına ek olarak: güvenilirlik, erişilebilirlik, yedekleme olanakları, daha kompakt depolama vb. Her durumda, bir dosya / döşeme yaklaşımı arama işlevlerine, önceden oluşturulmuş piramitlere, döşemeye ve rasterin nasıl kullanıldığını ve görselleştirildiğini geliştiren diğer yetenekler.
mbcaradima

PostGIS rasterlerinin raster hesaplamalarında daha hızlı olduğunu söyleyen hiçbir metrik görmedim. Her iki durumda da 240GB SSD (iyi bir seçim BTW, maliyet / çabanın bir kısmında RAID'den daha hızlı) rasterlerle çok hızlı bir şekilde dolduracaksınız ... 8W için ECW / JP2 veya LZW / Deflate sıkıştırmalı GeoTIFF, bu kutuların çoğunu tıklar, önceden yapılmış piramitler, fayans (VRT ile), dosya olarak yedekleme, vb ... tek yararı arama işlevidir. Konudan biraz kurtulduğumun farkındayım, ancak PostGIS raster beklediğiniz şeyi yapmıyorsa neden görüntülü raster ile yapıştırılmıyorsunuz?
Michael Stimson

3
PostGIS rasterlerinin her şeyden daha hızlı olduğunu kim söyledi ? Daha kullanışlı olabilirler (kullanışlı SQL erişim API'si) ve analiz için yararlı olabilirler (aynı kovada raster ve vektör) ama daha hızlı ? Asla.
Paul Ramsey

1
PostGIS üzerine bir kitap üzerinde çalışıyorum (PostGIS in Action, 2nd ed) ve şekil dosyalarının mekansal bir veri tabanında saklanmasının yararlarının da bir raster için genişleyeceğini varsaymak doğal görünüyordu. Tabii ki, farklı veri modelleri göz önüne alındığında, bu varsayımın tamamen sezgisel olduğunu görebiliyorum. Yine de, rasterler genellikle ArcGIS ile coğrafi veri tabanlarında depolanır ve bina piramitleri, daha hızlı coğrafi işlemler ve bina mozaikleri sağlar. Açık kaynaklı yazılım içeren bir iş akışında, bir CBS kullanıcısının rasterlerle nasıl çalışması gerekiyor? Btw, usulüne uygun olarak kendimi yumruklayacağım.
mbcaradima

Yanıtlar:


9

QGIS'de büyük rasterleri görüntülemek istiyorsanız, dosya sistemindeki bir tif resmi veya Postgis'te kayıtlı bir resim için piramitler oluşturmanız gerekir.

QGIS görüntülemede dosya sistemindeki veya Postgis'teki büyük bir raster arasındaki performans farkı çok azdır. Kullanıcılar farkı farketmeyeceklerdir. Ancak - eğer ve sadece ise - seçeneği ile piramitleri inşa edersiniz -l.

Eğer basit ithalat l seçeneği olmadan, ya da sadece birlikte görüntü -l 4 o iş olmaz .

Örneğin, -l 2,4,8,16aşağıdaki katmandaki gibi dört düzey piramit oluşturulacaktır:

-L 2,4,8,16 ile üretilen piramitler

Daha iyi bir kullanıcı deneyimi yaşamak istiyorsanız, daha fazla seviyede piramit eklemelisiniz -l 2,4,8,16,32,64,128,256. Bu sekiz seviye piramit yaratacaktır.

görüntü tanımını buraya girin

Özetlemek gerekirse, bu sorunun cevabı şudur: raster'i seçenekle içe aktarın -lve dosya sistemindeki aynı raster için kullandığınız aynı piramit seviyelerini kullanın.

Örneğin:

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

5

PostGIS'ten QGIS'te raster oluşturma ile aynı sorunları yaşıyorum ( son soruma bakın ) Bu yazıyı yararlı buldum ve aşağıdaki geliştirilmiş raster oluşturma özelliğini biraz arttırdım:

shared_buffers = 5000MB work_mem = 100MB bakım_work_mem = 100MB

Bununla birlikte, bununla birlikte, PostGIS taramalarının QGIS'deki performansının mükemmel olmadığı konusunda hemfikirim. PostGIS'te VRT olarak harika yüklenen ancak esas olarak kullanılamaz durumda olan 608 adet sıkıştırılmış geotiff ile ilgileniyorum. Dbase sunucusunun performansını artırmaya çalışın, ancak bunun ötesinde çok yardımcı olamam. Benim kurumumdaki rasterleri sunmak için de dosya sistemine güvenmek zorunda kalabilirim.


Yorumunuz için teşekkürler, Cliff. Değişikliklerinizden bazılarını uyguladım ve önemli performans iyileştirmeleri rapor edeceğim. Genel olarak, QGIS performansının PostGIS rasterlerini görselleştirmek ve nitelik tablolarını yüklemek / sorgulamak için hayal kırıklığı yarattığını söylemeliyim. PostGIS'deki raster performansı da hayal kırıklığı yaratıyor. Dosya geodatabases ile bu sorunların hiçbiri yok, bu yüzden neyin yanlış olduğunu merak ediyorum?
mbcaradima

1
Benim düşüncelerim tam olarak. Haftayı bu işe koyulmaya çalışarak geçirdim ve basitçe çalışmasını sağlayamadım. Şimdi VM'mi (Ubuntu Sunucusu) 10 işlemci ve 10 GB ram ile test ediyorum. Bu hala halsizse, başka bir yanlış yapıyorum olmalı. Ayrıca, QGIS'deki WMS katmanlarının neden yavaş işleme hızları nedeniyle temel olarak kullanılamaz olduklarına da şaşırdım. İkimiz de aynı gemideyiz, bu konuda daha fazla bağlantı kurmalıyız.
Cliff

VRT kadar iyi yüklerlerse neden orada durmadınız? Bu harika raster yolculuktan ne kazanmayı bekliyorsunuz?
Paul Ramsey,

Sanırım buna cevabım Paul, OP'nin bir sonraki mesajda söylediği gibi oldu: "Ancak, bu noktada neden CBS ihtiyaçları için QGIS + PostGIS'i çalıştırdığımı soruyorum, özellikle ESRI dosyasıGDB'ler tarama özelliklerini etkinleştirdiğinde, mozaik veri kümelerini ve coğrafi veri tabanı tarafından kolaylaştırılan diğer raster işlemleri. Belki de gerçekten bir şeyleri özlüyorum ya da QGIS ve PostGIS GIS ihtiyaçlarımı karşılamıyor. İkincisini inanmakta zorlanıyorum. "
Cliff

1
Dahası, yaptığım analizin yaklaşık% 70'inin rasterler üzerinde olduğunu ve kabaca kuruluşuma QGIS aracılığıyla sunmak istediğim verilerin% 40'ının raster veri olduğunu söyleyebilirim. Tüm raster ve vektör verilerinin bir veritabanında olması mantıklıdır, böylece kullanıcılar bir bağlantı kurabilir ve tüm kurumumuzun veritabanına erişebilir. Bunun yerine, dbase için creds ve dosya paylaşımı için creds oluşturmak zorunda kalacağım. Alternatif olarak, QGIS'i hurdaya çıkarmayı ve Geoserver ile bir web uygulaması oluşturmayı ciddi olarak düşünüyorum (ps: bu konuda her zaman ilgilenenlerle işbirliği yapmaya istekli).
Cliff

4

Davanızın olup olmadığından emin değilim, ancak -Iekleyen verilerle birlikte kullanılmaması gerektiğini öğrendim -a.

Çok sayıda TIF dosyasını bir DB'ye aktarıyordum ve -Iaslında dizini yeniden yaratıyor ve analyseher bir dosya için 10x daha fazla zaman alan masada gerçekleştiriyor .

-I-pseçeneği sadece tabloyu oluştururken kullanılmalıdır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.