GeoServer源码解析栅格数据Image Mosaic JDBC插件原理(二)GeoTools Image Mosaic JDBC插件源码解析
1. 作者声明
上一篇我们讲到GDAL切片工具的使用,本篇重点在于GeoTools Image Mosaic JDBC插件讲解
2. GeoTools和Image Mosaic JDBC插件介绍
2.1. GeoTools介绍
geotools原生java工具包,适用于空间数据的解析和转换,比如点线面矢量数据的增删改查,坐标转换等操作,遥感影像的镶嵌、裁剪等操作。
官网文档地址:
http://docs.geotools.org/latest/userguide/
2.2. Image Mosaic JDBC插件介绍
顾名思义,插件适用于raster栅格数据增删改查操作。本博文用postgresql+Postgis做实例为大家演示。
官网实例地址:
http://docs.geotools.org/latest/userguide/library/coverage/jdbc/index.html
3.环境搭建
3.1. java环境(不再赘述)
jdk版本至少8以上,推荐jdk8
3.2. Geotools源码
Geotools版本推荐20以上,本博文选择23.x
源码下载:
git clone https://github.com/geotools/geotools.git
git checkout -b 23.x
3.3. Eclipse|Idea
博文Eclipse用作演示,熟悉Idea的工程师可以根据爱好自行选择。Eclipse版本最好集成git、maven插件
3.4. Maven
maven版本3.5以上
3.5. Postgresql与Postgis安装
Postgresql版本要求9.5以上
https://www.postgresql.org/download/
PostGIS版本2.4以上
pg库连接驱动包下载
版本推荐42.2
https://jdbc.postgresql.org/download.html
4. Geotools编译
4.1. Maven命令行编译
F:\git\geoserver\geotools-23.x>mvn clean install -DskipTests
4.2. Eclipse编译
geotools子工程较多,完全编译需要花费大量时间,因此我们只需要编译 Image Mosaic JDBC工程。
注意:
子工程右键选择maven build
勾选offline(不重复下载)
Skip Tests(跳过测试类)
4.3.官网教程
http://docs.geotools.org/latest/userguide/tutorial/quickstart/index.html
5. 生成数据库脚本(栅格表sql脚本)
5.1. 创建配置文件(推荐创建在geoserver data\coverages目录下,后篇会讲到)
5.1.1. 数据库链接文件 connect.postgis.xml.inc
<connect>
<!-- value DBCP or JNDI -->
<dstype value="DBCP"/>
<!-- <jndiReferenceName value=""/> -->
<username value="postgres" />
<password value="postgres" />
<jdbcUrl value="jdbc:postgresql://localhost:5432/gis" />
<driverClassName value="org.postgresql.Driver"/>
<maxActive value="10"/>
<maxIdle value="0"/>
</connect>
5.1.2. 表实体文件 mapping.postgis.xml.inc
<!-- possible values: universal,postgis,db2,mysql,oracle -->
<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" />
<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>
5.1.3. 栅格数据描述文件 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="osm"/>
<coordsys name="EPSG:4326"/>
<!-- interpolation 1 = nearest neighbour, 2 = bilinear, 3 = bicubic -->
<scaleop interpolation="1"/>
<verify cardinality="false"/>
&mapping;
&connect;
</config>
注意:坐标系请使用EPSG:4326,使用EPSG:3857无法识别
5.2. 生成脚本
5.3. 参数传递说明
参数 | 说明 |
---|---|
ddl | ddl脚本语句生成(建表) |
-config | 配置文件路径,例如:\webapp\data\coverages\osm.postgis.xml |
-spatialTNPrefix | 空间表前缀名称 如:tileosm |
-pyramids | 金字塔层级数 如0-20 |
-statementDelim | 同一脚本,多sql语句用";"隔开 如:; |
-srs | 坐标参考 |
-targetDir | 脚本输出路径 |
5.4. 生成脚本
5.5. 官网介绍
https://docs.geoserver.org/latest/en/user/tutorials/imagemosaic-jdbc/imagemosaic-jdbc_tutorial.html
6. 第一篇讲述的切片导入Postgresql库
6.1. 执行Toolbox类数据入库
6.2. 参数说明
参数 | 说明 |
---|---|
import | 导入 |
-config | 配置文件路径,例如:\webapp\data\coverages\osm.postgis.xml |
-spatialTNPrefix | 空间表前缀名称 如:tileosm |
-tileTNPrefix | 与spatialTNPrefix对应 |
-dir | 切片目录 |
-ext | 读取切片后缀名 png、jpg、tif |
6.3. 导入成功信息
6.4. 错误解决
如果提示数据库连接驱动无法加载,请看如下:
7. 数据库成果展示