Optionen zum Anzeigen von PostGIS-Rastern in OpenLayers

12

Diese Frage ähnelt einer früheren Frage zum Anzeigen von Vektordaten in einer Webkarte. Ich möchte eine grundlegende Weboberfläche haben, die OpenLayers verwendet und Rasterdaten anzeigen kann, die sich derzeit in PostGIS befinden, und zwar mithilfe einer Grundkarte wie Google. Ich habe PostGIS2.0 mit der Rasterbibliothek installiert und sehe aus der Dokumentation, dass es mehrere Optionen zum Ausgeben von Daten gibt, wie z. B. JPEG, GeoTIFF und PNG. Ist es ein empfohlenes Format?

Zum Anzeigen von Vektordaten verwende ich derzeit Javascript, um Koordinaten vom Browser des Benutzers an meinen Server zu senden und dann eine Abfrage mit PHP / SQL unter PostGIS durchzuführen. Die Ergebnisse werden dann als GeoJSON zurückgegeben, das der Grundkarte überlagert werden kann. Ich habe mich gefragt, ob ein ähnlicher Ansatz mit Rastern angewendet werden könnte, aber ich weiß nicht, welches Rasterformat am besten ist oder ob es andere Einschränkungen gibt, die ich berücksichtigen sollte.

Ich habe viele Verweise auf GeoServer gesehen, bin mir aber nicht sicher, ob dies für dieses Projekt erforderlich ist (ich bin mir nicht ganz sicher, wann GeoServer verwendet werden soll oder nicht).

djq
quelle

Antworten:

13

Raster sind Bilder , daher ist das beste Format ein Bildformat (png / jpg / etc). Geojson ist ein gutes Format für Vektoren . Sie werden beispielsweise nie sehen, dass Ihr Facebook-Profilbild als reiner Json zurücktransportiert wird. Natürlich ist das Zurückgeben einer URL zu einem Bild als json sehr, sehr unterschiedlich :)

Was die Diskussion zwischen JPEG und PNG und anderen Bildformaten betrifft, gibt es unzählige unterschiedliche Meinungen dazu . Es läuft darauf hinaus, dass einige Bildformate verlustfrei sind, während andere verlustbehaftet sind . Ihre Entscheidung hängt davon ab, was Sie mit den Daten tun werden. Für die Analyse tolerieren Sie wahrscheinlich keine Verluste, aber für die Anzeige von Dingen im Web würden Sie dies tun.

Kann PostGIS 2.0 Bilder generieren? Sicher. Schauen Sie sich den Abschnitt Rasterausgabe an .

Ist das eine gute Idee? Es hängt wirklich wirklich davon ab, was Sie tun. Manchmal kann das Generieren von Bildern sehr, sehr lange dauern, und Sie möchten sie zwischenspeichern, um zu vermeiden, dass Sie den Preis für das Generieren jedes Mal zahlen, wenn Sie sie über eine Webumgebung anfordern. Das einzige "Caching", das Sie auf der PostGIS-Seite durchführen können, besteht darin, die Ergebnisse in einer anderen Tabelle zu speichern und die Tabelle stattdessen abzufragen, wenn Sie sie benötigen. Geoserver verfügt dazu über eine komplette Infrastruktur ( GeoWebCache ).

Haben Sie brauchen GeoServer, wahrscheinlich nicht - aber es macht das Leben viel einfacher , wenn Sie diese Middleware, die alle Ihre Daten mit aussetzt OGC Web Services , tut Caching , Styling von Vektoren und Rastern eine ganze Reihe mehr Dinge .

