Como publico rasters PostGIS usando o GeoServer?
Passei muito tempo tentando criar uma fonte de dados Raster usando o Image Mosaic JDBC, mas sem sorte.
Etapas executadas:
1. Baixou e instalou a extensão JDBC Image Mosaic (funcionou bem)
2. Criou os arquivos "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>
onde "mosaic" é uma tabela (colunas: nome, titletable, minX, minY, maxX, maxY, resX, resY) contendo uma linha: "gfm, testrastertable,,,,,,,".
3. Salve
os arquivos de configuração em. ./geoserver/data_dir/coverages/
4. Ao tentar adicionar um armazenamento de dados JDBC do Image Mosaic, recebo o seguinte erro:
Error: Could not list layers for this store, an error occurred retrieving them: Unable to acquire a reader for this coverage with format: ImageMosaicJDBC
Atualização: log do 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
Respostas:
Eu trabalhei com vários problemas tentando usar uma varredura postgis no geoserver semelhante ao OP. A seguir, mostramos como carreguei com êxito meus dados rasterizados.
Pré-configuração: Uma camada de geotiff BNG, gerada a partir do FME, foi importada para o postgis usando
raster2pgsql
. O comando usado foi:Isso criou a tabela raster junto com suas tabelas em pirâmide.
Atualmente, meu servidor possui uma instância de
Geoserver 2.6.2
. Para usar os rasters do Postgis, é necessária a extensão JDBC Image Mosaic, que pode ser baixada em http://geoserver.org/release/2.6.2/A extensão .jar foi então extraída
WEB-INF/lib
. Isso permitirá que o geoserver use rasters do postgis. No entanto, para acessar os dados, várias configurações precisam ser configuradas.Seguindo as instruções em: http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html, mas ligeiramente aprimorado:
Agora insira registros para uma "cobertura", chamada oek no exemplo, estas são suas tabelas raster: a principal e a pirâmide.
Ainda de acordo com a documentação, para os drivers Postgis JDBC <versão 9, é necessário definir uma propriedade no banco de dados:
Agora configuração do Geoserver:
Dentro do diretório de dados do Geoserver, crie um diretório
/data/coverages
, ele precisa conter 3 arquivos:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml
Siga http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html para obter nomes e conteúdo. Obviamente, ajuste a cadeia de conexão do banco de dados e as configurações de nome de usuário / senha em
connect.pgraster.xml.inc
mapping.pgraster.xml.inc
é onde precisamos fazer referência às tabelas raster corretamente.Portanto, isso obterá os valores que adicionamos à tabela MOSAIC, os
name
valores são as colunas deMOSAIC
, que se vinculam às nossas tabelas raster e pirâmide.rast
é o nome da coluna de varredura nas tabelas de varredura.Em
oek.pgraster.xml
Verifique se o seu SRS está configurado corretamente, 27700 BNG neste caso.No Geoserver, agora podemos adicionar um novo armazenamento de dados.
Vá para o novo Adicionar nova loja.
Selecione ImageMosaicJDBC
Dê um nome e defina o URL como
file:coverages/oek.pgraster.xml
Salve isso e os dedos cruzados não retornam erros. Se estiverem, verifique os logs do servidor geográfico que, esperançosamente, indicarão qual foi o problema, espero que apenas um erro de digitação ou nomeação.
Vá para adicionar uma nova camada e selecione o novo armazenamento de dados raster.
Selecione sua nova camada / cobertura chamada oek e publique-a.
Em seguida, nas configurações da camada, ajuste seu sistema de coordenadas e as caixas delimitadoras adequadamente.
Para estilizar a varredura, siga os documentos aqui: http://docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html
Eu adicionei um estilo:
Isso coloriu meus rasters de azul onde eles tinham um valor.
Você deve ter uma camada utilizável.
Isenção de responsabilidade: não sou especialista em GIS, e muito do que trabalhei foi tentativa e erro. Não tenho dúvidas de que existem maneiras melhores de fazê-lo, mas, por enquanto, só estou trabalhando em uma prova de conceito para confirmar se temos a capacidade de usar dados rasterizados no postgis. Detalhes mais refinados, como valores raster e estilo, são coisas que eu ainda preciso resolver. Se eu fizer algum progresso, atualizarei minha resposta.
fonte
Seguindo as instruções de configuração do plug-in de varredura PostGIS, você deve tentar substituir
com
no arquivo de configração
mapping.postgis.xml.inc
.fonte