博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
geoserver 通过代码实现发布地图服务
阅读量:6625 次
发布时间:2019-06-25

本文共 3909 字,大约阅读时间需要 13 分钟。

转自原文 

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 geoservergeocat = Catalog(geourl)  # create a Catalog objectstore_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 geoservergeocat = Catalog(geourl)  # create a Catalog objectstore_name = "00N010E"data_url = "fiel:E:/RSImageService/data/images/00N010E.tif"geostore = geocat.create_coveragestore2(store_name)geostore.url = data_urlgeocat.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 " + name                if workspace:                    msg += " in " + str(workspace)                raise ConflictingDataError(msg)            except FailedRequestError:                # we don't really expect that every layer name will be taken                pass        if 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 geoservergeocat = Catalog(geourl)  # create a Catalog objectstore_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,如需转载请自行联系原作者
你可能感兴趣的文章
linux笔记1-1
查看>>
dubbo源码分析-负载均衡
查看>>
一统江湖的大前端(3) DOClever——你的postman有点low
查看>>
云栖大会上发布了哪些移动研发新利器?
查看>>
《黑客免杀攻防》读书笔记-软件逆向工程(6) switch-case分支
查看>>
day6作业--游戏人生完善
查看>>
金字塔思维
查看>>
strak组件(10):批量操作
查看>>
thinkphp空控制器的处理
查看>>
Mahout分步式程序开发 聚类Kmeans(转)
查看>>
修改linux最大文件句柄数
查看>>
接口幂等
查看>>
LibreOffice 打开中文乱码
查看>>
FromBottomToTop第十三周项目博客
查看>>
Activity的四种启动模式
查看>>
Centos vsftpd服务器搭建
查看>>
【常用工具】常用工具收集
查看>>
Tax
查看>>
网站页面多出&65279出现空白行的原因及解决方法
查看>>
第二阶段团队冲刺站立会议06
查看>>