geoserver自动发布服务

python安装gsconfig库
附上python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# _*_coding:utf-8_*_
from geoserver.catalog import Catalog
from geoserver.support import JDBCVirtualTable, JDBCVirtualTableGeometry, JDBCVirtualTableParam

# 地图发布环境
ENVIRONMENT_PUBLISH = 'XXX_local'

# 城市名称
CITY = 'xixian'

# 年
YEAR = 2020

# 月
MONTH = 5

CONFIGURE = {
'XXX_local': {
'CITY': CITY,
'GEOSERVER_HOST': '1.1.1.1', # geoserver地址
'GEOSERVER_PORT': '8080', # geoserver端口
'USERNAME': 'admin', # geoserver用户名
'PASSWORD': '******', # geoserver密码
'DATABASE_MYSQL': 'mysql'
}
}

cat = Catalog('http://%s:%s/geoserver/rest/' % (
CONFIGURE[ENVIRONMENT_PUBLISH]['GEOSERVER_HOST'], CONFIGURE[ENVIRONMENT_PUBLISH]['GEOSERVER_PORT']),
CONFIGURE[ENVIRONMENT_PUBLISH]['USERNAME'], CONFIGURE[ENVIRONMENT_PUBLISH]['PASSWORD'])
store = cat.get_store(CONFIGURE[ENVIRONMENT_PUBLISH]['DATABASE_MYSQL'], CITY)
geom = JDBCVirtualTableGeometry('geom', 'LineString', '4326')
ft_name = 'line_speed_day_%s_%s' % (YEAR, MONTH)
epsg_code = 'EPSG:4326'
sql = '''SELECT a.line_id line_id,a.line_direction line_direction,AVG(line_speed) line_speed,b.shape geom FROM (SELECT * FROM data_line_speed_day WHERE line_year =%s AND line_month=%s) a LEFT JOIN (SELECT DISTINCT line_id,is_up,shape FROM line
WHERE YEAR =%s AND MONTH=%s) b ON a.line_id= b.line_id AND a.line_direction=b.is_up and b.shape is not null GROUP BY line_id,line_direction''' % (
YEAR, MONTH, YEAR, MONTH)
print sql
keyColumn = None
parameters = None

jdbc_vt = JDBCVirtualTable(ft_name, sql, 'false', geom, keyColumn, parameters)
ft = cat.publish_featuretype(ft_name, store, epsg_code, jdbc_virtual_table=jdbc_vt)
layer = cat.get_layer(ft_name)
layer.default_style = cat.get_style('stylefile')
cat.save(layer)