前言

本文将两种自动发布写成了工具类,至于接口封装,如有需要可留言。

所需依赖如下:

<!--geoserver自动发布服务--><dependency><groupId>nl.pdok</groupId><artifactId>geoserver-manager</artifactId><version>1.7.0-pdok2</version></dependency><repositories><repository><id>GeoSolutions</id><url>http://maven.geo-solutions.it/</url></repository></repositories>

1.自动发布影像服务

代码如下(示例):

public class testpublicimage {public static void main(String[] args) throws Exception {String wsName="publictif";String layerPath="C:\\Users\\Administrator\\Desktop\\shuju\\result.tif";String layerCode="geotif";boolean publishImageLayer = publishImageLayer(wsName, layerPath, layerCode);System.out.println(publishImageLayer);}public static boolean publishImageLayer(String wsName, String layerPath, String layerCode) throws Exception {String gsImageUrl="http://localhost:8080/geoserver";String gsImageUser= "admin";String  gsImagePwd="geoserver";GeoServerRESTManager geoServerRESTManager = new GeoServerRESTManager(new URL(gsImageUrl), gsImageUser, gsImagePwd);GeoServerRESTPublisher geoServerRESTPublisher = geoServerRESTManager.getPublisher();GeoServerRESTReader geoServerRESTReader=geoServerRESTManager.getReader();// 判断workspace是否存在,不存在则创建List<String> workspaces = geoServerRESTReader.getWorkspaceNames();if (!workspaces.contains(wsName)) {boolean isCreateWs =geoServerRESTPublisher.createWorkspace(wsName);log.info("Create ws : {}" , isCreateWs);} else {log.info("Workspace already exist, workspace :{}" , wsName);}// String fileName = layerPath.split("/")[layerPath.split("/").length-1];
//        String storeName = fileName.substring(0, fileName.length()-4);String storeName = layerCode;
//        if("basemap".equals(layerCode)) {//            storeName = "raster_basemap";
//            // todo 判断raster_basemap是否存在,如果存在,则不发布。return true
//        }RESTDataStore restStore = geoServerRESTReader.getDatastore(wsName, storeName);if(restStore == null) {GSGeoTIFFDatastoreEncoder gtde = new GSGeoTIFFDatastoreEncoder(storeName);gtde.setWorkspaceName(wsName);gtde.setUrl(new URL("file:" + layerPath));boolean createStore = geoServerRESTManager.getStoreManager().create(wsName, gtde);log.info("Create store (TIFF文件创建状态) : " + createStore);}else {//            if("raster_basemap".equals(storeName)){//                // todo 图层组已存在返回true,否则重新发布
                raster_basemap已存在,返回true
//                return true;
//            }}boolean isPublished =geoServerRESTPublisher.publishGeoTIFF(wsName, storeName, new File(layerPath));log.info("publish (TIFF文件发布状态): " + isPublished);return isPublished;}}

2.自动发布PostGIS表

代码如下(示例):

public class testpublicpostgis {public static void main(String[] args) throws Exception {String wsName = "qwe4" ; //待创建和发布图层的workspace//String store_name = "lyf" ; //数据库连接要创建的storeString layerName = "henan_village" ; // 数据库要发布的表名称,后面图层名称和表名保持一致boolean publishPostGISLayer = publishPostGISLayer(wsName, layerName);if(publishPostGISLayer=false){System.out.println("此Publish layer已存在");}System.out.println(publishPostGISLayer);}public static boolean publishPostGISLayer(String wsName, String layerName) throws Exception {//geoserver连接配置String url = "http://localhost:8080/geoserver" ;String username = "admin" ;String passwd = "geoserver" ;//postgis连接配置String pgHost = "localhost" ;int pgPort = 5432;String pgUser = "postgres" ;String pgPwd = "111111" ;String pgSchema="public";String pgDatabase="Demo";
//        String ws = "lyf" ; //待创建和发布图层的workspace
//        String store_name = "lyf" ; //数据库连接要创建的store
//        String table_name = "xxx" ; // 数据库要发布的表名称,后面图层名称和表名保持一致Boolean isPublished=null;GeoServerRESTManager geoServerRESTManager = new GeoServerRESTManager(new URL(url), username, passwd);GeoServerRESTPublisher geoServerRESTPublisher = geoServerRESTManager.getPublisher();GeoServerRESTReader geoServerRESTReader=geoServerRESTManager.getReader();//判断workspace是否存在,不存在则创建//创建一个workspaceList<String> workspaces = geoServerRESTReader.getWorkspaceNames();if(!workspaces.contains( wsName)){boolean createws = geoServerRESTPublisher.createWorkspace( wsName);System.out.println("create ws : " + createws);}else {System.out.println("workspace已经存在了,ws :" +  wsName);}// 判断数据存储(datastore)是否已经存在,不存在则创建String storeName = wsName + "_pg2";RESTDataStore restStore =geoServerRESTReader.getDatastore(wsName, storeName);if (restStore == null) {GSPostGISDatastoreEncoder store = new GSPostGISDatastoreEncoder(storeName);store.setHost(pgHost);store.setPort(pgPort);store.setUser(pgUser);store.setPassword(pgPwd);store.setDatabase(pgDatabase);store.setSchema(pgSchema);store.setConnectionTimeout(300);store.setMaxConnections(20);store.setMinConnections(1);store.setExposePrimaryKeys(true);boolean isCreateStore = geoServerRESTManager.getStoreManager().create(wsName,store);System.out.println("Create store : " + isCreateStore);} else {log.info("DataStore already exist, store:" + storeName);}RESTLayer layer = geoServerRESTReader.getLayer(wsName, layerName);// 若图层已存在,则不发布if (layer == null) {// publisher.removeLayer(wsName, layerName);geoServerRESTPublisher.unpublishFeatureType(wsName, storeName, layerName);}GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();fte.setTitle(layerName);fte.setName(layerName);fte.setSRS("EPSG:4326");GSLayerEncoder layerEncoder = new GSLayerEncoder();// layerEncoder.setDefaultStyle(layerName); // 样式和图层名字相同isPublished = geoServerRESTPublisher.publishDBLayer(wsName, storeName, fte, layerEncoder);log.info("Publish layer: " + isPublished);System.out.println("Publish layer: " + isPublished);return isPublished;}}

注意

依赖必须为此版本

