通过R的Geoserver REST API

地理服务器徽标

嘿,

我回来了‘summer hibernation’与有关的教程 Geoserver REST API。如果您想一次将大量数据上传到您的地理服务器中,则此API非常有用。当然,您可以使用Geoserver UI,但这一次只能添加一层。 REST API在这里发挥作用:

GeoServer的图形管理工具为 管理数据 作为工作空间,商店,图层和样式,但一次只能处理一个。如果您有大量数据需要重新上传到GeoServer或从其他供应商的现有实现中迁移,那么一次就不会削减数据。

(从 boundless.com)

这是一个有关如何添加名为“myworkingdir”从终端/外壳使用REST API以编程方式添加到您的Geoserver:

> curl -u admin:geoserver -v -XPOST -H 'Content-type:text/xml' 
> -d 'myworkingdir' 
> http://localhost:8080/geoserver/rest/workspaces

将其包装在R中

我喜欢使用R来处理空间数据。在软件和不同窗口之间切换通常很麻烦,并且会减慢工作流程…因此,我自己想,如果我可以将图层上传到geoserver,直接从R内部创建工作区和数据存储,那就太好了。结果是四个非常简单的R函数,它们使您可以处理R内部的基本geoserver任务形式:

  • 添加新的工作空间:createWorkspace()
  • 添加新的数据存储:createDatastore()
  • 添加新层:createLayer()
  • 套用样式:applyStyle()

您可以从我的网站下载所有功能 github仓库.

代码的工作方式如下:首先,我们需要指定一些参数:用户名,密码,您的geoserver的网址等…

#Specify parameters
user           <- "admin" #username
password       <- "地理服务器" #password 
geoserver.url  <- "http://localhost:8080/geoserver/" #url to 地理服务器 (http://<your.geoserver.url>:<port>/geoserver/)
workspace.name <- "myworkspace" #workspace where Tifs are going to be uploaded

img.path       <- "/Users/martin/Downloads/img.tif" #tif file path
img.name       <- sub(".tif", "", basename(img.path)) #tif name

例如,如果我们想在R内创建一个新的数据存储表单,则该函数的外观如下。只需在上方插入您的参数并运行以下代码即可。瞧,新的数据存储已添加到您的地理服务器。

创建数据存储功能

#Function definition
createDatastore <- function(user, password, workspace.name, img.path, img.name, 地理服务器.url) {
  system(paste('curl -v -u ', user,':',password, ' -XPOST -H "Content-type: text/xml" ',
               '-d "<coverageStore><name>',img.name,'</name>',
               '<workspace>',workspace.name,'</workspace>',
               '<enabled>true</enabled>',
               '<type>GeoTIFF</type>',
               '<url>',img.path,'</url></coverageStore>" ', 
               '"', 地理服务器.url,'rest/workspaces/',workspace.name,'/coveragestores?configure=all"',
               sep=""))
}

#Execute function
createDatastore(user           = user,
                password       = password,
                workspace.name = workspace.name,
                img.path       = img.path,
                img.name       = img.name,
                地理服务器.url  = 地理服务器.url
                )

我希望这对某些人有用。如有任何疑问,请在下面给我留言。

干杯

马丁

关于作者

马丁出生于捷克共和国,就读于维也纳自然资源与生命科学大学。他目前在GeoVille(一家位于奥地利的地球观测公司)工作,专门从事土地监测。他的主要兴趣是:开源应用程序,例如R,(地理空间)统计和数据管理,Web映射和可视化。他喜欢旅行,寻宝,摄影和运动。

1条评论

您可以在这篇文章中发表评论。


  • 你好
    您能帮我在Geoserver中上传多个图层(tif文件)吗?

    哈里希南公司 10个月前 回复


发表回复

*