转自原文 geoserver 通过代码实现发布地图服务

GeoServer:代码实现批量发布地图服务

利用GeoServer发布WCS服务,那么如果我有很多数据需要进行发布,这样利用GeoServer提供的UI界面进行操作显然很不显示。那能不能利用GeoServer提供的API进行操作呢?

GeoServer提供了REST API方便我们利用代码进行操作。用户手册中提供了如下语言或方法进行操作:cURL,PHP,Python,Java和Ruby。

一、Java方式的尝试

我先使用了Java语言的geoserver manager。在Eclipse新建一个Maven工程,添加相应的依赖包,下面是一个读出数据的例子

public static boolean read(){String restUrl = "http://localhost/geoserver";String username = "admin";String password = "geoserver";GeoServerRESTReader reader;try {reader = new GeoServerRESTReader(restUrl, username, password);} catch (MalformedURLException e) {e.printStackTrace();return false;}String workspace = "whu.images";String store = "00N006E";String name = "00N006E";RESTCoverage coverage = reader.getCoverage(workspace, store, name);System.out.println(coverage.getAbstract());return true;
}

但是我在写入栅格数据的时候出现了一些问题,如下是数据存储的类继承关系: 
 
我们可以看到Coverage Store没有实现类,GSAbstractCoveragestoreEncoder是一个抽象类,而且是被标注@Deprecated的,所以我不知道怎么新建Coverage Store,本来想自己写一个实现类,最终还是放弃了。

二、Python方式

后来才用的Python解决了问题,但是也不是一帆风顺的。 
首先安装gsconfig包,如果不知道如何安装,参考Python模块常用的几种安装方式 。 
安装完以后,代码如下: 
如下,采用默认的用户名,密码,默认的工作空间,所以函数的参数很少,如果你要自定义这些,详细查看函数的说明。

from geoserver.catalog import Cataloggeourl = "http://localhost/geoserver/rest"  # the url of geoserver
geocat = Catalog(geourl)  # create a Catalog object

store_name = "00N010E"
data = "E:/RSImageService/data/images/00N010E.tif"
geocat.create_coveragestore(store_name, data)

但是上面使用create_coveragestore有一个问题,即会将你的文件默认拷贝到你的Data Directory中,如果你数据很多,这样你就会有两份数据了,极大的浪费了磁盘空间。

后来发现Catalog类有提供一个create_coveragestore2的方法,可以创建一个UnSavedCoveragestore,数据不会上传。

from geoserver.catalog import Cataloggeourl = "http://localhost/geoserver/rest"  # the url of geoserver
geocat = Catalog(geourl)  # create a Catalog object

store_name = "00N010E"
data_url = "fiel:E:/RSImageService/data/images/00N010E.tif"
geostore = geocat.create_coveragestore2(store_name)
geostore.url = data_url
geocat.save(geostore)

但是程序一运行就回返回一个服务器内部错误505,Error code (505) from geoserver:: data store must be part of a workspace.

最后自己写了一个方法用于发布GeoTIFF影像(从GitHub上看到的一段代码,运行有点问题,然后自己修改了下)。给Catalog类添加一个create_coveragestore3方法,用户发布栅格数据,同时不复制数据。这需要修改gsconfig源代码,然后重新编译下。 
create_coveragestore3方法如下:

def create_coveragestore3(self, name, data_url, workspace=None, overwrite=False):if not overwrite:try:store = self.get_store(name, workspace)msg = "There is already a store named " + nameif workspace:msg += " in " + str(workspace)raise ConflictingDataError(msg)except FailedRequestError:# we don't really expect that every layer name will be takenpassif workspace is None:workspace = self.get_default_workspace()headers = {"Content-type": "text/plain","Accept": "application/xml"}ext = "geotiff"cs_url = url(self.service_url,["workspaces", workspace.name, "coveragestores", name, "external." + ext],{ "configure" : "first", "coverageName" : name})headers, response = self.http.request(cs_url, "PUT", data_url, headers)self._cache.clear()if headers.status != 201:raise UploadError(response)

最后的客户端调用代码:

from geoserver.catalog import Cataloggeourl = "http://localhost/geoserver/rest"  # the url of geoserver
geocat = Catalog(geourl)  # create a Catalog object

