这一篇是前面一篇的续集,前一篇链接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,结果如下:
至此数据发布成功。
标签:pgraster,beijing,插件,一篇,数据库,Postgis,raster2pgsql,栅格数据 From: https://blog.csdn.net/m0_59119702/article/details/141102773