geoserver 通过代码实现发布地图服务
转自原文 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即可。
geoserver 通过代码实现发布地图服务相关推荐
- GeoServer自动发布地图服务
1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器,提供了管理页面进行服务发布,样式,切片,图层预览等一系列操作,但是手动进行页面配置有时并不满足业务需求,所以GeoServer ...
- geoserver发布地图服务后不能预览,竟然变成下载WMS文件
geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...
- geoserver发布地图服务
geoserver发布地图服务 发布wmts服务 发布样式 发布映像服务 发布要素服务 发布wmts服务 新建工作空间 保存后点击工作区 将shp文件上传到服务器 发布geoserver 服务 选择数 ...
- Geoserver+QGIS发布地图服务
发布地图服务(geoserver+QGIS) geoserver发布地图服务 新建工作区:工作区-添加新的工作区-输入工作区名称(例如:test) 数据存储-添加新的数据存储-新建数据源(数据源有很多 ...
- Arcpy发布地图服务
工作需要研发一个大平台,需要有发布地图服务的功能. 之前做过一个平台,使用 GeoServer 发布地图服务,后台使用 Java+SpringBoot,前端使用 Vue+OpenLayers,平台整体 ...
- 通过Arcpy发布地图服务
1.发布地图服务的流程 使用 ArcPy 将地图文档自动发布到 GIS 服务器的流程分为四步: 第一步,运行 CreateMapSDDraft 函数.CreateMapSDDraft 的输出是服务定义 ...
- ArcGIS二次开发——Arcpy批量自动化发布地图服务
参考博客 补充:在发布地图服务前,首先需要连接到ArcGIS for Server服务器,需要利用到arcpy.mapping.CreateGISServerConnectionFile接口,,在Ar ...
- Geoserver2.15.0下载,安装与发布地图服务
1,geoserver下载:GeoServer 安装时需要提前准备好Java的jre,可参考:https://blog.csdn.net/qq_40323256/article/details/123 ...
- 利用 PortableBasemapServer 发布地图服务
前段时间需要给自己的C/S系统加一个地图,但是没有数据,于是就想到了使用网上的切片地图,但是C/S系统又不能联网,于是就想本地发布切片服务来使用. 本来想用ArcGIS Server来发布从网上下载的 ...
最新文章
- 瑞星杀毒软件所有监控已禁用!
- 记录webscraper的使用过程
- Paper:Xavier参数初始化之《Understanding the difficulty of training deep feedforward neural networks》的翻译与解读
- Notepad++如何编译、运行Java
- ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
- ssd1306 OLED 初始化流程
- 支付宝扫码支付完成后如何跳转跳转页面_支付宝支付页面广告(按效果付费,杜绝隐形消费),企业拓客好帮手...
- 蓝桥杯 ADV-194 算法提高 盾神与积木游戏 java版
- log4j日志设置error级别以上
- DM - Manager工具
- 电商数据分析基础指标体系
- 听说想当黑客的都玩过这个Monyer游戏
- activemq学习记录(二)(使用p2p模式和使用发布订阅模式去生产以及消费数据)
- 12306一直显示服务器忙,网购春运火车票首日 12306网站又现服务器忙
- PS for Mac 破解版下载
- TSV文件、CSV文件
- 电脑无法安装软件打不开计算机,电脑刚安装软件打不开怎么办
- Freeswitch 常用命令
- 仿泡团影视网源码 苹果cmsV8版本 电脑端+影视模块
- shell字符串截取掐头去尾操作