1、引入geoserver依赖
<!--geoserver依赖-->
<dependency>
<groupId>nl.pdok</groupId>
<artifactId>geoserver-manager</artifactId>
<version>1.7.0-pdok2</version>
</dependency>
2、思路
(1)创建geoserver连接对象
(2)创建工作区,有则不创建
(3)创建数据源和发布图层服务
3、代码
/**
* 将shapefile文件发布为geoserver服务
*
* @return
*/
public boolean publishShp(){
String url = "http://192.168.10.190:8080/geoserver"; //geoserver的地址
String un = "admin"; //geoserver的账号
String pw = "geoserver"; //geoserver的密码
String workspace = "shapefile"; //工作区名称
String storename = "posttt"; //数据源名称
String layername = "temp"; //发布的图层名称,此名称必须和压缩包的名称一致
//shp文件压缩包,必须是zip压缩包,且shp文件(.shp、.dbf、.shx等)外层不能有文件夹,且压缩包名称需要与shp图层名称一致
String zipFilePath = "D:\\data\\shapefile\\1125shpfile\\temp.zip";
try {
// 1、获取geoserver连接对象
GeoServerRESTManager manager = null;
try {
manager = new GeoServerRESTManager(new URL(url) , un , pw);
System.out.println("连接geoserver服务器成功");
}catch (Exception e){
e.printStackTrace();
System.out.println("geoserver服务器连接失败");
return false;
}
GeoServerRESTReader reader = manager.getReader();
GeoServerRESTPublisher publisher = manager.getPublisher();
GeoServerRESTStoreManager storeManager = manager.getStoreManager();
// 2、判断是否有工作区,没有则创建
boolean b2 = reader.existsWorkspace(workspace);
if(!b2){
boolean b = publisher.createWorkspace(workspace);
if(!b){
System.out.println("工作区创建失败");
return false;
}
}
// 3、判断是否有数据源,没有则创建
// 4、发布图层,如果存在就不发布
// 创建数据源 和 发布图层服务可以一步进行
RESTDataStore datastore = reader.getDatastore(workspace, storename);
RESTLayer layer = reader.getLayer(workspace, layername);
if(layer==null && datastore==null){
File file = new File(zipFilePath);
// 进行发布;参数依次为:工作区名称、数据源名称、图层名称、shp文件压缩文件对象、坐标系
boolean b = publisher.publishShp(workspace , storename , layername , file , "EPSG:4326");
if(!b){
System.out.println("shp图层发布失败");
return false;
}
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}