/**
* @Description: java编码实现发布矢量数据或栅格数据至GeoServer.
* GeoServer-Manager是使用Java编写的面向GeoServer的客户端库,通过GeoServer的REST管理接口与GeoServer交互。
* 提供了访问GeoServer并管理(增删改查)其中工作区、数据存储、图层、图层组、样式等的接口函数。
* @Author: zlzhaoe
* @Date: 2023-08-09
* @Version: V1.0
*/
@Slf4j
public class GeoServerManager {
/**
* 初始化geoserver服务器相关服务配置
* @return
*/
public static GisServer initGisServer(){
GisServer gisServer = new GisServer();
//geoserver服务器地址
gisServer.setServerAddress("http://x.x.x.x:10001/geoserver");
//geoserver服务器账号
gisServer.setAccount("admin");
//geoserver服务器账号密码
gisServer.setPassword("123456");
//数据源名称
gisServer.setDatastore("nr_postgis_public");
//工作空间
gisServer.setWorkspace("NR");
//时空数据库连接
gisServer.setDatabaseIp("127.0.0.1");
//时空数据库模式
gisServer.setDatabasePort("5432");
//时空数据库端口号
gisServer.setDatabaseSchema("public");
//时空数据库名称
gisServer.setDatabaseName("nr_postgis");
//时空数据库账号
gisServer.setDatabaseAccount("postgres");
//时空数据库密码
gisServer.setDatabasePassword("123456");
return gisServer;
}
/**
* 查询查询图层是否存在
* @param layerName
* @param gisServer
* @return
*/
public static boolean existLayer(String layerName, GisServer gisServer){
try {
GeoServerRESTReader geoServerRestreader = new GeoServerRESTReader(gisServer.getServerAddress(), gisServer.getAccount(), gisServer.getPassword());
return geoServerRestreader.existsLayer(gisServer.getWorkspace(), layerName,true);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return false;
}
/**
* 根据数据源、数据表、图层名称发布图层
* @param layerTitle 图层标题
* @param layerName 图层名称
* @param gisServer
* @return
*/
public static boolean publishLayer(String layerTitle, String layerName, GisServer gisServer){
layerTitle = layerTitle.toLowerCase();
layerName = layerName.toLowerCase();
GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();
fte.addKeyword("KEYWORD");
fte.setTitle(layerTitle);
fte.setName(layerName);
GSLayerEncoder layerEncoder = new GSLayerEncoder();
GeoServerRESTPublisher geoServerRestPublisher =
new GeoServerRESTPublisher(gisServer.getServerAddress(), gisServer.getAccount(), gisServer.getPassword());
return geoServerRestPublisher.publishDBLayer(gisServer.getWorkspace(), gisServer.getDatastore(), fte, layerEncoder);
}
/**
* 从geoserver移除图层
* @param layerName
* @param gisServer
* @return
*/
public static boolean removeLayer(String layerName, GisServer gisServer){
GeoServerRESTPublisher geoServerRestPublisher = new GeoServerRESTPublisher(gisServer.getServerAddress(), gisServer.getAccount(), gisServer.getPassword());
return geoServerRestPublisher.removeLayer(gisServer.getWorkspace(), layerName);
}
/**
* 命令geoserver重新加载配置
* @param gisServer
* @return
*/
public static boolean reload(GisServer gisServer){
GeoServerRESTPublisher geoServerRestPublisher = new GeoServerRESTPublisher(gisServer.getServerAddress(), gisServer.getAccount(), gisServer.getPassword());
return geoServerRestPublisher.reload();
}
/**
* 根据数据源更新图层信息实现类
* @param layerTitle 图层标题
* @param layerName 图层名称
* @return
*/
public static void publishLayer(String layerTitle,String layerName) {
//初始化geoserver服务器相关服务配置
GisServer gisServer = initGisServer();
boolean flag = existLayer(layerName,gisServer);
log.info("检验图层是否存在:"+flag);
if(flag){
boolean result = removeLayer(layerName, gisServer);
log.info("移出图层:"+result);
if (result) {
boolean reload = reload(gisServer);
log.info("重新加载配置:"+reload);
if (reload) {
boolean publish = publishLayer(layerTitle, layerName, gisServer);
log.info("根据数据源、数据表、图层名称发布图层:"+publish);
log.info("==== GXPointJob重载成功 ======");
}
}
}
log.info("==== GXPointJob结束 ======");
}
public static void main(String[] args) {
GeoServerManager.publishLayer("pm_gridman","pm_gridman");
}
}
java编码实现发布矢量数据或栅格数据至GeoServer
最新推荐文章于 2024-07-03 19:13:37 发布