java编码实现发布矢量数据或栅格数据至GeoServer

/**
 * @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");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值