Schlechte Leistung beim Speichern großer Raster in PostGIS und beim Visualisieren in QGIS


23

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.


Hat das Rastern hat in PostGIS sein? Welche Vorteile / Zusatzfunktionen erhoffen Sie sich davon? Ich fand, dass der PostGis-Vektor akzeptabel war und Mehrbenutzerbearbeitung bot, aber das PostGis-Raster hatte keine wirklichen Vorteile gegenüber dem dateibasierten (servergespeicherten) Raster. Gute Frage; Es ist gut möglich, dass ich einige Vorteile in meiner Bewertung verpasst habe ...
Michael Stimson

Ich dachte, dass PostGIS-Raster schnellere Rasterberechnungen sowie eine bessere Leistung bei Raster- / Vektoroperationen ermöglichen. Dies kommt zu den Vorteilen einer räumlichen Datenbank hinzu: Zuverlässigkeit, Zugänglichkeit, Backup-Möglichkeiten, kompakterer Speicher usw. In jedem Fall lassen sich mit einem Datei / Kachel-Ansatz keine Suchfunktionen, vorgefertigten Pyramiden, Kacheln und andere Funktionen, die die Verwendung und Visualisierung des Rasters verbessern.
mbcaradima

Ich habe keine Metrik gesehen, die besagt, dass PostGIS-Raster bei Raster-Berechnungen schneller sind. In beiden Fällen werden Sie mit einer 240-GB-SSD (gute Wahl, schneller als RAID zu einem Bruchteil der Kosten / des Aufwands) das sehr schnell mit den Rastern füllen ... ECW / JP2 für 8bit oder GeoTIFF mit LZW / Deflate-Komprimierung aktiviert die meisten dieser Kontrollkästchen, vorgefertigten Pyramiden, Kacheln (über VRT), Backup als Dateien usw. ... Der einzige Vorteil ist die Suchfunktion. Ich stelle fest, dass ich ein wenig vom Thema abweiche, aber wenn das PostGIS-Raster nicht das tut, was Sie erwarten, warum dann nicht bei der Anzeige des Dateirasters bleiben?
Michael Stimson

3
Wer hat jemals gesagt, dass PostGIS-Raster schneller sind als alles andere? Sie können bequemer sein (handliche SQL-Zugriffs-API) und für die Analyse nützlich sein (Raster und Vektor im selben Bucket), aber schneller ? Noch nie.
Paul Ramsey

1
Ich arbeite an einem Buch über PostGIS (PostGIS in Aktion, 2. Ausgabe) und es schien selbstverständlich, dass sich die Vorteile des Speicherns von Shapefiles in einer räumlichen Datenbank auch auf ein Raster erstrecken würden. Natürlich kann ich aufgrund ihrer unterschiedlichen Datenmodelle sehen, dass diese Annahme rein intuitiv war. Raster werden jedoch häufig in Geodatabases mit ArcGIS gespeichert und ermöglichen das Erstellen von Pyramiden, eine schnellere Geoverarbeitung und das Erstellen von Mosaiken. Wie soll ein GIS-Benutzer in einem Workflow mit Open Source-Software dann mit Rastern arbeiten? Übrigens, ich werde mich gebührend ins Gesicht schlagen.
Mbcaradima

Antworten:


9

Wenn Sie in QGIS große Raster anzeigen möchten, müssen Sie Pyramiden erstellen, entweder für ein TIF-Bild im Dateisystem oder für ein in Postgis registriertes Bild.

Der Leistungsunterschied beim QGIS-Rendering zwischen einem großen Raster im Dateisystem oder in Postgis ist gering. Benutzer werden den Unterschied nicht bemerken. Aber - genau dann, wenn - Sie die Pyramiden mit der Option bauen -l.

Wenn Sie das Bild einfach ohne die Option -l oder nur mit importieren, -l 4 funktioniert es nicht .

Wenn Sie beispielsweise -l 2,4,8,16vier Pyramidenebenen verwenden, werden diese wie in der folgenden Ebene erstellt:

Pyramiden erzeugt mit -l 2,4,8,16

Wenn Sie eine bessere Benutzererfahrung erzielen möchten, sollten Sie mehr Pyramidenebenen wie hinzufügen -l 2,4,8,16,32,64,128,256. Dadurch entstehen acht Pyramidenebenen.

Bildbeschreibung hier eingeben

