GeoServer+Postgis发布存储在Postgis中的栅格数据(二)--pgraster插件使用

这一篇是前面一篇的续集,前一篇链接GeoServer+Postgis发布存储在Postgis中的栅格数据

前期准备

pgraster插件下载:还是提供一个maven地址,直接搜索pgraster即可,版本的话因为插件是gs-开头选择和GeoServer版本一致即可,前一篇使用的GeoServer版本为2.19.6,所以这里也选择2.19.6即可,如下:

然后将其拷贝到$GEOSERVER_HOME/webapps/geoserver/WEB-INF/lib目录下,重启GeoServer,然后在GeoServer的Web管理页面添加栅格数据存储,然后选择ImageMosaicJDBC可以在URL输入框下面出现一个复选框代表插件添加成功,如下:

背景介绍

按照官方文档的说法,该插件是简化了ImageMosaic JDBC存储配置,只需要配置postgresql的bin目录为环境变量就可自动帮助导入瓦片,创建数据表,以及创建配置参数,官方文档截图如下:

但是按照官方文档我并没有配置成功,还是需要自己写配置文件上传栅格数据,创建元数据表等操作,但是相对而言该插件可以使用raster2pgsql工具自动切片并导入数据库,并创建数据表,相对而言比前一篇教程使用gdal_retile工具要简单不少,现在把整个流程分享给有需要的人。

数据库创建以及插件加载

新建一个数据库testRaster,扩展的创建可以参考前一篇的创建postgis数据库及扩展章节,结果如下:

使用raster2pgsql工具导入数据

如果没有将postgresql的bin目录添加环境变量可以在postgresql的bin目录执行以下代码:

raster2pgsql -s 4326 -I -C -M F:\postgis-geoserver-raster\beijing.tif -F -t 256x256 public.beijing | psql -h localhost -p 4321 -U postgres -d testRaster -W

 参数说明

-s 4326: 指定栅格数据的空间参考系统(SRID),这里4326表示使用WGS 84(通常用于全球GPS坐标)。

-I: 为栅格数据生成空间索引。空间索引可以加速空间查询。

-C: 为栅格数据生成栅格列约束条件。这些约束条件包括栅格瓦片的平铺情况和块的像素大小等。

-M: 添加瓦片元数据。它会在数据库中生成raster_columns和raster_overviews表,并在这些表中记录栅格元数据。

-F: 将栅格数据的平铺格式设置为regular blocking(即定期块格式)。这意味着将栅格图像分割成规则的、可控的大小(如256x256像素的瓦片),以便在数据库中存储和处理。

-t 256x256: 指定将栅格数据切割成的瓦片大小(256x256像素)。这有助于优化数据库的查询性能,尤其是在处理大范围或大文件时。

F:\postgis-geoserver-raster\beijing.tif: 指定输入的栅格文件路径,这里是beijing.tif 。 public.beijing: 指定导入数据的目标表名为public.beijing,并将其存储在public模式(schema)下。

| psql -h localhost -p 5432 -U postgres -d rastertest -W: 这个部分是通过管道(|)将raster2pgsql生成的SQL语句直接传递给psql工具,并执行这些语句以将数据插入到数据库中。

-h localhost: 指定PostgreSQL数据库的主机地址为本地主机(localhost)。

-p 4321: 指定PostgreSQL数据库的端口号为4321(PostgreSQL的默认端口5432)。

-U postgres: 指定数据库的用户名为postgres。

-d testRaster : 指定目标数据库名称为rastertest。

-W: 提示用户输入密码。在执行命令时,系统会要求你输入postgres用户的密码。 

另外raster2pgsql还可以导入整张影像,命令示例如下:

raster2pgsql -s 4326 -I -C -M F:\postgis-geoserver-raster\beijing.tif  public.beijing | psql -h localhost -p 4321 -U postgres -d testRaster -W

数据导入成功后会在数据库新建一张名为beijing的表,并有两个字段rid和rast(raster2pgsql有个参数可以新增一列记录文件名字,可以自行百度以下),如下:

 创建元数据表

在PgAdmin工具内,想要的数据库使用查询工具输入以下sql语句:

create table 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));

insert into MOSAIC(NAME,TileTable) values ('oek','beijing');

其中beijing需要更改为前面使用raster2pgsql导入数据创建的表名的名称,示例如下:

执行成功后,在左侧表的item右键刷新就可以看到一个名为mosaic的表,如下:

 创建配置文件

 1.connect.pgraster.xml.inc

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

这个除了数据库名称和前一篇文章没区别。

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

这个和前一篇文章的区别主要有以下几点:

1.<spatialExtension/>节点使用pgraster,前一篇使用postgis。

2.少了<spatialTableNameAtribute name="SpatialTable" />节点及相关配置。

3.<tileTable>节点下只存在一个<blobAttributeName/>节点且name的值为rast。

 3.oek.pgraster.xml(前一篇叫dem.postgis.xml)

<?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:4326"/>
      <!-- interpolation 1 = nearest neighbour, 2 = bipolar, 3 = bicubic -->
      <scaleop  interpolation="1"/>
 <axisOrder ignore="false"/>
      &mapping;
      &connect;
</config>

其实和前一篇没区别,只需要把<coverageName/>节点中name的值改为和前面insert语句中表mosaic的name字段的值一样即可,该值也是GoeServer发布图层的图层名。

 将以上三个文件放到同一纯英文路径目录。

数据发布

还是使用上一篇的工作空间,添加新的数据存储,还是选择栅格数据源中的ImageMosaicJDBC,然后设置数据源名称,在URL处填写oek.pgraster.xml文件的绝对路径(这个文件需要在安装GeoServer的电脑上),如下:

因为没有用到官方说的方案不勾选 PGRaster automatic configuration parameters前面的复选框,直接点击保存即可。

在左侧选择图层选项,添加新的资源选择test:testRaster数据存储,结果如下:

点击发布,参数默认直接点保存即可,如下:

 然后在图层预览界面,选择test:oek,点击OpenLayers,结果如下:

至此数据发布成功。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值