废话写在前面:
最近换了家公司从以前的CS端变成了数据处理,于是与geoserver 和MAPGIS这些服务器打交道,但是对geoserver 进行二开和拓展 菜J选择了后者于是接触到了RestApi 这个玩意,用的catalog但是写着写着就发现很多问题,尤其是发布的图层没法重命名的问题导致很多的不变。
from geoserver.catalog import Catalog
就这个库里面毛病用过的都知道一言难尽,菜J也是找了个把星期的平替,找到了这个库
from geo.Geoserver import Geoserver
双剑合并就解决了很多乱七八糟的问题
上代码:
创建工作空间
cat = Catalog(url, username, password)
geo = Geoserver(url, username, password)
cat.create_workspace(workname,workspaceurl)
创建数据存储
workspacename = cat.get_workspace(config["workspacename"])
datastore =cat.create_datastore(storename,workspacename)
发布样式
cat.create_style(name=style_name, data=style.read(), overwrite=True,workspace=workname)
def POSTGIScreate_datastorges(cat,workname,storename,layname,datastoreA,a,geo):
#发布POSTGIS数据
geo.publish_featurestore(store_name=storename,pg_table=a["tablename"],workspace=workname,title=layname,cqlfilter=a["CQL_filter"])
#图层改名
geo.edit_featuretype(store_name=storename,workspace=workname,pg_table=a["tablename"],name=layname,title=layname)
#样式插入
stylename = a["layerstylename"]
styleworkspace = a["layerstyleworkspace"]
style = cat.get_style(stylename,workspace = styleworkspace)
if style != None:
geo.publish_style(layer_name=layname, style_name=stylename, workspace=workname)
发布SHP
datastore =cat.create_featurestore(storename,data,workspacename)
#样式插入
stylename = i["layers"][0]["layerstylename"]
if stylename !="":
lay = cat.get_layer(storename)
style = cat.get_style(stylename,workspace = workname)
lay.default_style = style
cat.save(lay)
看代码就能知道geo主要用于修改图层名和获取某个样式因为cat 确实很多地方获取的逻辑有毛病cat和geo我是混着用的。
注意,最后提醒一点不论是geo 还是cat 这两个库的源码是可以修改的参数有毛病或者数据格式有毛病的都可以改,菜J也是一通乱改才能跑起来但是函数接口也就那么几个逻辑顺序和AE二次开发很接近都是 工作空间 数据集 要素 这么个顺序 有点变化的是SHP的发布是和存储绑在一起的这点要注意。更多的cat的例子看这里
Python catalog.Catalog类代码示例 - 纯净天空
写完之后再写上配套的配置文件config.json 就能一键发布服务了爽歪歪。