我正在尝试创建一个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,而不是文件的名称,并且我不能重命名数据目录中的文件。根据我的理解,在使用REST API创建层之后不能对其进行重命名,因此我需要能够在初始PUT请求中指定层的名称。有没有办法通过API做到这一点?
我在这个过程中使用的文档在这里:http://docs.geoserver.org/stable/en/user/rest/api/datastores.html#rest-api-datastores-extension
发布于 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请求进行更改)。
最后的代码:
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)发布于 2020-11-18 01:15:10
您可以尝试使用geoserver-rest(pip install geoserver-rest)库。您可以简单地传递overwrite=True,
#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)https://stackoverflow.com/questions/51886054
复制相似问题