Wie veröffentliche ich PostGIS-Raster mit GeoServer?
Ich habe viel Zeit damit verbracht, eine Raster-Datenquelle mit Image Mosaic JDBC zu erstellen, aber ohne Erfolg.
Durchgeführte Schritte:
1. Herunterladen und Installieren der JDBC-Image-Mosaik-Erweiterung (funktioniert einwandfrei)
2. Erstellen der "Verbindungsparameter" -Dateien:
connect.postgis.xml.inc:
<connect>
<dstype value="DBCP"/>
<username value="postgres" />
<password value="password" />
<jdbcUrl value="jdbc:postgresql://localhost:5432/db1" />
<driverClassName value="org.postgresql.Driver"/>
<maxActive value="10"/>
<maxIdle value="0"/>
</connect>
mapping.postgis.xml.inc:
<spatialExtension name="postgis"/>
<mapping>
<masterTable name="mosaic" >
<coverageNameAttribute name="name"/>
<maxXAttribute name="maxX"/>
<maxYAttribute name="maxY"/>
<minXAttribute name="minX"/>
<minYAttribute name="minY"/>
<resXAttribute name="resX"/>
<resYAttribute name="resY"/>
<tileTableNameAtribute name="tiletable" />
</masterTable>
<tileTable>
<blobAttributeName name="rast" />
</tileTable>
</mapping>
osm.postgis.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
<!ENTITY mapping PUBLIC "mapping" "mapping.postgis.xml.inc">
<!ENTITY connect PUBLIC "connect" "connect.postgis.xml.inc">]>
<config version="1.0">
<coverageName name="gfm"/>
<coordsys name="EPSG:25832"/>
<!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic -->
<scaleop interpolation="1"/>
<verify cardinality="false"/>
&mapping;
&connect;
</config>
Dabei ist "Mosaik" eine Tabelle (Spalten: Name, Titeltabelle, minX, minY, maxX, maxY, resX, resY) mit einer Zeile: "gfm, testrastertable,,,,,,,"
3. Die Konfigurationsdateien wurden in gespeichert. ./geoserver/data_dir/coverages/
4. Beim Versuch, einen Image Mosaic JDBC-Datenspeicher hinzuzufügen, wird die folgende Fehlermeldung angezeigt
:
Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
Update: Geoserver Log
2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 locking in mode WRITE
2012-10-24 14:09:11,404 DEBUG [org.geoserver] - Thread 14 got the lock in mode WRITE
2012-10-24 14:09:11,406 DEBUG [geoserver.config] - Persisting coverage store raster_store
2012-10-24 14:09:11,408 DEBUG [geoserver.config] - Persisted org.geoserver.catalog.impl.CoverageStoreInfoImpl to /opt/geoserver/data_dir/workspaces/raster/raster_store/coveragestore.xml
2012-10-24 14:09:11,416 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,438 ERROR [imagemosaic.jdbc] -
2012-10-24 14:09:11,438 WARN [imagemosaic.jdbc] -
java.io.IOException
at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCReader.<init>(ImageMosaicJDBCReader.java:163)
at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCFormat.getReader(ImageMosaicJDBCFormat.java:209)
....
2012-10-24 14:09:11,439 INFO [geoserver.web] - Getting list of coverages for saved store file:coverages/osm.postgis.xml
java.lang.RuntimeException: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:115)
...
Caused by: java.lang.Exception: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
at org.geoserver.catalog.CatalogBuilder.buildCoverage(CatalogBuilder.java:812)
at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:82)
... 95 more
2012-10-24 14:09:11,441 DEBUG [geoserver.config] - Removing coverage store raster_store
2012-10-24 14:09:11,446 DEBUG [geoserver.config] - Persisted $Proxy15 to /opt/geoserver/data_dir/global.xml
2012-10-24 14:09:11,459 DEBUG [org.geoserver] - Thread 14 releasing the lock in mode WRITE
Antworten:
Ich habe mehrere Probleme gelöst, bei denen versucht wurde, ein Postgis-Raster in einem Geoserver ähnlich dem OP zu verwenden. Im Folgenden wird beschrieben, wie ich meine Rasterdaten erfolgreich geladen habe.
Vorkonfiguration: Ein aus FME generierter BNG-Geotiff-Layer wurde mit in Postgis importiert
raster2pgsql
. Der verwendete Befehl war:Dies erzeugte die Rastertabelle zusammen mit ihren Pyramidentabellen.
Derzeit hat mein Server eine Instanz von
Geoserver 2.6.2
. Für die Verwendung von Postgis-Rastern ist die Erweiterung JDBC Image Mosaic erforderlich, die unter http://geoserver.org/release/2.6.2/ heruntergeladen werden kann.Die Erweiterung .jar wurde dann in extrahiert
WEB-INF/lib
. Auf diese Weise kann der Geoserver Raster von Postgis verwenden. Für den Zugriff auf die Daten müssen jedoch mehrere Einstellungen konfiguriert werden.Befolgen Sie die Anweisungen in: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html, aber leicht überarbeitet:
Fügen Sie nun Datensätze für ein "Coverage" mit dem Namen oek in das Beispiel ein. Dies sind Ihre Rastertabellen: die Master-Tabelle und die Pyramiden-Tabelle.
Für Postgis JDBC-Treiber <Version 9 muss laut Dokumentation eine Eigenschaft in der Datenbank festgelegt werden:
Jetzt Geoserver Konfiguration:
Erstellen Sie in Ihrem Geoserver-Datenverzeichnis ein Verzeichnis
/data/coverages
, das 3 Dateien enthalten muss:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml
Folgen Sie http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html für ihre Benennung und Inhalte. Passen Sie die Einstellungen für die Datenbankverbindung und den Benutzernamen / das Kennwort in an
connect.pgraster.xml.inc
mapping.pgraster.xml.inc
Hier müssen wir die Rastertabellen korrekt referenzieren.Damit erhalten Sie die Werte, die wir der MOSAIC-Tabelle hinzugefügt haben. Die
name
Werte sind die Spalten vonMOSAIC
, die mit unserer Rastertabelle und unseren Pyramidentabellen verknüpft sind.rast
ist der Name der Rasterspalte in den Rastertabellen.In
oek.pgraster.xml
Kontrollieren Sie , ob Ihr SRS richtig eingestellt, 27700 BNG in diesem Fall.In Geoserver können wir jetzt einen neuen Datenspeicher hinzufügen.
Gehe zu Neu Neuen Shop hinzufügen.
Wählen Sie ImageMosaicJDBC aus
Geben Sie ihm einen Namen und setzen Sie die URL auf
file:coverages/oek.pgraster.xml
Speichern Sie dies und drücken Sie die Daumen, um Fehler zu vermeiden. Wenn dies der Fall ist, überprüfen Sie die Geoserver-Protokolle, die hoffentlich angeben, um welches Problem es sich handelt, hoffentlich nur um ein Tippfehler- oder Namensproblem.
Fügen Sie einen neuen Layer hinzu und wählen Sie den neuen Raster-Datenspeicher aus.
Wählen Sie Ihre neue Ebene / Deckung mit dem Namen oek aus und veröffentlichen Sie sie.
Passen Sie dann in den Ebeneneinstellungen Ihr Koordinatensystem und die Begrenzungsrahmen entsprechend an.
Befolgen Sie zum Stylen des Rasters die folgenden Dokumente: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html
Ich habe einen Stil hinzugefügt:
Dies färbte meine Raster blau, wo sie einen Wert hatten.
Sie sollten dann eine verwendbare Schicht haben.
Haftungsausschluss: Ich bin kein GIS-Experte, und vieles, was ich durchgearbeitet habe, war Versuch und Irrtum. Ich habe keinen Zweifel, dass es bessere Möglichkeiten gibt, aber im Moment arbeite ich nur an einem Proof-of-Concept, um zu bestätigen, ob wir in der Lage sind, Rasterdaten in Postgis zu verwenden. Feinere Details wie Rasterwerte und Styling sind Dinge, die ich noch ausbügeln muss. Wenn ich weitere Fortschritte mache, werde ich meine Antwort aktualisieren.
quelle
Befolgen Sie die Konfigurationsanweisungen für das PostGIS-Raster-Plugin, und versuchen Sie, es zu ersetzen
mit
in der Konfigurationsdatei
mapping.postgis.xml.inc
.quelle