store_name = "00N010E"
data_url = "file:E:/RSImageService/data/images/00N010E.tif"
geocat.create_coveragestore3(store_name, data_url)

如果你要发布很多数据,遍历文件夹调用create_coveragestore3即可。

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。

本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/8081669.html,如需转载请自行联系原作者

geoserver 通过代码实现发布地图服务相关推荐

  1. GeoServer自动发布地图服务

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

  2. geoserver发布地图服务后不能预览,竟然变成下载WMS文件

    geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...

  3. geoserver发布地图服务

    geoserver发布地图服务 发布wmts服务 发布样式 发布映像服务 发布要素服务 发布wmts服务 新建工作空间 保存后点击工作区 将shp文件上传到服务器 发布geoserver 服务 选择数 ...

  4. Geoserver+QGIS发布地图服务

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

  5. Arcpy发布地图服务

    工作需要研发一个大平台,需要有发布地图服务的功能. 之前做过一个平台,使用 GeoServer 发布地图服务,后台使用 Java+SpringBoot,前端使用 Vue+OpenLayers,平台整体 ...

  6. 通过Arcpy发布地图服务

    1.发布地图服务的流程 使用 ArcPy 将地图文档自动发布到 GIS 服务器的流程分为四步: 第一步,运行 CreateMapSDDraft 函数.CreateMapSDDraft 的输出是服务定义 ...

  7. ArcGIS二次开发——Arcpy批量自动化发布地图服务

    参考博客 补充:在发布地图服务前,首先需要连接到ArcGIS for Server服务器,需要利用到arcpy.mapping.CreateGISServerConnectionFile接口,,在Ar ...

  8. Geoserver2.15.0下载,安装与发布地图服务

    1,geoserver下载:GeoServer 安装时需要提前准备好Java的jre,可参考:https://blog.csdn.net/qq_40323256/article/details/123 ...

  9. 利用 PortableBasemapServer 发布地图服务

    前段时间需要给自己的C/S系统加一个地图,但是没有数据,于是就想到了使用网上的切片地图,但是C/S系统又不能联网,于是就想本地发布切片服务来使用. 本来想用ArcGIS Server来发布从网上下载的 ...

最新文章

  1. 瑞星杀毒软件所有监控已禁用!
  2. 记录webscraper的使用过程
  3. Paper:Xavier参数初始化之《Understanding the difficulty of training deep feedforward neural networks》的翻译与解读
  4. Notepad++如何编译、运行Java
  5. ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
  6. ssd1306 OLED 初始化流程
  7. 支付宝扫码支付完成后如何跳转跳转页面_支付宝支付页面广告(按效果付费,杜绝隐形消费),企业拓客好帮手...
  8. 蓝桥杯 ADV-194 算法提高 盾神与积木游戏 java版
  9. log4j日志设置error级别以上
  10. DM - Manager工具
  11. 电商数据分析基础指标体系
  12. 听说想当黑客的都玩过这个Monyer游戏
  13. activemq学习记录(二)(使用p2p模式和使用发布订阅模式去生产以及消费数据)
  14. 12306一直显示服务器忙,网购春运火车票首日 12306网站又现服务器忙
  15. PS for Mac 破解版下载
  16. TSV文件、CSV文件
  17. 电脑无法安装软件打不开计算机,电脑刚安装软件打不开怎么办
  18. Freeswitch 常用命令
  19. 仿泡团影视网源码 苹果cmsV8版本 电脑端+影视模块
  20. shell字符串截取掐头去尾操作

热门文章

  1. 一文了解卷积神经网络基础,建议收藏
  2. 大开眼界!AI在医疗和汽车行业的11个有趣应用
  3. AI 商用落地为什么比互联网更难?
  4. 深度学习论文阅读路线图
  5. SAP质量管理模块常见问题及解决方案
  6. 干货|全面理解无监督学习基础知识
  7. SAP MM ME1M报表结果真的不科学?
  8. 哪些人工智能公司有望上科创?(一)
  9. SAP MM Return Purchase Order之使用
  10. 物理学家发现粒子是如何自我组装的