Ragi Yaser Burhum
quelle
Ich verstehe, wie man ein Bild mit PostGIS generiert - ich versuche zu verstehen, wie man es am besten in Openlayers lädt. Wenn ich beispielsweise ST_AsPNG () verwende, muss ich immer noch die oberen und unteren Koordinaten identifizieren, an denen dieses Bild positioniert ist. Ich dachte, es könnte eine gute Möglichkeit geben, ein in sich geschlossenes Bild zurückzugeben, das ich direkt in OpenLayer laden könnte (abgesehen von der Verwendung eines Geoservers).
DJQ
Ja, Sie können es von st_aspng direkt in OpenLayer laden, aber es erfordert zusätzliche Arbeit. Sie müssen dann die bbox im Auge behalten und sie beim Laden angeben dev.openlayers.org/apidocs/files/OpenLayers/Layer/Image-js.html Vertrauen Sie mir, es ist der lange Weg. Sie sollten Geoserver oder Mapserver dies besser tun lassen. Sie geben Ihnen WMS / WMTS zurück und Sie verwenden zwei Codezeilen, um es Openlayern hinzuzufügen.
Ragi Yaser Burhum
4

Mapserver unterstützt Postgis-Raster und Anweisungen für eine Grundeinstellung finden Sie hier (Punkt 9.9).

In Ihrem Fall würden Sie Mapserver so einrichten, dass er als WMS-Server funktioniert, sodass die Postgis-Raster als normale WMS-Ebenen zurückgegeben werden. Es ist dann fast trivial, die Ebenen mithilfe eines WMS- Ebenenobjekts zu Ihrer OpenLayers-Karte hinzuzufügen .

Diese Art von Lösung ist wahrscheinlich die beste Option, da alles auf OpenSource-Software basiert, ein bewährter Stack ist und keine umfangreiche Middleware erfordert. Alles, was Mapserver benötigt, ist ein Webserver (der Apache, den Sie wahrscheinlich bereits für PHP verwenden, ist in Ordnung), der CGI-Skripte ausführen kann. Wenn die Leistung kein kritisches Problem darstellt, können Sie die Verwendung eines (Kachel-) Caches vermeiden und Mapserver die Layer jedes Mal im laufenden Betrieb rendern lassen.

Wenn Sie die Kacheln zwischenspeichern möchten, um die Serverlast zu minimieren und die Antwortzeiten zu verbessern, sollten Sie Mapcache oder Tilecache verwenden . Mapcache ist ein jüngeres Schwesterprojekt von Mapserver, sollte jedoch alle anderen Caches übertreffen, da es als Apache-Modul ausgeführt wird.

Für Ubuntu-Benutzer ist es am einfachsten, die Abhängigkeiten von Mapserver zu installieren, indem Sie Ihrem System die Ubuntu GIS PPA hinzufügen .

Unicoletti
quelle
Mapserver ist definitiv eine großartige Alternative von GeoServer (ich verwende es für einige andere Projekte). Im Allgemeinen wähle ich Geoserver für meine Kunden aus, da er eine benutzerfreundliche Oberfläche hat. Trotzdem wollte ich darauf hinweisen, dass das Bereitstellen von Kachel-Caches statischen Inhalt bereitstellt und jede auf Nginx (oder einem anderen nicht blockierenden Server) basierende Lösung weitaus schneller ist als jede Apache-Lösung - entweder im prozessbasierten Isolations- oder im Thread-Modus.
Ragi Yaser Burhum
Danke @unicoletti. Kann ich Mapserver verwenden, wenn ich Raster basierend auf der Benutzerabfrage generieren möchte? Wenn ich Benutzern beispielsweise erlaube, einen Bereich (innerhalb einer bestimmten Grenze) anzugeben, kann ich dann eine räumliche Abfrage dieses Bereichs durchführen?
DJQ
Mit @celenius Mapserver und GeoServer können Sie dies beide tun.
Ragi Yaser Burhum
1
@RagiYaserBurhum Ich vergleiche Mapcache mit anderen Caches. Statische Kacheln sind streng genommen kein Cache.
Unicoletti
0

Es hängt alles ab. Bildgröße, Caching, verfügbare Bibliotheken (einige proprietäre JP2K-Treiber zum Beispiel).

Hier ist ein Link zu einem fantastischen PDF , Geoserver über Steroide. Dies führt Sie durch die verschiedenen Formate, ihre Vor- und Nachteile und einige grundlegende Einstellungen.

Jay Laura
quelle