1、需要引入geoserver-manager依赖
nl.pdok
geoserver-manager
1.7.0-pdok2
2、发布服务的思路
(1)创建geoserver的连接对象(连接上geoserver)
(2)创建工作区(已有就不用创建)
(3)创建数据源(已有就不用创建)
(4)发布图层服务
代码如下
package com.example.forestry.util.geoserver;
import it.geosolutions.geoserver.rest.GeoServerRESTManager;
import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
import it.geosolutions.geoserver.rest.GeoServerRESTReader;
import it.geosolutions.geoserver.rest.decoder.RESTDataStore;
import it.geosolutions.geoserver.rest.decoder.RESTStyle;
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
import it.geosolutions.geoserver.rest.encoder.datastore.GSPostGISDatastoreEncoder;
import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
import java.io.File;
import java.net.URL;
public class ServerUtil {
public boolean publishGeoserver(){
String host = "192.168.10.xx"; //postgres的ip
Integer port = 5432; //postgres的端口
String username = "postgres"; //postgres的账号
String password = "postgres"; //postgres的密码
String database = "forestry"; //postgres的数据库名称
String schema = "public"; //postgres的模块
String url = "http://192.168.10.xx:8080/geoserver"; //geoserver的地址
String un = "admin"; //geoserver的账号
String pw = "geoserver"; //geoserver的密码
String workspace = "shapefile"; //工作区名称
String storename = "posttt"; //数据源名称
String layername = "testxian"; //发布的图层名称,必须与数据库里的表名相同
String title = "县级行政区"; //发布的图层标题
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;
}
GeoServerRESTPublisher publisher = manager.getPublisher();
GeoServerRESTReader reader = manager.getReader();
// 2、创建工作区,已有此工作区则不在创建
boolean b3 = reader.existsWorkspace(workspace);
if(!b3){
boolean b = publisher.createWorkspace(workspace);
if(!b){
System.out.println("工作区创建失败");
return false;
}
}
// 3、创建数据源,已有此数据源则不再创建
RESTDataStore restDataStore = reader.getDatastore(workspace, storename);
if(restDataStore==null){
//创建postgis连接对象
GSPostGISDatastoreEncoder postgisDatastore = new GSPostGISDatastoreEncoder(storename);
postgisDatastore.setHost(host);
postgisDatastore.setPort(port);
postgisDatastore.setUser(username);
postgisDatastore.setPassword(password);
postgisDatastore.setDatabase(database);
postgisDatastore.setSchema(schema);
boolean b1 = manager.getStoreManager().create(workspace, postgisDatastore);
if(!b1){
System.out.println("创建数据源失败");
return false;
}
}
// 4、发布图层服务
GSFeatureTypeEncoder featureTypeEncoder = new GSFeatureTypeEncoder();
featureTypeEncoder.setName(layername);
featureTypeEncoder.setTitle(title);
featureTypeEncoder.setSRS("EPSG:4326");
GSLayerEncoder layerEncoder = new GSLayerEncoder();
// 4.1、设置图层的样式(这一步也可以不设置,不设置则图层用的是默认样式)
String styleName = "xianStyle";
boolean b = reader.existsStyle(workspace, styleName);
if(!b){
File sldFile = new File("D:\data\sld\zhenjunSld\xianStyle.sld");
publisher.publishStyleInWorkspace(workspace, sldFile);
}
layerEncoder.setDefaultStyle(workspace , styleName);
// 4.2、进行发布
boolean b2 = publisher.publishDBLayer(workspace, storename, featureTypeEncoder, layerEncoder);
if(!b2){
System.out.println("服务发布失败");
return false;
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
//进行测试
public static void main(String[] args) {
ServerUtil serverUtil = new ServerUtil();
boolean b = serverUtil.publishGeoserver();
System.out.println(b);
}
}



