la mia domanda riguarda l'uso e le prestazioni di numerosi strumenti software insieme, vale a dire PostgreSQL, PostGIS, QGIS e GDAL.
Sono un utente ArcGIS, Python e R di vecchia data interessato a diversificarsi nell'ecosistema GIS open source gratuito e anche in Linux. Recentemente sono stato molto interessato all'utilizzo di QGIS (versione 2.8) insieme a PostgreSQL (versione 9.4) e PostGIS (versione 2.1) e ho installato il software su un computer con Windows 8.1 x64 (le specifiche del computer in breve: ThinkPad X200s con un Core 2 da 2,1 GHz, 8 GB di RAM e un SSD da 240 GB). Una volta che ho imparato a gestire i miei dati spaziali (~ 100 GB), vorrei eseguire Ubuntu su questa macchina.
Al momento, sto semplicemente cercando di archiviare e recuperare in modo affidabile shapefile e raster. Finora ho avuto successo nel caricare file di forma in PostGIS, ma i raster si stanno dimostrando più problematici. Ho completato con successo le importazioni singole e batch di piccoli file geoTIFF e GRID, ma i raster più grandi (diciamo, un file IMG o TIFF da 15619x14655 celle di dimensioni 870 MB su disco) impiegano un'eternità a caricarsi in PostGIS. Ho letto e configurato lo strumento raster2pgsql per creare indici spaziali e caricare raster per tessere usando questi parametri:
raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres
Le prestazioni nell'importazione sono ancora molto scarse e l'hardware non è il problema. La visualizzazione dei raster PostGIS in QGIS è ancora peggio, caricando lentamente al meglio piccoli raster o congelando del tutto. Raster di grandi dimensioni come quello che ho citato sono impossibili da visualizzare in QGIS. Dalla documentazione e dalle discussioni del forum, questa mancanza sembra essere dovuta al driver raster PostGIS di GDAL e non allo stesso QGIS. Le discussioni del forum menzionano brevemente questo problema e alcuni suggeriscono addirittura che i raster non debbano essere archiviati in PostGIS (qual è il punto in un database spaziale che non gestisce i raster senza problemi?). Eppure uso regolarmente il geodatabase di file ESRI per archiviare, visualizzare e analizzare raster abbastanza grandi (~ 70 GB) in modo rapido e semplice e ArcGIS 10.1 non si blocca o rallenta mai a causa di tali operazioni di routine.
C'è qualcosa che mi manca qui, un collo di bottiglia che non ho affrontato? PostgreSQL deve essere ottimizzato per realizzare i vantaggi prestazionali di PostGIS? Mi sto perdendo una versione di GDAL che devo cercare e compilare? Come posso migliorare in particolare le prestazioni e la visualizzazione di PostGIS in QGIS di shapefile e raster? Come posso godere della gloria di una gestione dei dati spaziali completa e rapida tramite un terminale Linux? Qualsiasi aiuto su questo problema sarebbe il benvenuto!
Ho seguito questa guida di Duncan Golicher: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/
In origine stavo usando le tessere con un'impostazione automatica, ma ho ripristinato la piastrellatura su 100x100 celle per riga e quindi ho incluso le piramidi come mostrato nella guida in questo modo:
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
Sono stato in grado di importare correttamente il raster IMG da 870 MB in tempo utile e di visualizzarlo in QGIS senza rallentare o arrestare in modo anomalo l'applicazione. Il tempo di rendering non è veloce come mi aspetterei, ma è accettabile. Leggerò ulteriormente sul parametro -l per usarlo correttamente.
Per inciso, nell'importazione del file dem.img come tabella dem100 è stata creata un'altra tabella raster chiamata "o_4_dem100". Quando lo importa come layer in QGIS, ha un intervallo di valori compreso tra 201 e 524, mentre il layer dem100 ha un intervallo compreso tra 36 e 524. Ho ragione nel ritenere che questa tabella aggiuntiva sia la tabella piramidale che ha un campo più stretto intervallo di valori come risultato dell'aggregazione a una risoluzione inferiore?
Non penso che il problema sia l'hardware inadeguato. Ecco un breve riassunto di ciò che ho trovato finora.
Il driver raster PostGIS di GDAL ha avuto problemi di prestazioni precedenti ( vedi anche qui ). Sebbene questi problemi siano stati rilevati nel 2012, mi chiedo se GDAL 1.11.2 trovato in QGIS 2.8 abbia ancora questo problema. Sicuramente ce ne sono altri che utilizzano QGIS e PostGIS per la visualizzazione e l'archiviazione raster?
Su una possibile nota correlata, ho anche avuto problemi di prestazioni con l'apertura delle tabelle degli attributi PostGIS in QGIS con tabelle di ~ 4.7m record . Dopo alcuni suggerimenti in quella discussione e senza risolvere il problema, alla fine ho presentato una segnalazione di bug a QGIS che alla fine è stata chiusa e collegata alla seguente segnalazione di bug simile . Sebbene la segnalazione di bug sia chiusa, non sembra essere stata risolta ...
Per riassumere i miei sforzi finora:
- Ho ottimizzato il server PostgreSQL per i dati spaziali.
- Ho costruito indici spaziali per tabelle di geometria ed eseguito un VUOTO.
- Il comportamento di QGIS per l'apertura di tabelle di attributi di grandi dimensioni (~ 4,7 m di record) sembra provare a leggere tutti i record anziché restituire un sottoinsieme per la visualizzazione istantanea. Questo porta a scarse prestazioni.
Le prestazioni nel rendering di grandi tabelle geometriche PostGIS non sembrano essere un problema.
Con raster2pgsql, i raster sono stati indicizzati, piastrellati e importati come tabelle raster con piramidi in PostGIS.
- I raster di qualsiasi dimensione ragionevole sono ancora incredibilmente lenti da importare in PostGIS, per non parlare dell'apertura e della panoramica in QGIS.
Vale anche la pena notare che quando si importano raster di grandi dimensioni o si aprono tabelle di attributi di grandi dimensioni con PostGIS, il consumo di memoria per raster2pgsql e qgis-bin supera 1 GB. Come hanno menzionato @Michael e @Paul in risposta alla mia domanda iniziale, sembra che PostGIS non sia destinato a portare molti benefici se conservi i raster. Tuttavia, a quel punto mi chiedo perché dovrei eseguire QGIS + PostGIS per le mie esigenze GIS, specialmente quando i file GDB ESRI abilitano attributi raster, set di dati a mosaico e altre operazioni raster facilitate dal geodatabase. Quindi forse o mi manca davvero qualcosa o QGIS e PostGIS non soddisfano le mie esigenze GIS. Trovo difficile credere a quest'ultimo.