        <dependency><groupId>nl.pdok</groupId><artifactId>geoserver-manager</artifactId><version>1.7.0-pdok2</version></dependency>

不然import it.geosolutions.geoserver.rest.encoder.datastore.GSGeoTIFFDatastoreEncoder;失败。我试过别的版本,显示没有GSGeoTIFFDatastoreEncoder。

使用java+geoserver自动发布影像服务和postgis表,超简洁,一目了然。相关推荐

  1. GeoServer自动发布地图服务

    1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器,提供了管理页面进行服务发布,样式,切片,图层预览等一系列操作,但是手动进行页面配置有时并不满足业务需求,所以GeoServer ...

  2. 在QGIS 3.10中访问Geoserver中发布的服务

    在QGIS 3.10中访问Geoserver中发布的服务 1 新建 WMS 连接 geoserver的发布教程有很多就不再说,建立在geoserver已经发布的前提. 本次在QGIS中查看的是webg ...

  3. Docker+Tomcat+geoserver+shp发布地图服务

    场景 CentOS7中Docker的安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119028701 CentOS中 ...

  4. Jenkins+Gitlab+Nginx+SonarQube+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)

    环境拓扑:  Jenkins -192.168.1.30  Gitlab -192.168.1.31  LB -192.168.1.32  Web1 -192.168.1.33  Web2 -192. ...

  5. Jenkins+Gitlab+Nginx+Maven编译Java项目自动发布与基于tag版本回退(重复构建问题已解决)

    实现流程: 手动部署Java项目至后端Web集群 1.搭建Nginx+Tomcat集群架构. 2.开发提交Java源代码至Gitlab仓库. 3.手动获取Java源代码,然后使用Maven进行编译. ...

  6. Geoserver+QGIS发布地图服务

    发布地图服务(geoserver+QGIS) geoserver发布地图服务 新建工作区:工作区-添加新的工作区-输入工作区名称(例如:test) 数据存储-添加新的数据存储-新建数据源(数据源有很多 ...

  7. arcgis发布影像服务

    1.    数据所在文件夹进行共享设置和权限设置. 2.    要发布的服务的读取路径要写共享位置里面的路径. 3.    确定服务器的路径. 4.    在GIS里使用共享地址导入数据,发布服务. ...

  8. java发布WCS服务到GeoServer服务器并解析XML生成可下载的WCS服务数据url(2022.2.14)

    GeoServer上的WCS服务发布调用及解析生成可下载为Tif的WCSUrl 2022.2.14 所用软件环境(Java.Tomcat.GeoServer.Google Browser.Eclips ...

  9. 在Window上使用Jenkins自动发布Java工件

    这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序(使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 ...

最新文章

  1. @MySQL为表字段添加索引
  2. python自动答题软件_广东开放大学(广开)线上作业自动答题python-selenium
  3. boa服务器实现温湿度显示,SMT车间温湿度分布式远程监控系统的设计
  4. ipsec_profile
  5. leetcode - 70. 爬楼梯
  6. 私有镜像仓库的部署与使用方法
  7. STM8单片机定时器1编码器功能使用详解
  8. Reporting Services 2016中不推荐使用的5大功能
  9. java 实现根据ip重定向_从0到1用java再造tcpip协议栈:代码实现ping应用功能1
  10. C# async/await异步编程深入理解
  11. C语言有好多7,[c语言]有1到100个数,现在从中提取7、和个位或十位上有7的数、以及7的倍数,然后输出。...
  12. 调整数组顺序使奇数位于偶数前面(剑指offer)
  13. 【SSH进阶】java.lang.IllegalArgumentException: id to load is required for loading
  14. listView/GridView getChild获取不到的解决方法
  15. ES6与ES2015、ES2016以及ECMAScript的区别
  16. 随机密码生成器 java
  17. np.isfinite_带有Python示例的math.isfinite()方法
  18. 简化3D渲染和动画制作丨上海道宁为您带来强大的3D渲染软件——KeyShot
  19. 通过netsh一键连接指定WIFI
  20. java使用ini4j读写和修改ini配置文件(支持section)

热门文章

  1. pycharm指定python路径
  2. java-php-net-python-房产交易资金管理系统计算机毕业设计程序
  3. 14天阅读挑战赛(神奇的兔子数列)
  4. 判断一个数组是否是稀松数组
  5. ES7~ES13那些事儿
  6. 怎么查看网页中的密码
  7. 嵌入式工控机使用注意事项?
  8. 桌面式虹膜识别仪P1/P10,万级虹膜库检索,即插即用,支持电脑、手机、Pad
  9. 2012年下半年系统集成项目管理师上午试题解析及答案(3)
  10. 用AkShare获取沪深可转债分时数据