Zusammenfassend lautet die Antwort auf diese Frage: Importieren Sie das Raster mit der Option -lund verwenden Sie die gleiche Anzahl von Pyramidenebenen, die Sie für dasselbe Raster im Dateisystem verwenden.

Beispielsweise:

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

Ich habe genau die gleichen Probleme beim Rendern von Rastern in QGIS aus PostGIS (siehe meine aktuelle Frage ). Ich fand diesen Beitrag hilfreich und erhöhte das folgende verbesserte Raster-Rendering geringfügig:

shared_buffers = 5000 MB work_mem = 100 MB maintenance_work_mem = 100 MB

Dennoch stimme ich voll und ganz zu, dass die Leistung von PostGIS-Rastern in QGIS nicht großartig ist. Ich habe es mit 608 komprimierten Geotiffs zu tun, die sich hervorragend als VRT laden lassen, aber in PostGIS im Wesentlichen unbrauchbar sind. Versuchen Sie, die Leistung des Datenbankservers zu steigern, aber darüber hinaus kann ich nicht allzu hilfreich sein. Möglicherweise muss auch ich mich auf das Dateisystem verlassen, um Raster in meiner Organisation bereitzustellen.


Danke für deinen Kommentar, Cliff. Ich habe einige Ihrer Änderungen übernommen und werde über wesentliche Leistungsverbesserungen berichten. Insgesamt muss ich sagen, dass die QGIS-Leistung für die Visualisierung von PostGIS-Rastern und das Laden / Abfragen von Attributtabellen enttäuschend ist. Enttäuschend ist auch die Rasterleistung in PostGIS. Ich habe keines dieser Probleme mit File-Geodatabases. Ich frage mich also, was nicht stimmt.
Mbcaradima

1
Meine Gefühle genau. Ich habe die Woche damit verbracht, dies in Gang zu bringen, und konnte es einfach nicht zum Laufen bringen. Ich teste jetzt meine VM (Ubuntu Server) mit 10 Prozessoren und 10 GB RAM. Wenn das noch träge ist, muss ich etwas anderes falsch machen. Ich bin auch verblüfft, warum WMS-Ebenen in QGIS aufgrund ihrer langsamen Rendergeschwindigkeit im Grunde unbrauchbar sind. Wir sollten hier mehr miteinander verbinden, da wir beide im selben Boot sitzen.
Cliff

Wenn sie als VRT großartig geladen sind, warum hast du dann nicht dort angehalten? Welchen Gewinn erwarten Sie von dieser großartigen Rasterreise?
Paul Ramsey

Ich denke, meine Antwort darauf, Paul, ist genau das, was OP im nächsten Beitrag gesagt hat: "Zu diesem Zeitpunkt frage ich mich jedoch, warum ich überhaupt QGIS + PostGIS für meine GIS-Anforderungen ausführen würde, insbesondere wenn ESRI-FileGDBs Rasterattribute und Mosaik-Datasets aktivieren und andere Rasteroperationen, die durch die Geodatabase erleichtert werden. Vielleicht fehlt also entweder wirklich etwas, oder QGIS und PostGIS entsprechen nicht meinen GIS-Anforderungen. Ich finde letzteres schwer zu glauben. "
Cliff

1
Darüber hinaus würde ich sagen, dass sich etwa 70% der von mir durchgeführten Analysen auf Raster beziehen und ungefähr 40% der Daten, die ich meiner Organisation über QGIS zur Verfügung stellen möchte, Rasterdaten sind. Es ist nur sinnvoll, alle Raster- und Vektordaten in einer Datenbank zu haben, damit Benutzer eine Verbindung herstellen und auf die Datenbank unserer gesamten Organisation zugreifen können. Stattdessen müsste ich creds für die Datenbank und creds für die Dateifreigabe erstellen. Alternativ denke ich ernsthaft darüber nach, QGIS zu verschrotten und eine Webanwendung mit Geoserver zu erstellen (ps: Ich bin immer bereit, mit allen Interessierten daran zusammenzuarbeiten).
Cliff

4

Ich bin nicht sicher, ob es Ihr Fall war, aber ich habe herausgefunden, -Idass es nicht zusammen mit angehängten Daten verwendet werden sollte -a.

Ich habe viele TIF-Dateien in eine Datenbank importiert und -Itatsächlich den Index neu erstellt und analysedie Tabelle für jede Datei überprüft, was 10x mehr Zeit in Anspruch nimmt.

-Isollte nur beim Erstellen der Tabelle mit -pOption verwendet werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.