Meine Frage betrifft die Verwendung und Leistung mehrerer Software-Tools in Verbindung, nämlich PostgreSQL, PostGIS, QGIS und GDAL.
Ich bin ein langjähriger ArcGIS-, Python- und R-Benutzer, der sich für das kostenlose Open-Source-GIS-Ökosystem und Linux interessiert. Vor kurzem war ich sehr daran interessiert, QGIS (Version 2.8) zusammen mit PostgreSQL (Version 9.4) und PostGIS (Version 2.1) zu verwenden, und ich habe die Software auf einem Computer mit Windows 8.1 x64 installiert (die Computerspezifikationen in Kürze: ThinkPad) X200s mit einem 2,1 GHz Core 2, 8 GB RAM und einer 240 GB SSD). Sobald ich gelernt habe, wie ich meine räumlichen Daten (im Wert von ca. 100 GB) verwalte, möchte ich Ubuntu auf diesem Computer ausführen.
Im Moment versuche ich einfach, Shapefiles und Raster zuverlässig zu speichern und abzurufen. Bisher konnte ich Shapefiles erfolgreich in PostGIS laden, aber Raster erweisen sich als problematischer. Ich habe Einzel- und Stapelimporte kleiner geoTIFF- und GRID-Dateien erfolgreich abgeschlossen, aber das Laden größerer Raster (z. B. einer IMG- oder TIFF-Datei mit 15619 x 14655 Zellen und einer Größe von 870 MB auf der Festplatte) in PostGIS dauert ewig. Ich habe das Tool raster2pgsql gelesen und konfiguriert, um räumliche Indizes zu erstellen und Raster mithilfe der folgenden Parameter nach Kacheln zu laden:
raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres
Die Leistung beim Importieren ist immer noch sehr schlecht, und die Hardware ist nicht das Problem. Die Visualisierung von PostGIS-Rastern in QGIS ist noch schlechter, da kleine Raster bestenfalls langsam geladen werden oder ganz einfrieren. Große Raster wie das erwähnte können in QGIS nicht dargestellt werden. Aus der Dokumentation und den Forumsdiskussionen geht hervor, dass dieses Manko auf den PostGIS-Rastertreiber von GDAL und nicht auf QGIS selbst zurückzuführen ist. Forumsdiskussionen erwähnen dieses Problem kurz und einige schlagen sogar vor, dass Raster nicht in PostGIS gespeichert werden sollten (wozu dient eine räumliche Datenbank, die Raster nicht reibungslos verarbeitet?). Ich verwende jedoch routinemäßig die File-Geodatabase von ESRI, um recht große (~ 70 GB) Raster schnell und einfach zu speichern, zu visualisieren und zu analysieren, und ArcGIS 10.1 friert aufgrund solcher Routinevorgänge niemals ein oder verlangsamt sich.
Fehlt hier etwas, ein Engpass, den ich nicht angesprochen habe? Muss PostgreSQL optimiert werden, um die Leistungsvorteile von PostGIS zu nutzen? Vermisse ich eine Version von GDAL, die ich suchen und kompilieren muss? Wie kann ich die Leistung und Visualisierung von Shapefiles und Rastern in PostGIS verbessern? Wie kann ich die Pracht eines umfassenden und schnellen Geodatenmanagements über ein Linux-Terminal genießen? Jede Hilfe zu diesem Thema wäre willkommen!
Ich folgte dieser Anleitung von einem Duncan Golicher: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/
Ich habe ursprünglich Kacheln mit einer automatischen Einstellung verwendet, die Kacheln jedoch auf 100 x 100 Zellen pro Zeile zurückgesetzt und dann die Pyramiden wie folgt in die Anleitung aufgenommen:
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
Ich konnte das 870-MB-IMG-Raster rechtzeitig erfolgreich importieren und in QGIS anzeigen, ohne die Anwendung zu verlangsamen oder zum Absturz zu bringen. Die Renderzeit ist nicht so schnell wie erwartet, aber akzeptabel. Ich werde den Parameter -l weiter lesen, um ihn richtig zu verwenden.
Beim Importieren der dem.img-Datei als dem100-Tabelle wurde übrigens eine weitere Rastertabelle mit dem Namen "o_4_dem100" erstellt. Wenn ich es als Layer in QGIS importiere, hat es einen Wertebereich zwischen 201 und 524, während der dem100-Layer einen Bereich von 36 bis 524 hat. Bin ich richtig davon ausgegangen, dass diese zusätzliche Tabelle die Pyramidentabelle ist, die schmaler ist Wertebereich durch Aggregation auf eine niedrigere Auflösung?
Ich denke nicht, dass unzureichende Hardware das Problem ist. Hier ist eine kurze Zusammenfassung dessen, was ich bisher gefunden habe.
Der PostGIS-Rastertreiber von GDAL hatte in der Vergangenheit Leistungsprobleme ( siehe auch hier ). Obwohl diese Probleme im Jahr 2012 festgestellt wurden, frage ich mich, ob GDAL 1.11.2 in QGIS 2.8 immer noch dieses Problem hat. Sicherlich gibt es andere, die QGIS und PostGIS für die Raster-Visualisierung und Speicherung verwenden?
In Bezug auf einen möglichen Hinweis hatte ich auch Leistungsprobleme beim Öffnen von PostGIS-Attributtabellen in QGIS mit Tabellen von ~ 4,7 Mio. Datensätzen . Nach ein paar Vorschlägen in diesem Thread und ohne das Problem zu beheben, reichte ich schließlich einen Fehlerbericht bei QGIS ein , der schließlich geschlossen und mit dem folgenden ähnlichen Fehlerbericht verknüpft wurde . Obwohl der Fehlerbericht geschlossen ist, scheint er nicht behoben zu sein ...
Um meine bisherigen Bemühungen zusammenzufassen:
- Ich habe den PostgreSQL-Server für räumliche Daten optimiert.
- Ich habe räumliche Indizes für Geometrietabellen erstellt und ein VACUUM durchgeführt.
- Das QGIS-Verhalten beim Öffnen großer Attributtabellen (ca. 4,7 Millionen Datensätze) scheint zu versuchen, alle Datensätze zu lesen , anstatt eine Teilmenge zur sofortigen Anzeige zurückzugeben. Dies führt zu einer schlechten Leistung.
Die Leistung beim Rendern großer PostGIS-Geometrietabellen scheint kein Problem zu sein.
Mit raster2pgsql wurden Raster indiziert, gekachelt und in PostGIS als Rastertabellen mit Pyramiden importiert.
- Raster jeder vernünftigen Größe lassen sich immer noch unglaublich langsam in PostGIS importieren, geschweige denn in QGIS öffnen und verschieben.
Beachten Sie auch, dass beim Importieren großer Raster oder beim Öffnen großer Attributtabellen mit PostGIS der Speicherverbrauch für raster2pgsql und qgis-bin über 1 GB liegt. Wie @Michael und @Paul als Antwort auf meine erste Frage erwähnt haben, scheint es, dass PostGIS keine großen Vorteile für das Speichern von Rastern bringen soll. An diesem Punkt frage ich mich jedoch, warum ich QGIS + PostGIS überhaupt für meine GIS-Anforderungen ausführen würde, insbesondere wenn ESRI-FileGDBs Rasterattribute, Mosaik-Datasets und andere von der Geodatabase unterstützte Rasteroperationen aktivieren. Vielleicht fehlt mir also wirklich etwas, oder QGIS und PostGIS entsprechen nicht meinen GIS-Anforderungen. Letzteres fällt mir schwer zu glauben.