在GeoServer中发布PostGIS栅格?


23

如何使用GeoServer发布PostGIS栅格?

我花了很多时间尝试使用Image Mosaic JDBC创建Raster数据源,但是没有运气。

执行的步骤:
1.下载并安装JDBC Image Mosaic扩展(正常)
2.创建“连接参数”文件:

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>

其中“ mosaic”是一个表(列:名称,标题表,minX,minY,maxX,maxY,resX,resY),其中包含一行:“ gfm,testrastertable 、、、、、、、、”

。3.将配置文件保存在中。 ./geoserver/data_dir/coverages/
4.在尝试添加Image Mosaic JDBC数据存储时,出现以下错误:

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



更新: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

将日志转为详细,并检查日志文件
伊恩·特顿

刚刚更新了日志...并没有告诉我太多
asp

似乎没有人可以提供帮助,您可以尝试使用GeoServer邮件列表:geoserver.org/display/GEOS/Mailing+Lists
GIS-Jonathan,

这个问题有更新吗?
巴勃罗(Pablo)2013年

1
没有更新...我不得不放弃创建JDBC Image Mosaic的想法,因为我只是无法在Geoserver中创建它。我现在正在使用ImagePyramid存储,并且文件保留在磁盘上。
2013年

Answers:


7

我尝试了几个问题,试图在类似于OP的geoserver中使用postgis栅格。以下是我成功加载栅格数据的方式。

预先配置:已使用FME将FME生成的BNG geotiff层导入到postgis中raster2pgsql。使用的命令是:

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

这创建了栅格表及其金字塔表。

目前,我的服务器具有的实例Geoserver 2.6.2。要使用Postgis栅格,它需要扩展JDBC Image Mosaic,可以从http://geoserver.org/release/2.6.2/下载。

然后将扩展名.jar提取到中WEB-INF/lib。然后,这将使Geoserver能够使用Postgis中的栅格。但是,要访问数据,需要配置一些设置。

遵循以下说明:http : //docs.geotools.org/latest/userguide/library/coverage/pgraster.html,但稍作调整:

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

现在插入“ coverage”(在示例中名为oek)的记录,这些是您的栅格表:主记录表和金字塔记录表。

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

同样根据文档,对于Postgis JDBC驱动程序<版本9,有必要在数据库中设置属性:

ALTER DATABASE dbname SET bytea_output TO 'escape'

现在,Geoserver配置:

在您的Geoserver数据目录中,创建一个目录/data/coverages,其中需要包含3个文件:connect.pgraster.xml.inc, mapping.pgraster.xml.inc, oek.pgraster.xml

请关注http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html,以获取其名称和内容。显然在中调整数据库连接字符串和用户名/密码设置connect.pgraster.xml.inc

mapping.pgraster.xml.inc 是我们需要正确引用栅格表的地方。

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

因此,这将获得我们添加到MOSAIC表中的name值,这些值是的列MOSAIC,这些列链接到我们的栅格表和金字塔表。 rast是栅格表中栅格列的名称。

为了oek.pgraster.xml确保您的SRS设置正确,在这种情况下为27700 BNG。

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

现在,在Geoserver中,我们可以添加一个新的数据存储。

转到新的添加新商店。

选择ImageMosaicJDBC

给它起一个名字,并将URL设置为 file:coverages/oek.pgraster.xml

保存此内容,手指交叉不会返回任何错误。如果是这样,请检查geoserver日志,希望该日志可以指出问题所在,希望只是拼写错误或命名问题。

转到添加新图层并选择新的栅格数据存储。

选择名为oek的新图层/覆盖并发布。

然后在图层设置中适当调整坐标系和边界框。

要设置栅格样式,请遵循以下文档:http : //docs.geoserver.org/latest/en/user/styling/sld-reference/rastersymbolizer.html

我添加了一种样式:

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

这使我的栅格变成了有价值的蓝色。

然后,您应该有一个可用的层。

免责声明:我不是GIS专家,而我所做的很多工作都是反复试验。我毫不怀疑有更好的方法可以做到这一点,但是目前我只是在进行概念验证,以确认我们是否有能力在Postgis中使用栅格数据。我仍然需要解决一些细节问题,例如栅格值和样式。如果我取得任何进一步的进步,我将更新我的答案。


2

按照 PostGIS栅格插件的配置说明,您应尝试更换

<spatialExtension name="postgis"/>

<spatialExtension name="pgraster"/>

在配置文件中mapping.postgis.xml.inc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.