Veröffentlichen von PostGIS-Rastern in GeoServer?

23

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
asp
quelle
Melden Sie sich ausführlich an und überprüfen Sie die Protokolldatei
Ian Turton
gerade mit dem Protokoll aktualisiert ... sagt mir nicht zu viel
asp
Da hier niemand helfen kann, können Sie die GeoServer-Mailingliste ausprobieren: geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan
Irgendwelche Updates zu dieser Frage?
Pablo
1
Keine Updates ... Ich musste auf die Idee verzichten, ein JDBC-Image-Mosaik zu erstellen, da ich es in Geoserver einfach nicht erstellen konnte. Ich verwende jetzt den ImagePyramid-Speicher und die Dateien werden auf der Festplatte gespeichert.
Asp

Antworten:

7

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:

raster2pgsql -s 27700 -I -M -C {geotiffName}.tif -t 100x100 -l 2,4,6 {schema}.{tableName} | psql -U {user} -d {database}

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:

create table {schema}.MOSAIC (NAME varchar(254) not null,
     TileTable varchar(254)not null,
     minX FLOAT8,minY FLOAT8, maxX FLOAT8, maxY FLOAT8,resX FLOAT8, resY FLOAT8, primary key (NAME,TileTable))

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.

insert into {schema}.MOSAIC (name, tiletable) values ('oek', {Main raster table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 2 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 4 table name});
insert into {schema}.MOSAIC (name, tiletable) values ('oek', {raster pyramid 6 table name});

Für Postgis JDBC-Treiber <Version 9 muss laut Dokumentation eine Eigenschaft in der Datenbank festgelegt werden:

ALTER DATABASE dbname SET bytea_output TO 'escape'

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 anconnect.pgraster.xml.inc

mapping.pgraster.xml.inc Hier müssen wir die Rastertabellen korrekt referenzieren.

<spatialExtension name="pgraster"/>
 <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>

Damit erhalten Sie die Werte, die wir der MOSAIC-Tabelle hinzugefügt haben. Die nameWerte sind die Spalten von MOSAIC, die mit unserer Rastertabelle und unseren Pyramidentabellen verknüpft sind. rastist der Name der Rasterspalte in den Rastertabellen.

In oek.pgraster.xmlKontrollieren Sie , ob Ihr SRS richtig eingestellt, 27700 BNG in diesem Fall.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ImageMosaicJDBCConfig [
  <!ENTITY mapping PUBLIC "mapping"  "mapping.pgraster.xml.inc">
  <!ENTITY connect PUBLIC "connect"  "connect.pgraster.xml.inc">
]>

<config version="1.0">
  <coverageName name="oek"/>
  <coordsys name="EPSG:27700"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bipolar, 3 = bicubic -->
  <scaleop  interpolation="1"/>
<axisOrder ignore="false"/>
  &mapping;
  &connect;
</config

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:

<RasterSymbolizer>
 <Opacity>1.0</Opacity>
  <ColorMap>
   <ColorMapEntry color="#ffffff" quantity="1" label="label1" opacity="1"/>
   <ColorMapEntry color="#0000ff" quantity="200" label="label2" opacity="1"/>
  </ColorMap>
</RasterSymbolizer>

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.

Tedd
quelle
2

Befolgen Sie die Konfigurationsanweisungen für das PostGIS-Raster-Plugin, und versuchen Sie, es zu ersetzen

<spatialExtension name="postgis"/>

mit

<spatialExtension name="pgraster"/>

in der Konfigurationsdatei mapping.postgis.xml.inc.

xandriksson
quelle