Add SQL and default value support for layers
This commit is contained in:
parent
480d720585
commit
4292f5ed91
45
omtgen.py
45
omtgen.py
@ -2,6 +2,7 @@
|
|||||||
"""
|
"""
|
||||||
Usage:
|
Usage:
|
||||||
omtgen tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>]
|
omtgen tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>]
|
||||||
|
omtgen dump-sql <tileset>
|
||||||
omtgen --help
|
omtgen --help
|
||||||
omtgen --version
|
omtgen --version
|
||||||
Options:
|
Options:
|
||||||
@ -13,6 +14,7 @@ Options:
|
|||||||
--user=<user> PostGIS user.
|
--user=<user> PostGIS user.
|
||||||
--password=<pw> PostGIS password.
|
--password=<pw> PostGIS password.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
import yaml
|
import yaml
|
||||||
import collections
|
import collections
|
||||||
@ -22,17 +24,17 @@ DbParams = collections.namedtuple('DbParams', ['dbname', 'host', 'port',
|
|||||||
'password', 'user'])
|
'password', 'user'])
|
||||||
|
|
||||||
|
|
||||||
def generate_layer(layer_def, db_params):
|
def generate_layer(layer_def, layer_defaults, db_params):
|
||||||
layer = layer_def['layer']
|
layer = layer_def['layer']
|
||||||
datasource = layer['datasource']
|
datasource = layer['datasource']
|
||||||
tm2layer = {
|
tm2layer = {
|
||||||
'id': layer['id'],
|
'id': layer['id'],
|
||||||
'description': layer['description'],
|
'description': layer['description'],
|
||||||
'srs': layer['srs'],
|
'srs': layer.get('srs', layer_defaults['srs']),
|
||||||
'properties': {
|
'properties': {
|
||||||
'buffer-size': layer['buffer_size']
|
'buffer-size': layer['buffer_size']
|
||||||
},
|
},
|
||||||
'fields': layer['fields'],
|
'fields': layer.get('fields', []),
|
||||||
'Datasource': {
|
'Datasource': {
|
||||||
'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
|
'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
|
||||||
'geometry_field': datasource.get('geometry_field', 'geom'),
|
'geometry_field': datasource.get('geometry_field', 'geom'),
|
||||||
@ -40,7 +42,7 @@ def generate_layer(layer_def, db_params):
|
|||||||
'key_field_as_attribute': datasource.get('key_field_as_attribute', ''),
|
'key_field_as_attribute': datasource.get('key_field_as_attribute', ''),
|
||||||
'max_size': datasource.get('max_size', 512),
|
'max_size': datasource.get('max_size', 512),
|
||||||
'port': db_params.port,
|
'port': db_params.port,
|
||||||
'srid': datasource['srid'],
|
'srid': datasource.get('srid', layer_defaults['datasource']['srid']),
|
||||||
'table': datasource['query'],
|
'table': datasource['query'],
|
||||||
'type': 'postgis',
|
'type': 'postgis',
|
||||||
'host': db_params.host,
|
'host': db_params.host,
|
||||||
@ -52,15 +54,37 @@ def generate_layer(layer_def, db_params):
|
|||||||
return tm2layer
|
return tm2layer
|
||||||
|
|
||||||
|
|
||||||
def generate_tm2source(tileset_filename, db_params):
|
def parse_tileset(filename):
|
||||||
with open(tileset_filename, 'r') as stream:
|
with open(filename, 'r') as stream:
|
||||||
try:
|
try:
|
||||||
tileset = yaml.load(stream)['tileset']
|
return yaml.load(stream)['tileset']
|
||||||
except yaml.YAMLError as e:
|
except yaml.YAMLError as e:
|
||||||
print('Could not parse ' + tileset_filename)
|
print('Could not parse ' + filename)
|
||||||
print(e)
|
print(e)
|
||||||
sys.exit(403)
|
sys.exit(403)
|
||||||
|
|
||||||
|
|
||||||
|
def collect_sql(tileset_filename):
|
||||||
|
tileset = parse_tileset(tileset_filename)
|
||||||
|
print(tileset)
|
||||||
|
sql = ''
|
||||||
|
for layer_filename in tileset['layers']:
|
||||||
|
with open(layer_filename, 'r') as stream:
|
||||||
|
try:
|
||||||
|
layer_def = yaml.load(stream)
|
||||||
|
for sql_filename in layer_def['schema']:
|
||||||
|
with open(os.path.join(os.path.dirname(layer_filename), sql_filename), 'r') as stream:
|
||||||
|
sql += stream.read()
|
||||||
|
except yaml.YAMLError as e:
|
||||||
|
print('Could not parse ' + layer_filename)
|
||||||
|
print(e)
|
||||||
|
sys.exit(403)
|
||||||
|
return sql
|
||||||
|
|
||||||
|
|
||||||
|
def generate_tm2source(tileset_filename, db_params):
|
||||||
|
tileset = parse_tileset(tileset_filename)
|
||||||
|
layer_defaults = tileset['defaults']
|
||||||
tm2 = {
|
tm2 = {
|
||||||
'attribution': tileset['attribution'],
|
'attribution': tileset['attribution'],
|
||||||
'center': tileset['center'],
|
'center': tileset['center'],
|
||||||
@ -75,7 +99,7 @@ def generate_tm2source(tileset_filename, db_params):
|
|||||||
with open(layer_filename, 'r') as stream:
|
with open(layer_filename, 'r') as stream:
|
||||||
try:
|
try:
|
||||||
layer_def = yaml.load(stream)
|
layer_def = yaml.load(stream)
|
||||||
tm2layer = generate_layer(layer_def, db_params)
|
tm2layer = generate_layer(layer_def, layer_defaults, db_params)
|
||||||
tm2['Layer'].append(tm2layer)
|
tm2['Layer'].append(tm2layer)
|
||||||
except yaml.YAMLError as e:
|
except yaml.YAMLError as e:
|
||||||
print('Could not parse ' + layer_filename)
|
print('Could not parse ' + layer_filename)
|
||||||
@ -96,3 +120,6 @@ if __name__ == '__main__':
|
|||||||
)
|
)
|
||||||
tm2 = generate_tm2source(args['<tileset>'], db_params)
|
tm2 = generate_tm2source(args['<tileset>'], db_params)
|
||||||
print(yaml.dump(tm2))
|
print(yaml.dump(tm2))
|
||||||
|
if args.get('dump-sql'):
|
||||||
|
sql = collect_sql(args['<tileset>'])
|
||||||
|
print(sql)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user