GeoServer+Postgis发布存储在Postgis中的栅格数据

这两天在研究GeoServer发布Postgis中存储的栅格数据,网上寻找的方法没有很哪个很顺利的成功了的(很多坑都踩了一遍),今天终于成功了,把发布过程记录一下,并分享给有需要的人。

前期准备

版本推荐:geoserver2.19.6,postgres15以上,postgis3.0以上,Image Mosaic JDBC插件

工具:水经微图,gdal_retile.bat

重点难点:Image Mosaic JDBC插件下载

GeoServer较高的版本扩展列表中没有Image Mosaic JDBC插件。

以下为Geoserver2.21.0插件下载界面:

 以下为GeoServer2.18.3插件下载界面:

 怎么办呢,我们可以从maven 仓库直接下载jar包,但是又有个新问题了

可以看到最新的版本为25.6,如何查看GeoServer所需的Image Mosaic JDBC插件版本,因为Image Mosaic JDBC插件属于GeoTools的插件,只需要从$GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib目录下找到gt-xxx开头的插件查看其后缀,如下:

这就是为什么GoeSever版本推荐2.19.6的原因,将下载的插件放到该目录重启GeoServer即可在GeoServer的管理页面添加新的数据存储界面看到该插件对应的项,如下:

数据准备:

数据我选择从水经微图下载影像并导出大图(*.tif格式),如下:

然后将其拷贝到纯英文路径的工作目录下(我的为F:\postgis-geoserver),并将文件重命名为英文名称,如beijing.tif,如下:

至此准备工作基本完毕。

数据切片

利用gdal_retile工具对数据进行切片命令如下:

$your_path$\gdal_retile.bat -co "WORLDFILE=YES"  -r bilinear -ps 256 256 -of PNG -levels 5 -targetDir tiles beijing.tif

两点注意:

1.需要在工作文件夹(F:\postgis-geoserver)下新建tiles文件夹。

2.-levels 后跟的参数如何计算? 公式为num_levels = log2(max(w, h) / 瓦片宽度),瓦片宽度为-ps后两个数字,根据上面的命令则为256,w,h是tif文件的宽和高,可以在tif上右键属性详细信息查看,如图:

生成完成后可以在tiles目录下看到如下内容:

创建postgis数据库及扩展

如图:

我创建的数据库名字为test(后面需要用到),添加了postgis和postgis_raster扩展。

注意:需要先添加postgis扩展再添加postgis_raster扩展。扩展的添加方法使用查询工具或者在扩展item上右键->创建->扩展,然后在弹出窗口中选择。

创建配置文件

1.connect.postgis.xml.inc

<connect>
   <dstype value="DBCP"/>
   <username value="postgres"/>
   <password value="root"/>
   <jdbcUrl value="jdbc:postgresql://localhost:4321/test"/>
   <driverClassName value="org.postgresql.Driver"/>
   <maxActive value="10"/>
   <maxIdle value="0"/>
</connect>

2.mapping.postgis.xml.inc(很重要可能导致后续生成的建表语句(*.sql文件)不正确,很多博主提供的不正确)

<spatialExtension name="postgis"/>
<mapping>
    <masterTable name="dem" >
      <coverageNameAttribute name="name"/>
      <maxXAttribute name="maxX"/>
      <maxYAttribute name="maxY"/>
      <minXAttribute name="minX"/>
      <minYAttribute name="minY"/>
      <resXAttribute name="resX"/>
      <resYAttribute name="resY"/>
      <tileTableNameAtribute  name="TileTable" />
      <spatialTableNameAtribute name="SpatialTable" />
    </masterTable>
    <tileTable>
      <blobAttributeName name="data" />
      <keyAttributeName name="location" />
    </tileTable>
    <spatialTable>
      <keyAttributeName name="location" />
      <geomAttributeName name="geom" />
      <tileMaxXAttribute name="maxX"/>
      <tileMaxYAttribute name="maxY"/>
      <tileMinXAttribute name="minX"/>
      <tileMinYAttribute name="minY"/>
    </spatialTable>
</mapping>

3. dem.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="dem"/>
  <coordsys name="EPSG:4326"/>
  <!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic -->
  <scaleop  interpolation="1"/>
  <verify cardinality="false"/>
  &mapping;
  &connect;
</config>

生产数据库创建文件以及创建数据库表

1.生成数据库创建文件

java -jar G:\geoserver-2.19.6-bin\webapps\geoserver\WEB-INF\lib\gt-imagemosaic-jdbc-25.6.jar ddl -config dem.postgis.xml -spatialTNPrefix tiledem -pyramids 5 -statementDelim ";" -srs 4326 -targetDir sqls

在工作目录执行 ,需要新建文件夹sqls。

生成结果如下:

 2.创建库表

psql -h localhost -p 4321 -U postgres -d test -f sqls/createmeta.sql
psql -h localhost -p 4321 -U postgres -d test -f sqls/add_dem.sql

 数据导入数据库

执行以下命令:

java -jar G:\geoserver-2.19.6-bin\webapps\geoserver\WEB-INF\lib\gt-imagemosaic-jdbc-25.6.jar import -config dem.postgis.xml -spatialTNPrefix tiledem -tileTNPrefix tiledem -dir tiles -ext png

如果提示缺少postgres驱动问题则执行以下命令:

java -Xbootclasspath/a:G:\geoserver-2.19.6-bin\webapps\geoserver\WEB-INF\lib\postgresql-42.3.3.jar -jar G:\geoserver-2.19.6-bin\webapps\geoserver\WEB-INF\lib\gt-imagemosaic-jdbc-25.6.jar import -config dem.postgis.xml -spatialTNPrefix tiledem -tileTNPrefix tiledem -dir tiles -ext png

 postgres*.jar的版本可以在$GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib目录下查看,如下:

 导入成功后数据库数据如下:

数据发布

在GeoServer管理页面新建工作空间

然添加新的数据存储,选择ImageMosaicJDBC

选择工作空间,设置名称,填写URL路径。

 URL为安装GeoServer电脑下dem.postgis.xml文件的绝对路径。

 发布图层

在图层选项里选择添加新的资源,选择刚刚新建的工作空间和数据存储,结果如下:

点击发布,参数都不需要修改点击保存即可,如下:

图层预览,结果如下:

至此数据上传及发布成功。

我看有很多博客留言发布的时候报Could not list layers for this store, an error occurred retrieving them: Failed to create reader fromxxx错误,大概率两个原因第一就是Image Mosaic JDBC插件版本不对,第二就是mapping.postgis.xml.inc内容不对。按照本博客大概率不会出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值