本地tiff 在geoserver发布地图服务

简要说明

不建议调用geoserver-manager的发布接口,将tiff文件上传到geoserver的服务器进行发布,这样时效比较慢,建议被发布的文件和geoserver的站点在同一台服务器或者可以让geoserver站点读取到的挂载目录等

maven依赖

			<dependency>
                <groupId>com.github.dov-vlaanderen</groupId>
                <artifactId>geoserver-manager</artifactId>
                <version>1.8</version>
            </dependency>

样例代码

封装的入参实体

@Data
public class ReqDTO {

    /**
     * 站点地址
     */
    private String serverUrl;

    /**
     * 站点用户名称
     */
    private String userName;

    /**
     * 站点密码
     */
    private String passWord;

    /**
     * 工作区名称
     */
    private String workspaceName;

    /**
     *文件路径
     */
    private String dataPath;

    /**
     *样式名称
     */
    private String styleName;

    /**
     *样式文件路径,若有样式文件,会注册样式
     */
    private String styleFilePath;
}

辅助方法

/**
     * 获取geoserver管理器
     *
     * @param serverUrl
     * @return
     */
    public GeoServerRESTManager getManager(String serverUrl, String userName, String passWord) {
        try {
            GeoServerRESTManager manager = new GeoServerRESTManager(new URL(serverUrl), userName, passWord);
            System.out.println("连接geoserver服务器成功!");
            return manager;
        } catch (MalformedURLException e) {
            System.out.println("连接geoserver服务器失败");
        }
        return null;
    }
/**
     * 工作空间是否存在  不存在则创建工作空间
     *
     */
    private boolean judgeWorkspace(GeoServerRESTManager manager, String wokeSpaceName) {
        boolean wsFlag = false;
        GeoServerRESTPublisher publisher = manager.getPublisher();
        GeoServerRESTReader reader = manager.getReader();
        wsFlag = reader.existsWorkspace(wokeSpaceName);
        //判断工作空间是否存在
        if (!wsFlag) {
            System.out.println("工作空间不存在,创建工作空间");
            //创建一个新的存储空间
            wsFlag = publisher.createWorkspace(wokeSpaceName);
            return wsFlag;
        } else {
            System.out.println("工作空间已存在");
        }
        return wsFlag;
    }
/**
     * 判断或注册样式
     *
     * @param
     * @return
     */
    private boolean judgeStyleOrCreate(GeoServerRESTManager manager, GeoServerRESTReader reader, String styleName, File styleFile, Boolean localFlag) {
        if (StringUtils.isEmpty(styleName) && Objects.isNull(styleFile)) {
            return false;
        }
        if (!StringUtils.isEmpty(styleName) && Objects.isNull(styleFile)) {
            boolean styleValidateFlag = styleValidate(reader, styleName);
        }
        if (Objects.nonNull(styleFile)) {
            if (StringUtils.isEmpty(styleName)) {
                String styleFileName = styleFile.getName();
                styleName = styleFileName.substring(0, styleFileName.indexOf("."));
            }
            System.out.println("发布样式");
            publishSldFile(manager, styleFile, styleName);
            if (!localFlag) {
                //不是本地文件,即为上传的
                FileUtil.del(styleFile);
            }
            return true;
        }
        return false;
    }
/**
     * sld文件发布
     *
     */
    private void publishSldFile(GeoServerRESTManager manager, File styleFile, String styleName) {
        GeoServerRESTStyleManager styleManager = manager.getStyleManager();
        boolean result = false;
        //判断style是否已经存在,不存在则创建
        boolean existsStyle = styleManager.existsStyle(styleName);
        if (!existsStyle) {
            //不基于工作空间发布 true成功false失败
            result = styleManager.publishStyle(styleFile, styleName);
        } else {
            System.out.println("该样式已经存在");
        }
        return;
    }
/**
     * 尝试从文件获取tif的坐标系
     * @param tifFile
     */
    private int getSrid(File tifFile) throws IOException, FactoryException {
        GeoTiffReader geoTiffReader = new GeoTiffReader(tifFile);
        CoordinateReferenceSystem crs = geoTiffReader.getCoordinateReferenceSystem();
        if (Objects.nonNull(crs)) {
            Integer epsgCode = CRS.lookupEpsgCode(crs, true);
            return epsgCode;
        }
        return 0;
    }

主体发布代码

private void publishTifLocal(ReqDTO reqDTO, File tifFile) {
		if(!tifFile.exists()) {
			System.out.println("文件不存在");
			return;
		}
        boolean result = false;
        //获取管理器
        GeoServerRESTManager manager = getManager(reqDTO.getServerUrl(), reqDTO.getUserName()
                    , reqDTO.getPassWord());
        //判断工作空间是否存在
        boolean wsFlag = judgeWorkspace(manager, reqDTO.getWorkspaceName());
        if(!wsFlag ) {
        	System.out.println("工作空间创建失败");
        	return;
        }
        GeoServerRESTPublisher publisher = manager.getPublisher();
        GeoServerRESTReader reader = manager.getReader();
        //注册样式
        File styleFile = null;
        if (!StringUtilS.isEmpty(ReqDTO.getStyleFilePath())) {
                styleFile = new File(ReqDTO.getStyleFilePath());
	    if(!styleFile.exists()){
	    	System.out.println("样式文件不存在");
        	return;
        }
        boolean styleFlag = judgeStyleOrCreate(manager, reader, reqDTO.getStyleName(), styleFile , Boolean.TRUE);
        //若有样式,重新设置值
        if (styleFlag) {
              String styleName = reqDTO.getStyleName();
              if (StringUtils.isEmpty(styleName) && Objects.nonNull(styleFile)) {
                    String styleFileName = styleFile.getName();
                    styleName = styleFileName.substring(0, styleFileName.indexOf("."));
                    reqDTO.setStyleName(styleName);
                }
            }
            //判断图层
            RESTLayer layer = reader.getLayer(reqDTO.getWorkspaceName(), layerName);
            if (Objects.isNull(layer)) {
                String styleName = reqDTO.getStyleName();
                if (!styleFlag) {
                    //没有样式则使用默认样式
                    styleName = "test";
                }
                //获取tif的坐标系
                int srid = getSrid(tifFile);
                if (srid  == 0) {
                	System.out.println("没有坐标系");
        			return;
					}
                result = publisher.publishExternalGeoTIFF(reqDTO.getWorkspaceName(), layerName, tifFile, layerName, "EPSG:" + srid, GSResourceEncoder.ProjectionPolicy.FORCE_DECLARED,styleName);
            } else {
                System.out.println("tif已经发布过了");
            }
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值