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
Réponses:
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: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é:
Insérez maintenant des enregistrements pour une "couverture", nommée oek dans l'exemple, ce sont vos tables raster: celle principale et celles pyramidales.
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:
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 dans
connect.pgraster.xml.inc
mapping.pgraster.xml.inc
est l'endroit où nous devons référencer correctement les tables raster.Donc, cela obtiendra les valeurs que nous avons ajoutées à la table MOSAIC, les
name
valeurs sont les colonnes deMOSAIC
, qui sont liées à notre table raster et nos tables pyramidales.rast
est le nom de la colonne raster dans les tables raster.En
oek.pgraster.xml
vous assurer que votre SRS est réglé correctement, 27700 BNG dans ce cas.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:
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.
la source
En suivant les instructions de configuration du plugin raster PostGIS, vous devez essayer de remplacer
avec
dans le fichier de migration
mapping.postgis.xml.inc
.la source