Vous publiez des rasters PostGIS dans GeoServer?

23

Comment publier des rasters PostGIS à l'aide de GeoServer?

J'ai passé beaucoup de temps à essayer de créer une source de données Raster à l'aide d'Image Mosaic JDBC, mais sans succès.

Étapes effectuées:
1. Téléchargement et installation de l'extension JDBC Image Mosaic (fonctionne correctement)
2. Création des fichiers "Connection Parameter":

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>

où "mosaïque" est un tableau (colonnes: nom, titletable, minX, minY, maxX, maxY, resX, resY) contenant une ligne: "gfm, testrastertable,,,,,,,"

3. Enregistrez les fichiers de configuration dans. ./geoserver/data_dir/coverages/
4. En essayant d'ajouter un magasin de données JDBC Image Mosaic, je reçois l'erreur suivante:

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



Mise à jour: journal 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
aspic
la source
tournez la journalisation pour verbeux et vérifiez le fichier journal
Ian Turton
vient d'être mis à jour avec le journal ... ne m'en dit pas trop
asp
Comme personne ici ne semble pouvoir vous aider, vous pouvez essayer la liste de diffusion GeoServer: geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan
Une mise à jour sur cette question?
Pablo
1
Aucune mise à jour ... J'ai dû abandonner l'idée de créer une mosaïque d'images JDBC parce que je ne pouvais tout simplement pas la créer dans Geoserver. J'utilise maintenant le magasin ImagePyramid et les fichiers sont conservés sur le disque.
asp

Réponses:

7

J'ai travaillé sur plusieurs problèmes en essayant d'utiliser un raster postgis dans un géoserveur similaire à l'OP. Voici comment j'ai réussi à charger mes données raster.

Préconfiguration: une couche géotiff BNG, générée à partir de FME, a été importée dans Postgis à l'aide de raster2pgsql. La commande utilisée était:

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

Cela a créé la table raster avec ses tables pyramidales.

Actuellement, mon serveur a une instance de Geoserver 2.6.2. Pour utiliser les rasters Postgis, il faut l'extension JDBC Image Mosaic qui peut être téléchargée depuis http://geoserver.org/release/2.6.2/

L'extension .jar a ensuite été extraite dans WEB-INF/lib. Cela permettra ensuite au géoserveur d'utiliser les rasters de postgis. Cependant, pour accéder aux données, plusieurs paramètres doivent être configurés.

En suivant les instructions de: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html mais légèrement modifié:

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

Insérez maintenant des enregistrements pour une "couverture", nommée oek dans l'exemple, ce sont vos tables raster: celle principale et celles pyramidales.

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

Toujours selon la documentation, pour les pilotes JDBC Postgis <version 9, il est nécessaire de définir une propriété dans la base de données:

ALTER DATABASE dbname SET bytea_output TO 'escape'

Maintenant configuration Geoserver:

Dans votre répertoire de données Geoserver, créez un répertoire /data/coverages, celui-ci doit contenir 3 fichiers:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

Suivez http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html pour leur dénomination et leur contenu. Ajustez évidemment la chaîne de connexion à la base de données et les paramètres de nom d'utilisateur / mot de passe dansconnect.pgraster.xml.inc

mapping.pgraster.xml.inc est l'endroit où nous devons référencer correctement les tables 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>

Donc, cela obtiendra les valeurs que nous avons ajoutées à la table MOSAIC, les namevaleurs sont les colonnes de MOSAIC, qui sont liées à notre table raster et nos tables pyramidales. rastest le nom de la colonne raster dans les tables raster.

En oek.pgraster.xmlvous assurer que votre SRS est réglé correctement, 27700 BNG dans ce cas.

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

Dans Geoserver, nous pouvons maintenant ajouter une nouvelle banque de données.

Accédez à nouveau Ajouter un nouveau magasin.

Sélectionnez ImageMosaicJDBC

Donnez-lui un nom et définissez l'URL file:coverages/oek.pgraster.xml

Enregistrez ceci et les doigts croisés, aucune erreur n'est renvoyée. Si tel est le cas, vérifiez les journaux des géoserveurs qui, espérons-le, indiqueront le problème, espérons simplement une faute de frappe ou de dénomination.

Allez ajouter une nouvelle couche et sélectionnez le nouveau magasin de données raster.

Sélectionnez votre nouvelle couche / couverture nommée oek et publiez-la.

Ensuite, dans les paramètres de calque, ajustez votre système de coordonnées et les cadres de sélection de manière appropriée.

Pour styliser le raster, suivez les documents ici: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

J'ai ajouté un style:

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

Cela a coloré mes rasters en bleu là où ils avaient une valeur.

Vous devriez alors avoir une couche utilisable.

Avis de non-responsabilité: je ne suis pas un expert en SIG, et une grande partie de ce que j'ai travaillé a été des essais et des erreurs. Je ne doute pas qu'il existe de meilleures façons de le faire, mais pour l'instant je ne travaille que sur une preuve de concept pour confirmer si nous avons la capacité d'utiliser des données raster dans postgis. Des détails plus fins comme les valeurs de trame et le style sont des choses que je dois encore régler. Si je fais d'autres progrès, je mettrai à jour ma réponse.

Tedd
la source
2

En suivant les instructions de configuration du plugin raster PostGIS, vous devez essayer de remplacer

<spatialExtension name="postgis"/>

avec

<spatialExtension name="pgraster"/>

dans le fichier de migration mapping.postgis.xml.inc.

xandriksson
la source