¿Cómo publico rásteres PostGIS usando GeoServer?
He pasado mucho tiempo intentando crear una fuente de datos Raster usando Image Mosaic JDBC pero sin suerte.
Pasos realizados:
1. Descargué e instalé la extensión JDBC Image Mosaic (funcionó bien)
2. Creé los archivos "Parámetros de conexión":
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>
donde "mosaico" es una tabla (columnas: nombre, tabla de título, minX, minY, maxX, maxY, resX, resY) que contiene una fila: "gfm, testrastertable,,,,,,," 3. Guarde
los archivos de configuración en. ./geoserver/data_dir/coverages/
4. Al intentar agregar un almacén de datos JDBC de Image Mosaic, recibo el siguiente error:
Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
Actualización: registro de 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
geoserver
postgresql
postgis-2.0
áspid
fuente
fuente
Respuestas:
Trabajé en varios problemas tratando de usar un ráster postgis en geoserver similar al OP. A continuación se muestra cómo cargué correctamente mis datos ráster.
Preconfiguración: una capa de geotiff BNG, generada a partir de FME, se ha importado a postgis usando
raster2pgsql
. El comando utilizado fue:Esto creó la tabla ráster junto con sus tablas piramidales.
Actualmente mi servidor tiene una instancia de
Geoserver 2.6.2
. Para usar rásteres Postgis, se requiere la extensión JDBC Image Mosaic, que se puede descargar desde http://geoserver.org/release/2.6.2/La extensión .jar fue luego extraída en
WEB-INF/lib
. Esto permitirá que geoserver use rásteres de postgis. Sin embargo, para acceder a los datos, es necesario configurar varios ajustes.Siguiendo las instrucciones en: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html pero ligeramente modificado:
Ahora inserte registros para una "cobertura", llamada oek en el ejemplo, estas son sus tablas ráster: la maestra y las piramidales.
También según los documentos, para los controladores JDBC de Postgis <versión 9 es necesario establecer una propiedad en la base de datos:
Ahora configuración de Geoserver:
Dentro de su directorio de datos Geoserver, cree un directorio
/data/coverages
, este debe contener 3 archivos:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml
Siga http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html para sus nombres y contenidos. Obviamente, ajuste la cadena de conexión de la base de datos y la configuración de nombre de usuario / contraseña en
connect.pgraster.xml.inc
mapping.pgraster.xml.inc
es donde debemos hacer referencia a las tablas ráster correctamente.Entonces esto obtendrá los valores que agregamos a la tabla MOSAIC, los
name
valores son las columnas deMOSAIC
, que enlazan con nuestra tabla ráster y tablas piramidales.rast
es el nombre de la columna ráster en las tablas ráster.En
oek.pgraster.xml
Asegúrese de que sus SRS está definida correctamente, 27700 BNG en este caso.En Geoserver ahora podemos agregar un nuevo almacén de datos.
Ir a nuevo Agregar nueva tienda.
Seleccione ImageMosaicJDBC
Póngale un nombre y configure la URL en
file:coverages/oek.pgraster.xml
Guarde esto, y los dedos cruzados no se devuelven errores. Si es así, verifique los registros del geoservidor que con suerte indicarán cuál fue el problema, con suerte solo un error tipográfico o de nombres.
Vaya a agregar una nueva capa y seleccione el nuevo almacén de datos ráster.
Seleccione su nueva capa / cobertura llamada oek y publíquela.
Luego, en la configuración de capa, ajuste el sistema de coordenadas y los cuadros delimitadores de forma adecuada.
Para diseñar el ráster, siga los documentos aquí: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html
Agregué un estilo:
Esto coloreó mis rásteres azules donde tenían un valor.
Entonces deberías tener una capa utilizable.
Descargo de responsabilidad: no soy un experto en SIG, y mucho de lo que trabajé fue prueba y error. No tengo dudas de que hay mejores maneras de hacerlo, pero por el momento solo estoy trabajando en una prueba de concepto para confirmar si tenemos la capacidad de usar datos ráster en postgis. Detalles más precisos, como los valores ráster y el estilo, son cosas que todavía necesito resolver. Si sigo avanzando, actualizaré mi respuesta.
fuente
Siguiendo las instrucciones de configuración para el complemento ráster PostGIS, debe intentar reemplazar
con
en el archivo de configuración
mapping.postgis.xml.inc
.fuente