diff --git a/omtgen.py b/omtgen.py index 9c66560b..80e1d44d 100755 --- a/omtgen.py +++ b/omtgen.py @@ -2,6 +2,7 @@ """ Usage: omtgen tm2source [--host=] [--port=] [--database=] [--user=] [--password=] + omtgen imposm3 omtgen dump-sql omtgen --help omtgen --version @@ -55,18 +56,11 @@ def generate_layer(layer_def, layer_defaults, db_params): def parse_tileset(filename): - with open(filename, 'r') as stream: - try: - return yaml.load(stream)['tileset'] - except yaml.YAMLError as e: - print('Could not parse ' + filename) - print(e) - sys.exit(403) + return parse_file(filename)['tileset'] 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: @@ -82,6 +76,38 @@ def collect_sql(tileset_filename): return sql +def parse_file(filename): + with open(filename, 'r') as stream: + try: + return yaml.load(stream) + except yaml.YAMLError as e: + print('Could not parse ' + filename) + print(e) + sys.exit(403) + + +def create_imposm3_mapping(tileset_filename): + tileset = parse_tileset(tileset_filename) + generalized_tables = {} + tables = {} + for layer_filename in tileset['layers']: + layer_def = parse_file(layer_filename) + for data_source in layer_def.get('datasources', []): + if data_source['type'] != 'imposm3': + continue + mapping_path = os.path.join(os.path.dirname(layer_filename), + data_source['mapping_file']) + mapping = parse_file(mapping_path) + for table_name, definition in mapping.get('generalized_tables', {}).items(): + generalized_tables[table_name] = definition + for table_name, definition in mapping.get('tables', {}).items(): + tables[table_name] = definition + return { + 'generalized_tables': generalized_tables, + 'tables': tables, + } + + def generate_tm2source(tileset_filename, db_params): tileset = parse_tileset(tileset_filename) layer_defaults = tileset['defaults'] @@ -123,3 +149,6 @@ if __name__ == '__main__': if args.get('dump-sql'): sql = collect_sql(args['']) print(sql) + if args.get('imposm3'): + mapping = create_imposm3_mapping(args['']) + print(yaml.dump(mapping))