一、写在前面
geoserver 提供了地图服务,可以通过它提供的 web 管理页面,创建存储库和发布图层。在实际使用中总不能每次都人工操作,太不方便了,往往还要和你的业务系统交互,在你的业务系统管理tiff 文件并发布。这个时候 geoserver-manager库就派上用场了,它封装了 geoserver 的一些 REST 接口,可以在你的Java项目中调用这些接口来实现你的需要。
二、主要内容
2.1 概述
geoserver-manager 是使用Java库通过REST与GeoServer通信的类库。
可以再你的Java项目中使用,它作为客户端工具使用 GeoServer 的REST 接口,来实现你的业务功能。
重要的相关网址:
- geoserver-manager 类库的使用文档 https://github.com/geosolutions-it/geoserver-manager/wiki/Various-Examples
- geoserver 的 REST接口说明 https://docs.geoserver.org/latest/en/user/rest/index.html#rest
添加依赖
代码语言:javascript复制<dependency>
<groupId>nl.pdok</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7.0-pdok2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
下面是一些常用操作
2.2 初始化
代码语言:javascript复制String RESTURL = "http://localhost:8080/geoserver";
String RESTUSER = "admin";
String RESTPW = "geoserver";
GeoServerRESTReader reader = new GeoServerRESTReader(RESTURL, RESTUSER, RESTPW);
GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(RESTURL, RESTUSER, RESTPW);
2.3 创建一个工作区
代码语言:javascript复制boolean created = publisher.createWorkspace("myWorkspace")
2.4 发布一个TIFF 图层
代码语言:javascript复制public void addTIFFDatastore(String workspace) throws Exception {
addWorkspace(workspace);
//判断数据存储(datastore)是否已经存在,不存在则创建
String fileName = "/Users/zhangyunfei/Downloads/pvdms/pvdmsPath/1111.tif";
//待创建和发布图层的数据存储名称store
String store_name = fileName.substring(fileName.lastIndexOf("/") 1, fileName.lastIndexOf("."));
RESTDataStore restStore = manager.getReader().getDatastore(workspace, store_name);
if (restStore == null) {
GSGeoTIFFDatastoreEncoder gsGeoTIFFDatastoreEncoder = new GSGeoTIFFDatastoreEncoder(store_name);
gsGeoTIFFDatastoreEncoder.setWorkspaceName(workspace);
gsGeoTIFFDatastoreEncoder.setUrl(new URL("file:" fileName));
boolean createStore = manager.getStoreManager().create(workspace, gsGeoTIFFDatastoreEncoder);
System.out.println("create store (TIFF文件创建状态) : " createStore);
boolean publish = manager.getPublisher().publishGeoTIFF(workspace, store_name, new File(fileName));
System.out.println("publish (TIFF文件发布状态) : " publish);
} else {
System.out.println("数据存储已经存在了,store:" store_name);
}
}
三、参考
https://github.com/geosolutions-it/geoserver-manager/wiki/Various-Examples https://docs.geoserver.org/latest/en/user/rest/index.html#rest https://github.com/As-Zach/GeoServer-SpringBoot