Pubblicazione dei raster PostGIS in GeoServer?


23

Come posso pubblicare i raster PostGIS usando GeoServer?

Ho trascorso molto tempo a cercare di creare un'origine dati Raster utilizzando Image Mosaic JDBC, ma senza fortuna.

Passaggi eseguiti:
1. Download e installazione dell'estensione JDBC Image Mosaic (funzionata correttamente)
2. Creazione dei file "Parametro di connessione":

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>

dove "mosaic" è una tabella (colonne: nome, titolabile, minX, minY, maxX, maxY, resX, resY) contenente una riga: "gfm, testrastertable,,,,,,",

3. Salva i file di configurazione in. ./geoserver/data_dir/coverages/
4. Durante il tentativo di aggiungere un archivio dati JDBC di Image Mosaic ricevo il seguente errore:

Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC



Aggiornamento: registro geoserver

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

trasforma la registrazione in verbose e controlla il file di registro
Ian Turton

appena aggiornato con il registro ... non mi dice troppo
asp

Dato che nessuno qui sembra in grado di aiutarti, puoi provare la mailing list di GeoServer: geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan

Qualche aggiornamento su questa domanda?
Pablo

1
Nessun aggiornamento ... Ho dovuto abbandonare l'idea di creare un mosaico di immagini JDBC perché non riuscivo a crearlo in Geoserver. Sto usando ora l'archivio ImagePyramid e i file sono conservati sul disco.
asp

Risposte:


7

Ho risolto diversi problemi cercando di utilizzare un postgis raster in geoserver simile all'OP. Di seguito è riportato il modo in cui ho caricato correttamente i miei dati raster.

Preconfigurazione: uno strato geotiff di GNL, generato da FME, è stato importato in Postgis usando raster2pgsql. Il comando utilizzato era:

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

Questo ha creato la tabella raster insieme alle sue tabelle piramidali.

Attualmente il mio server ha un'istanza di Geoserver 2.6.2. Per utilizzare i raster Postgis è necessaria l'estensione JDBC Image Mosaic che può essere scaricata da http://geoserver.org/release/2.6.2/

L'estensione .jar è stata quindi estratta in WEB-INF/lib. Ciò consentirà quindi al geoserver di utilizzare i raster di Postgis. Tuttavia, per accedere ai dati è necessario configurare diverse impostazioni.

Seguendo le istruzioni in: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html ma leggermente ottimizzato:

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))

Ora inserisci i record per una "copertura", chiamata oek ​​nell'esempio, queste sono le tue tabelle raster: quella principale e quella piramidale.

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});

Sempre secondo i documenti, per i driver Postgis JDBC <versione 9 è necessario impostare una proprietà nel database:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Ora configurazione Geoserver:

Nella directory dei dati del Geoserver creare una directory /data/coverages, questa deve contenere 3 file:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Segui http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html per i loro nomi e contenuti. Ovviamente regola la stringa di connessione al database e le impostazioni nome utente / password inconnect.pgraster.xml.inc

mapping.pgraster.xml.inc è dove dobbiamo fare correttamente riferimento alle tabelle raster.

<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>

Quindi questo otterrà i valori che abbiamo aggiunto alla tabella MOSAIC, i namevalori sono le colonne di MOSAIC, che si collegano alla nostra tabella raster e alle tabelle piramidali. rastè il nome della colonna raster nelle tabelle raster.

In oek.pgraster.xmlAssicurati che il tuo SRS è impostato correttamente, 27700 BNG in questo caso.

<?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 ora possiamo aggiungere un nuovo archivio dati.

Vai a nuovo Aggiungi nuovo negozio.

Seleziona ImageMosaicJDBC

Dagli un nome e imposta l'URL su file:coverages/oek.pgraster.xml

Salvalo e le dita incrociate non restituiscono errori. Se lo sono, controlla i log del geoserver che, si spera, indicheranno quale fosse il problema, si spera solo un errore di battitura o di denominazione.

Vai per aggiungere un nuovo livello e selezionare il nuovo archivio dati raster.

Seleziona il tuo nuovo livello / copertura chiamato oek e pubblicalo.

Quindi, nelle impostazioni del livello, regola il sistema di coordinate e le caselle di delimitazione in modo appropriato.

Per dare uno stile al raster segui i documenti qui: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

Ho aggiunto uno stile:

<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>

Questo ha colorato i miei raster blu dove avevano un valore.

Dovresti quindi avere un livello utilizzabile.

Dichiarazione di non responsabilità: non sono un esperto GIS e molto di quello che ho lavorato è stato tentativi ed errori. Non ho dubbi sul fatto che ci siano modi migliori per farlo, ma per il momento sto solo lavorando su una prova di concetto per confermare se abbiamo la capacità di utilizzare i dati raster in PostGis. Dettagli più fini come i valori raster e lo stile sono cose che devo ancora appianare. Se faccio ulteriori progressi, aggiornerò la mia risposta.


2

Seguendo le istruzioni di configurazione per il plugin raster PostGIS, dovresti provare a sostituirlo

<spatialExtension name="postgis"/>

con

<spatialExtension name="pgraster"/>

nel file di configrazione mapping.postgis.xml.inc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.