首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GeoServer REST API -当通过PUT请求创建一个层时,我如何指定一个不同于我的文件名的层名称?

GeoServer REST API -当通过PUT请求创建一个层时,我如何指定一个不同于我的文件名的层名称?
EN

Stack Overflow用户
提问于 2018-08-17 06:19:53
回答 2查看 1.3K关注 0票数 2

我正在尝试创建一个Python脚本,它可以从挂载到GeoServer数据目录的数据创建GeoServer层。到目前为止,我的脚本如下所示:

代码语言:javascript
复制
import requests


resource_id = "e477fb5b4d5748b9aabb617475e47b01"
url = "http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/" + resource_id + "/external.shp"
data = "file:///data_vault/" + resource_id + "/data/myshapefile.shp"
auth = ("admin", "geoserver")

response = requests.put(url, data=data, auth=auth)

此脚本将在名为"testws“的工作区中成功创建一个名为"myshapefile”的层和一个名为"e477fb5b4d5748b9aabb617475e47b01“的存储区。

问题是我将创建大量的层,所以我需要层的名称是资源id,而不是文件的名称,并且我不能重命名数据目录中的文件。根据我的理解,在使用REST API创建层之后不能对其进行重命名,因此我需要能够在初始PUT请求中指定层的名称。有没有办法通过API做到这一点?

我在这个过程中使用的文档在这里:http://docs.geoserver.org/stable/en/user/rest/api/datastores.html#rest-api-datastores-extension

EN

回答 2

Stack Overflow用户

发布于 2018-09-24 22:58:30

您正在使用的请求将创建数据存储并自动配置要素类型。AFAIK创建要素类型时,不能控制其名称。在请求中,您可以指定此时不配置特性类型,并将参数configure设置为none

第二步是使用/workspaces/<ws>/datastores/<ds>/featuretypes URL (参见:http://docs.geoserver.org/stable/en/user/rest/api/featuretypes.html)从数据创建新的要素类型。在这里,您希望设置name参数,但还需要指定nativeName,以便让Geoserver知道要使用哪个功能。在你的例子中,nativeName应该是"myshapefile“。我没有找到与此相关的文档,但经过一些试验和错误之后,它起作用了(也请参阅此链接以获得有关如何使用REST API的一般建议:https://gis.stackexchange.com/questions/12970/create-a-layer-in-geoserver-using-rest -基本思想是浏览http://your-server/geoserver/rest并找到您的要素类型,获取XML表示形式以查看哪些参数可以通过POST请求进行更改)。

最后的代码:

代码语言:javascript
复制
import requests

resource_id = "e477fb5b4d5748b9aabb617475e47b01"
url = "http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/" + resource_id + "/external.shp?configure=none"
data = "file:///xxx/myshapefile.shp"
auth = ("admin", "geoserver")    
response = requests.put(url, data=data, auth=auth)

url = "http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/" + resource_id + "/featuretypes"
data = "<featureType><name>" + resource_id + "</name><nativeName>myshapefile</nativeName></featureType>"
headers = {'Content-type': 'text/xml'}
response = requests.post(url, data=data, auth=auth, headers=headers)
票数 3
EN

Stack Overflow用户

发布于 2020-11-18 01:15:10

您可以尝试使用geoserver-rest(pip install geoserver-rest)库。您可以简单地传递overwrite=True

代码语言:javascript
复制
#import and initialize library
from geo.Geoserver import Geoserver
geo = Geoserver('http://localhost:8080/geoserver', username='admin', password='geoserver')

# upload raster file
geo.create_coveragestore(lyr_name='layer1' path=r'path\to\raster\file.tif', workspace='demo', overwrite=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51886054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档