Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GeoServer REST API-通过PUT请求创建图层时,如何指定与文件名不同的图层名?_Python_Rest_Put_Geoserver - Fatal编程技术网

Python GeoServer REST API-通过PUT请求创建图层时,如何指定与文件名不同的图层名?

Python GeoServer REST API-通过PUT请求创建图层时,如何指定与文件名不同的图层名?,python,rest,put,geoserver,Python,Rest,Put,Geoserver,我正在尝试制作一个Python脚本,该脚本可以从装载到GeoServer数据目录的数据创建GeoServer层。到目前为止,我的脚本如下所示: import requests resource_id = "e477fb5b4d5748b9aabb617475e47b01" url = "http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/" + resource_id + "/external.shp" data

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

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,而不是文件名,并且我将无法重命名数据目录中的文件。我的理解是,在使用RESTAPI创建层之后,我无法重命名层,因此我需要能够在初始PUT请求中指定层的名称。有没有办法通过API做到这一点


我在此过程中使用的文档如下:

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

第二步是使用
/workspace//datastores//featuretypes
URL(请参见:)从数据创建新的要素类型。在这里,您需要设置
name
参数,但还需要指定
nativeName
,以便让Geoserver知道要使用哪种功能
nativeName
在您的案例中应该是“myshapefile”。我没有找到关于这方面的文档,但经过一点尝试和错误之后,它工作了(也请参阅此链接,以获得如何使用RESTAPI的一般建议:-基本思想是浏览
http://your-server/geoserver/rest
并找到您的要素类型,获取XML表示,查看哪些参数可以随POST请求更改)

最终代码:

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)
导入请求
资源_id=“e477fb5b4d5748b9aabb617475e47b01”
url=”http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/“+resource_id+”/external.shp?configure=none”
数据=”file:///xxx/myshapefile.shp"
auth=(“管理员”、“地理服务器”)
response=requests.put(url,data=data,auth=auth)
url=”http://127.0.0.1:8181/geoserver/rest/workspaces/testws/datastores/“+资源\u id+”/featuretypes”
data=“”+资源\u id+“myshapefile”
标题={'Content-type':'text/xml'}
response=requests.post(url,data=data,auth=auth,headers=headers)
您可以尝试(
pip安装geoserver rest
)库。只需传递
overwrite=True


#导入并初始化库
从geo.Geoserver导入Geoserver
geo=Geoserver('http://localhost:8080/geoserver“,用户名='admin',密码='geoserver')
#上传光栅文件
geo.create\u coveragestore(lyr\u name='layer1'path=r'path\to\raster\file.tif',workspace='demo',overwrite=True)

当我这样做时,它会工作,但会创建一个新层,而不是更新现有层名。。。我不知道我做错了什么。。