kopia lustrzana https://github.com/openmaptiles/openmaptiles
				
				
				
			Add SQL and default value support for layers
							rodzic
							
								
									480d720585
								
							
						
					
					
						commit
						4292f5ed91
					
				
							
								
								
									
										45
									
								
								omtgen.py
								
								
								
								
							
							
						
						
									
										45
									
								
								omtgen.py
								
								
								
								
							| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
"""
 | 
			
		||||
Usage:
 | 
			
		||||
  omtgen tm2source <tileset> [--host=<host>] [--port=<port>] [--database=<dbname>] [--user=<user>] [--password=<pw>]
 | 
			
		||||
  omtgen dump-sql <tileset>
 | 
			
		||||
  omtgen --help
 | 
			
		||||
  omtgen --version
 | 
			
		||||
Options:
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@ Options:
 | 
			
		|||
  --user=<user>       PostGIS user.
 | 
			
		||||
  --password=<pw>     PostGIS password.
 | 
			
		||||
"""
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
import yaml
 | 
			
		||||
import collections
 | 
			
		||||
| 
						 | 
				
			
			@ -22,17 +24,17 @@ DbParams = collections.namedtuple('DbParams', ['dbname', 'host', 'port',
 | 
			
		|||
                                               'password', 'user'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate_layer(layer_def, db_params):
 | 
			
		||||
def generate_layer(layer_def, layer_defaults, db_params):
 | 
			
		||||
    layer = layer_def['layer']
 | 
			
		||||
    datasource = layer['datasource']
 | 
			
		||||
    tm2layer = {
 | 
			
		||||
        'id': layer['id'],
 | 
			
		||||
        'description': layer['description'],
 | 
			
		||||
        'srs': layer['srs'],
 | 
			
		||||
        'srs': layer.get('srs', layer_defaults['srs']),
 | 
			
		||||
        'properties': {
 | 
			
		||||
            'buffer-size': layer['buffer_size']
 | 
			
		||||
        },
 | 
			
		||||
        'fields': layer['fields'],
 | 
			
		||||
        'fields': layer.get('fields', []),
 | 
			
		||||
        'Datasource': {
 | 
			
		||||
          'extent': [-20037508.34, -20037508.34, 20037508.34, 20037508.34],
 | 
			
		||||
          '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', ''),
 | 
			
		||||
          'max_size': datasource.get('max_size', 512),
 | 
			
		||||
          'port': db_params.port,
 | 
			
		||||
          'srid': datasource['srid'],
 | 
			
		||||
          'srid': datasource.get('srid', layer_defaults['datasource']['srid']),
 | 
			
		||||
          'table': datasource['query'],
 | 
			
		||||
          'type': 'postgis',
 | 
			
		||||
          'host': db_params.host,
 | 
			
		||||
| 
						 | 
				
			
			@ -52,15 +54,37 @@ def generate_layer(layer_def, db_params):
 | 
			
		|||
    return tm2layer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate_tm2source(tileset_filename, db_params):
 | 
			
		||||
    with open(tileset_filename, 'r') as stream:
 | 
			
		||||
def parse_tileset(filename):
 | 
			
		||||
    with open(filename, 'r') as stream:
 | 
			
		||||
        try:
 | 
			
		||||
            tileset = yaml.load(stream)['tileset']
 | 
			
		||||
            return yaml.load(stream)['tileset']
 | 
			
		||||
        except yaml.YAMLError as e:
 | 
			
		||||
            print('Could not parse ' + tileset_filename)
 | 
			
		||||
            print('Could not parse ' + filename)
 | 
			
		||||
            print(e)
 | 
			
		||||
            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 = {
 | 
			
		||||
        'attribution': tileset['attribution'],
 | 
			
		||||
        'center': tileset['center'],
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +99,7 @@ def generate_tm2source(tileset_filename, db_params):
 | 
			
		|||
        with open(layer_filename, 'r') as stream:
 | 
			
		||||
            try:
 | 
			
		||||
                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)
 | 
			
		||||
            except yaml.YAMLError as e:
 | 
			
		||||
                print('Could not parse ' + layer_filename)
 | 
			
		||||
| 
						 | 
				
			
			@ -96,3 +120,6 @@ if __name__ == '__main__':
 | 
			
		|||
        )
 | 
			
		||||
        tm2 = generate_tm2source(args['<tileset>'], db_params)
 | 
			
		||||
        print(yaml.dump(tm2))
 | 
			
		||||
    if args.get('dump-sql'):
 | 
			
		||||
        sql = collect_sql(args['<tileset>'])
 | 
			
		||||
        print(sql)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue