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
| 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_PORT': '8080', 'USERNAME': 'admin', 'PASSWORD': '******', '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)
|