diff --git a/desktop-env-3575 b/desktop-env-3575 new file mode 120000 index 0000000..ac32ea4 --- /dev/null +++ b/desktop-env-3575 @@ -0,0 +1 @@ +../tilestache-vectortiles/desktop-env-3575 \ No newline at end of file diff --git a/server.py b/server.py index 8122558..bd153f3 100644 --- a/server.py +++ b/server.py @@ -35,8 +35,11 @@ def GeneratePrepared(layers): print(prepared) return(prepared) -layers = GetTM2Source("/mapping/data.yml") +#layers = GetTM2Source("/mapping/data.yml") +layers = GetTM2Source('/home/mblissett/Workspace/openmaptiles/build/openmaptiles.tm2source/data.yml') prepared = GeneratePrepared(layers) +print prepared +print engine = create_engine('postgresql://'+os.getenv('POSTGRES_USER','openmaptiles')+':'+os.getenv('POSTGRES_PASSWORD','openmaptiles')+'@'+os.getenv('POSTGRES_HOST','postgres')+':'+os.getenv('POSTGRES_PORT','5432')+'/'+os.getenv('POSTGRES_DB','openmaptiles')) inspector = inspect(engine) DBSession = sessionmaker(bind=engine) @@ -44,23 +47,38 @@ session = DBSession() session.execute(prepared) def bounds(zoom,x,y): - inProj = pyproj.Proj(init='epsg:4326') - outProj = pyproj.Proj(init='epsg:3857') - lnglatbbox = mercantile.bounds(x,y,zoom) - ws = (pyproj.transform(inProj,outProj,lnglatbbox[0],lnglatbbox[1])) - en = (pyproj.transform(inProj,outProj,lnglatbbox[2],lnglatbbox[3])) + #inProj = pyproj.Proj(init='epsg:3575') + #outProj = pyproj.Proj(init='epsg:3575') + #lnglatbbox = mercantile.bounds(x,y,zoom) + #ws = (pyproj.transform(inProj,outProj,lnglatbbox[0],lnglatbbox[1])) + #en = (pyproj.transform(inProj,outProj,lnglatbbox[2],lnglatbbox[3])) + + map_width_in_metres = 2 * 2**0.5*6371007.2 + #tile_width_in_pixels = 512.0 + #standardized_pixel_size = 0.00028 + #map_width_in_pixels = tile_width_in_pixels*(2.0**zoom) + + tiles_across = 2**zoom + + x = x - 2**(zoom-1) + y = -(y - 2**(zoom-1)) - 1 + + tile_width_in_metres = (map_width_in_metres / tiles_across) + ws = (x*tile_width_in_metres, (y+1)*tile_width_in_metres) + en = ((x+1)*tile_width_in_metres, (y)*tile_width_in_metres) + return {'w':ws[0],'s':ws[1],'e':en[0],'n':en[1]} def zoom_to_scale_denom(zoom): # For !scale_denominator! # From https://github.com/openstreetmap/mapnik-stylesheets/blob/master/zoom-to-scale.txt - map_width_in_metres = 40075016.68557849 - tile_width_in_pixels = 256.0 + map_width_in_metres = 2 * 2**0.5*6371007.2 + tile_width_in_pixels = 512.0 standardized_pixel_size = 0.00028 map_width_in_pixels = tile_width_in_pixels*(2.0**zoom) return str(map_width_in_metres/(map_width_in_pixels * standardized_pixel_size)) -def replace_tokens(query,s,w,n,e,scale_denom): - return query.replace("!bbox!","ST_MakeBox2D(ST_Point("+w+", "+s+"), ST_Point("+e+", "+n+"))").replace("!scale_denominator!",scale_denom).replace("!pixel_width!","256").replace("!pixel_height!","256") +def replace_tokens(query,s,w,n,e,scale_denom,z): + return query.replace("!bbox!","ST_SetSRID(ST_MakeBox2D(ST_Point("+w+", "+s+"), ST_Point("+e+", "+n+")), 3575)").replace("!scale_denominator!",scale_denom).replace("!pixel_width!","512").replace("!pixel_height!","512") def get_mvt(zoom,x,y): try: # Sanitize the inputs @@ -74,13 +92,15 @@ def get_mvt(zoom,x,y): tilebounds = bounds(sani_zoom,sani_x,sani_y) s,w,n,e = str(tilebounds['s']),str(tilebounds['w']),str(tilebounds['n']),str(tilebounds['e']) final_query = "EXECUTE gettile(!bbox!, !scale_denominator!, !pixel_width!, !pixel_height!);" - sent_query = replace_tokens(final_query,s,w,n,e,scale_denom) + sent_query = replace_tokens(final_query,s,w,n,e,scale_denom,sani_zoom) response = list(session.execute(sent_query)) + print + print (sani_zoom, sani_x, sani_y) print(sent_query) layers = filter(None,list(itertools.chain.from_iterable(response))) final_tile = b'' for layer in layers: - final_tile = final_tile + io.BytesIO(layer).getvalue() + final_tile = final_tile + io.BytesIO(layer).getvalue() return final_tile class GetTile(tornado.web.RequestHandler): @@ -94,7 +114,7 @@ class GetTile(tornado.web.RequestHandler): def m(): if __name__ == "__main__": # Make this prepared statement from the tm2source - application = tornado.web.Application([(r"/tiles/([0-9]+)/([0-9]+)/([0-9]+).pbf", GetTile)]) + application = tornado.web.Application([(r"/EPSG:3575/([0-9]+)/([0-9]+)/([0-9]+).pbf", GetTile)]) print("Postserve started..") application.listen(8080) tornado.ioloop.IOLoop.instance().start() diff --git a/x b/x new file mode 100644 index 0000000..1b4c74f --- /dev/null +++ b/x @@ -0,0 +1 @@ +{'generalized_tables': {'railway_linestring_gen1': {'source': 'railway_linestring', 'sql_filter': "railway='rail' AND service=''", 'tolerance': 1.6e-09}, 'building_polygon_gen1': {'source': 'building_polygon', 'sql_filter': 'area>1.1e-07', 'tolerance': 8.1e-10}, 'highway_linestring_gen4': {'source': 'highway_linestring_gen3', 'sql_filter': "highway IN ('motorway','trunk') AND NOT is_area", 'tolerance': 1.6e-08}, 'highway_linestring_gen1': {'source': 'highway_linestring', 'sql_filter': "highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary') AND NOT is_area", 'tolerance': 1.6e-09}, 'highway_linestring_gen3': {'source': 'highway_linestring_gen2', 'sql_filter': "highway IN ('motorway','trunk', 'primary') AND NOT is_area", 'tolerance': 9.7e-09}, 'highway_linestring_gen2': {'source': 'highway_linestring_gen1', 'sql_filter': "highway IN ('motorway','trunk', 'primary', 'secondary') AND NOT is_area", 'tolerance': 4e-09}, 'boundary_linestring_gen1': {'source': 'boundary_linestring', 'tolerance': 2.4e-09}, 'boundary_linestring_gen3': {'source': 'boundary_linestring', 'tolerance': 9.7e-09}, 'boundary_linestring_gen2': {'source': 'boundary_linestring', 'tolerance': 4.9e-09}, 'boundary_linestring_gen5': {'source': 'boundary_linestring', 'tolerance': 3.9e-09}, 'boundary_linestring_gen4': {'source': 'boundary_linestring', 'tolerance': 1.9e-08}, 'landuse_polygon_gen1': {'source': 'landuse_polygon', 'sql_filter': 'area>4.8e-6', 'tolerance': 1.6e-09}, 'landuse_polygon_gen2': {'source': 'landuse_polygon_gen1', 'sql_filter': 'area>1.9e-5', 'tolerance': 3.2e-09}, 'landuse_polygon_gen3': {'source': 'landuse_polygon_gen2', 'sql_filter': 'area>7.8e-5', 'tolerance': 6.5e-09}, 'landuse_polygon_gen4': {'source': 'landuse_polygon_gen3', 'sql_filter': 'area>1.6e-4', 'tolerance': 1.3e-09}, 'aeroway_polygon_gen1': {'source': 'aeroway_polygon', 'sql_filter': 'area>4.8e-6', 'tolerance': 1.6e-09}, 'aeroway_polygon_gen2': {'source': 'aeroway_polygon_gen1', 'sql_filter': 'area>1.9e-5', 'tolerance': 4e-09}, 'water_polygon_gen5': {'source': 'water_polygon_gen4', 'sql_filter': 'area>8.1e-4', 'tolerance': 2.6e-08}, 'water_polygon_gen4': {'source': 'water_polygon_gen3', 'sql_filter': 'area>4.0e-4', 'tolerance': 1.3e-08}, 'railway_linestring_gen2': {'source': 'railway_linestring_gen1', 'tolerance': 3.2e-09}, 'water_polygon_gen1': {'source': 'water_polygon', 'sql_filter': 'area>4.0e-5', 'tolerance': 1.6e-09}, 'water_polygon_gen3': {'source': 'water_polygon_gen2', 'sql_filter': 'area>2.0e-4', 'tolerance': 6.5e-09}, 'water_polygon_gen2': {'source': 'water_polygon_gen1', 'sql_filter': 'area>8.1e-5', 'tolerance': 3.2e-09}, 'landcover_polygon_gen6': {'source': 'landcover_polygon_gen5', 'sql_filter': 'area>1.2e-3', 'tolerance': 2.4e-08}, 'landcover_polygon_gen4': {'source': 'landcover_polygon_gen3', 'sql_filter': 'area>9.7e-5', 'tolerance': 9.7e-09}, 'landcover_polygon_gen5': {'source': 'landcover_polygon_gen4', 'sql_filter': 'area>3.4e-4', 'tolerance': 1.6e-08}, 'landcover_polygon_gen2': {'source': 'landcover_polygon_gen1', 'sql_filter': 'area>1.9e-5', 'tolerance': 4e-09}, 'landcover_polygon_gen3': {'source': 'landcover_polygon_gen2', 'sql_filter': 'area>3.9e-5', 'tolerance': 6.5e-09}, 'landcover_polygon_gen1': {'source': 'landcover_polygon', 'sql_filter': 'area>4.8e-6', 'tolerance': 1.6e-09}, 'park_polygon_gen1': {'source': 'park_polygon', 'sql_filter': 'area>4.8e-6', 'tolerance': 1.6e-09}, 'park_polygon_gen3': {'source': 'park_polygon_gen2', 'sql_filter': 'area>3.9e-5', 'tolerance': 6.5e-09}, 'park_polygon_gen2': {'source': 'park_polygon_gen1', 'sql_filter': 'area>1.9e-5', 'tolerance': 4e-09}, 'park_polygon_gen5': {'source': 'park_polygon_gen4', 'sql_filter': 'area>3.4e-4', 'tolerance': 1.6e-08}, 'park_polygon_gen4': {'source': 'park_polygon_gen3', 'sql_filter': 'area>9.7e-5', 'tolerance': 9.7e-09}, 'park_polygon_gen7': {'source': 'park_polygon_gen6', 'sql_filter': 'area>4.8e-3', 'tolerance': 3.2e-08}, 'park_polygon_gen6': {'source': 'park_polygon_gen5', 'sql_filter': 'area>1.2e-3', 'tolerance': 2.4e-08}, 'park_polygon_gen8': {'source': 'park_polygon_gen6', 'sql_filter': 'area>1.9e-2', 'tolerance': 4.9e-08}, 'waterway_linestring_gen1': {'source': 'waterway_linestring', 'sql_filter': "waterway IN ('river')", 'tolerance': 4e-09}, 'waterway_linestring_gen3': {'source': 'waterway_linestring_gen2', 'sql_filter': "waterway IN ('river')", 'tolerance': 1.6e-08}, 'waterway_linestring_gen2': {'source': 'waterway_linestring_gen1', 'sql_filter': "waterway IN ('river')", 'tolerance': 8.1e-09}}, 'tables': {'housenumber_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'housenumber', 'key': 'addr:housenumber'}], 'type_mappings': {'points': {'addr:housenumber': ['__any__']}, 'polygons': {'addr:housenumber': ['__any__']}}, 'type': 'geometry'}, 'building_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'area', 'name': 'area'}, {'type': 'string', 'name': 'building', 'key': 'building'}, {'type': 'string', 'name': 'buildingpart', 'key': 'building:part'}, {'type': 'string', 'name': 'buildingheight', 'key': 'building:height'}, {'type': 'string', 'name': 'buildingmin_height', 'key': 'building:min_height'}, {'type': 'string', 'name': 'buildinglevels', 'key': 'building:levels'}, {'type': 'string', 'name': 'buildingmin_level', 'key': 'building:min_level'}, {'type': 'string', 'name': 'height', 'key': 'height'}, {'type': 'string', 'name': 'min_height', 'key': 'min_height'}, {'type': 'string', 'name': 'levels', 'key': 'levels'}, {'type': 'string', 'name': 'min_level', 'key': 'min_level'}], 'type': 'polygon', 'mapping': {'building': ['__any__'], 'building:part': ['__any__'], 'aeroway': ['terminal', 'hangar']}, 'filters': {'reject': {'building': ['no', 'none', 'No'], 'building:part': ['no', 'none', 'No']}}}, 'peak_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'ele', 'key': 'ele'}, {'type': 'string', 'name': 'wikipedia', 'key': 'wikipedia'}], 'type': 'point', 'mapping': {'natural': ['peak']}}, 'marine_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'place', 'key': 'place'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'point', 'mapping': {'place': ['ocean', 'sea']}, 'filters': {'require': {'name': ['__any__']}}}, 'highway_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'highway', 'key': 'highway'}, {'type': 'wayzorder', 'name': 'z_order'}, {'type': 'integer', 'name': 'layer', 'key': 'layer'}, {'type': 'bool', 'name': 'is_area', 'key': 'area'}], 'type': 'polygon', 'mapping': {'highway': ['pedestrian']}}, 'landcover_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'landuse', 'key': 'landuse'}, {'type': 'string', 'name': 'leisure', 'key': 'leisure'}, {'type': 'string', 'name': 'natural', 'key': 'natural'}, {'type': 'string', 'name': 'wetland', 'key': 'wetland'}, {'type': 'area', 'name': 'area'}], 'type': 'polygon', 'mapping': {'natural': ['wetland', 'grassland'], 'landuse': ['allotments', 'farm', 'farmland', 'orchard', 'plant_nursery', 'vineyard', 'grass', 'grassland', 'meadow', 'forest', 'village_green', 'recreation_ground', 'park'], 'wetland': ['bog', 'swamp', 'wet_meadow', 'marsh', 'reedbed', 'saltern', 'tidalflat', 'saltmarsh', 'mangrove'], 'leisure': ['park']}}, 'highway_linestring': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'highway', 'key': 'highway'}, {'type': 'string', 'name': 'ref', 'key': 'ref'}, {'type': 'string', 'name': 'network', 'key': 'network'}, {'type': 'wayzorder', 'name': 'z_order'}, {'type': 'integer', 'name': 'layer', 'key': 'layer'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'short_name', 'key': 'short_name'}, {'type': 'bool', 'name': 'is_tunnel', 'key': 'tunnel'}, {'type': 'bool', 'name': 'is_bridge', 'key': 'bridge'}, {'type': 'bool', 'name': 'is_ramp', 'key': 'ramp'}, {'type': 'bool', 'name': 'is_ford', 'key': 'ford'}, {'type': 'bool', 'name': 'is_oneway', 'key': 'oneway'}, {'type': 'bool', 'name': 'is_area', 'key': 'area'}, {'type': 'string', 'name': 'service', 'key': 'service'}, {'type': 'string', 'name': 'usage', 'key': 'usage'}], 'type': 'linestring', 'mapping': {'highway': ['motorway', 'motorway_link', 'trunk', 'trunk_link', 'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary', 'tertiary_link', 'unclassified', 'residential', 'road', 'living_street', 'raceway', 'track', 'service', 'path', 'cycleway', 'bridleway', 'footway', 'corridor', 'pedestrian', 'steps']}}, 'water_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'area', 'name': 'area'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'natural', 'key': 'natural'}, {'type': 'string', 'name': 'landuse', 'key': 'landuse'}, {'type': 'string', 'name': 'waterway', 'key': 'waterway'}], 'type': 'polygon', 'mapping': {'waterway': ['river', 'riverbank', 'stream', 'canal', 'drain', 'ditch'], 'landuse': ['reservoir'], 'natural': ['water', 'bay']}, 'filters': {'reject': {'covered': ['yes']}}}, 'country_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'name_de', 'key': 'name:de'}, {'type': 'string', 'name': 'name_fr', 'key': 'name:fr'}, {'type': 'string', 'name': 'name_es', 'key': 'name:es'}, {'type': 'string', 'name': 'name_pt', 'key': 'name:pt'}, {'type': 'string', 'name': 'name_ru', 'key': 'name:ru'}, {'type': 'string', 'name': 'name_zh', 'key': 'name:zh'}, {'type': 'string', 'name': 'name_ar', 'key': 'name:ar'}, {'type': 'string', 'name': 'name_ja', 'key': 'name:ja'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'point', 'mapping': {'place': ['country']}, 'filters': {'require': {'name': ['__any__']}}}, 'city_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'name_de', 'key': 'name:de'}, {'type': 'string', 'name': 'name_fr', 'key': 'name:fr'}, {'type': 'string', 'name': 'name_es', 'key': 'name:es'}, {'type': 'string', 'name': 'name_pt', 'key': 'name:pt'}, {'type': 'string', 'name': 'name_ru', 'key': 'name:ru'}, {'type': 'string', 'name': 'name_zh', 'key': 'name:zh'}, {'type': 'string', 'name': 'name_ar', 'key': 'name:ar'}, {'type': 'string', 'name': 'name_ja', 'key': 'name:ja'}, {'type': 'string', 'name': 'place', 'key': 'place'}, {'type': 'integer', 'name': 'population', 'key': 'population'}, {'type': 'string', 'name': 'capital', 'key': 'capital'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'point', 'mapping': {'place': ['city', 'town', 'village', 'hamlet', 'suburb', 'neighbourhood', 'isolated_dwelling']}, 'filters': {'require': {'name': ['__any__']}}}, 'boundary_linestring': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'integer', 'name': 'admin_level', 'key': 'admin_level'}], 'type': 'linestring', 'mapping': {'boundary': ['administrative']}, 'filters': {'require': {'admin_level': ['__any__']}, 'reject': {'natural': ['coastline']}}}, 'continent_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}], 'type': 'point', 'mapping': {'place': ['continent']}, 'filters': {'require': {'name': ['__any__']}}}, 'building_multipolygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'area', 'name': 'area'}, {'from_member': True, 'type': 'string', 'name': 'building', 'key': 'building'}, {'from_member': True, 'type': 'string', 'name': 'buildingpart', 'key': 'building:part'}, {'from_member': True, 'type': 'string', 'name': 'buildingheight', 'key': 'building:height'}, {'from_member': True, 'type': 'string', 'name': 'height', 'key': 'height'}, {'from_member': True, 'type': 'string', 'name': 'buildingmin_height', 'key': 'building:min_height'}, {'from_member': True, 'type': 'string', 'name': 'min_height', 'key': 'min_height'}, {'from_member': True, 'type': 'string', 'name': 'buildinglevels', 'key': 'building:levels'}, {'from_member': True, 'type': 'string', 'name': 'levels', 'key': 'levels'}, {'from_member': True, 'type': 'string', 'name': 'buildingmin_level', 'key': 'building:min_level'}, {'from_member': True, 'type': 'string', 'name': 'min_level', 'key': 'min_level'}, {'type': 'member_id', 'name': 'member'}, {'type': 'member_index', 'name': 'index'}, {'from_member': True, 'type': 'member_role', 'name': 'role'}, {'type': 'member_type', 'name': 'type'}], 'type': 'relation_member', 'mapping': {'type': ['multipolygon']}, 'filters': {'reject': {'building': ['no', 'none', 'No'], 'building:part': ['no', 'none', 'No']}}}, 'building_relation': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'area', 'name': 'area'}, {'from_member': True, 'type': 'string', 'name': 'building', 'key': 'building'}, {'from_member': True, 'type': 'string', 'name': 'buildingpart', 'key': 'building:part'}, {'from_member': True, 'type': 'string', 'name': 'buildingheight', 'key': 'building:height'}, {'from_member': True, 'type': 'string', 'name': 'height', 'key': 'height'}, {'from_member': True, 'type': 'string', 'name': 'buildingmin_height', 'key': 'building:min_height'}, {'from_member': True, 'type': 'string', 'name': 'min_height', 'key': 'min_height'}, {'from_member': True, 'type': 'string', 'name': 'buildinglevels', 'key': 'building:levels'}, {'from_member': True, 'type': 'string', 'name': 'levels', 'key': 'levels'}, {'from_member': True, 'type': 'string', 'name': 'buildingmin_level', 'key': 'building:min_level'}, {'from_member': True, 'type': 'string', 'name': 'min_level', 'key': 'min_level'}, {'type': 'string', 'name': 'relbuildingheight', 'key': 'building:height'}, {'type': 'string', 'name': 'relheight', 'key': 'height'}, {'type': 'string', 'name': 'relbuildingmin_height', 'key': 'building:min_height'}, {'type': 'string', 'name': 'relmin_height', 'key': 'min_height'}, {'type': 'string', 'name': 'relbuildinglevels', 'key': 'building:levels'}, {'type': 'string', 'name': 'rellevels', 'key': 'levels'}, {'type': 'string', 'name': 'relbuildingmin_level', 'key': 'building:min_level'}, {'type': 'string', 'name': 'relmin_level', 'key': 'min_level'}, {'type': 'member_id', 'name': 'member'}, {'type': 'member_index', 'name': 'index'}, {'from_member': True, 'type': 'member_role', 'name': 'role'}, {'type': 'member_type', 'name': 'type'}], 'type': 'relation_member', 'mapping': {'type': ['building']}}, 'state_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'name_de', 'key': 'name:de'}, {'type': 'string', 'name': 'name_fr', 'key': 'name:fr'}, {'type': 'string', 'name': 'name_es', 'key': 'name:es'}, {'type': 'string', 'name': 'name_pt', 'key': 'name:pt'}, {'type': 'string', 'name': 'name_ru', 'key': 'name:ru'}, {'type': 'string', 'name': 'name_zh', 'key': 'name:zh'}, {'type': 'string', 'name': 'name_ar', 'key': 'name:ar'}, {'type': 'string', 'name': 'name_ja', 'key': 'name:ja'}, {'type': 'string', 'name': 'is_in_country', 'key': 'is_in:country'}, {'type': 'string', 'name': 'is_in_country_code', 'key': 'is_in:country_code'}, {'type': 'string', 'name': 'ref', 'key': 'ref'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'point', 'mapping': {'place': ['state']}, 'filters': {'require': {'name': ['__any__']}}}, 'route_member': {'type': 'relation_member', 'mapping': {'route': ['road']}, 'columns': [{'type': 'id', 'name': 'osm_id'}, {'type': 'member_id', 'name': 'member'}, {'type': 'member_role', 'name': 'role'}, {'type': 'member_type', 'name': 'type'}, {'type': 'string', 'name': 'ref', 'key': 'ref'}, {'type': 'string', 'name': 'network', 'key': 'network'}]}, 'poi_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'mapping_value', 'name': 'subclass'}], 'type': 'point', 'mapping': {'shop': ['accessories', 'alcohol', 'antiques', 'art', 'bag', 'bakery', 'beauty', 'bed', 'beverages', 'bicycle', 'books', 'boutique', 'butcher', 'camera', 'car', 'car_repair', 'carpet', 'charity', 'chemist', 'chocolate', 'clothes', 'coffee', 'computer', 'confectionery', 'convenience', 'copyshop', 'cosmetics', 'deli', 'delicatessen', 'department_store', 'doityourself', 'dry_cleaning', 'electronics', 'erotic', 'fabric', 'florist', 'furniture', 'garden_centre', 'general', 'gift', 'greengrocer', 'hairdresser', 'hardware', 'hearing_aids', 'hifi', 'ice_cream', 'interior_decoration', 'jewelry', 'kiosk', 'lamps', 'laundry', 'mall', 'massage', 'mobile_phone', 'motorcycle', 'music', 'musical_instrument', 'newsagent', 'optician', 'outdoor', 'perfume', 'perfumery', 'pet', 'photo', 'second_hand', 'shoes', 'sports', 'stationery', 'supermarket', 'tailor', 'tattoo', 'ticket', 'tobacco', 'toys', 'travel_agency', 'video', 'video_games', 'watches', 'weapons', 'wholesale', 'wine'], 'amenity': ['arts_centre', 'bank', 'bar', 'bbq', 'bicycle_rental', 'biergarten', 'bus_station', 'cafe', 'cinema', 'college', 'community_centre', 'courthouse', 'dentist', 'doctors', 'embassy', 'fast_food', 'ferry_terminal', 'fire_station', 'food_court', 'fuel', 'grave_yard', 'hospital', 'ice_cream', 'kindergarten', 'library', 'marketplace', 'nightclub', 'nursing_home', 'pharmacy', 'place_of_worship', 'police', 'post_box', 'post_office', 'prison', 'pub', 'public_building', 'recycling', 'restaurant', 'school', 'shelter', 'swimming_pool', 'taxi', 'telephone', 'theatre', 'toilets', 'townhall', 'university', 'veterinary', 'waste_basket'], 'landuse': ['basin', 'brownfield', 'cemetery', 'reservoir'], 'barrier': ['bollard', 'border_control', 'cycle_barrier', 'gate', 'lift_gate', 'sally_port', 'stile', 'toll_booth'], 'aerialway': ['station'], 'leisure': ['dog_park', 'garden', 'golf_course', 'ice_rink', 'marina', 'miniature_golf', 'park', 'pitch', 'playground', 'sports_centre', 'stadium', 'swimming_area', 'swimming_pool', 'water_park'], 'historic': ['monument'], 'waterway': ['dock'], 'sport': ['american_football', 'archery', 'athletics', 'australian_football', 'badminton', 'baseball', 'basketball', 'beachvolleyball', 'billiards', 'bmx', 'boules', 'bowls', 'boxing', 'canadian_football', 'canoe', 'chess', 'climbing', 'climbing_adventure', 'cricket', 'cricket_nets', 'croquet', 'curling', 'cycling', 'disc_golf', 'diving', 'dog_racing', 'equestrian', 'fatsal', 'field_hockey', 'free_flying', 'gaelic_games', 'golf', 'gymnastics', 'handball', 'hockey', 'horse_racing', 'horseshoes', 'ice_hockey', 'ice_stock', 'judo', 'karting', 'korfball', 'long_jump', 'model_aerodrome', 'motocross', 'motor', 'multi', 'netball', 'orienteering', 'paddle_tennis', 'paintball', 'paragliding', 'pelota', 'racquet', 'rc_car', 'rowing', 'rugby', 'rugby_league', 'rugby_union', 'running', 'sailing', 'scuba_diving', 'shooting', 'shooting_range', 'skateboard', 'skating', 'skiing', 'soccer', 'surfing', 'swimming', 'table_soccer', 'table_tennis', 'team_handball', 'tennis', 'toboggan', 'volleyball', 'water_ski', 'yoga'], 'tourism': ['alpine_hut', 'artwork', 'attraction', 'bed_and_breakfast', 'camp_site', 'caravan_site', 'chalet', 'gallery', 'guest_house', 'hostel', 'hotel', 'information', 'motel', 'museum', 'picnic_site', 'theme_park', 'viewpoint', 'zoo'], 'highway': ['bus_stop']}}, 'aeroway_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'aeroway', 'key': 'aeroway'}, {'type': 'area', 'name': 'area'}], 'type': 'polygon', 'mapping': {'aeroway': ['aerodrome', 'heliport', 'runway', 'helipad', 'taxiway', 'apron']}}, 'island_point': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'name_de', 'key': 'name:de'}, {'type': 'string', 'name': 'name_fr', 'key': 'name:fr'}, {'type': 'string', 'name': 'name_es', 'key': 'name:es'}, {'type': 'string', 'name': 'name_pt', 'key': 'name:pt'}, {'type': 'string', 'name': 'name_ru', 'key': 'name:ru'}, {'type': 'string', 'name': 'name_zh', 'key': 'name:zh'}, {'type': 'string', 'name': 'name_ar', 'key': 'name:ar'}, {'type': 'string', 'name': 'name_ja', 'key': 'name:ja'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'point', 'mapping': {'place': ['island']}, 'filters': {'require': {'name': ['__any__']}}}, 'island_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'area', 'name': 'area'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'name_de', 'key': 'name:de'}, {'type': 'string', 'name': 'name_fr', 'key': 'name:fr'}, {'type': 'string', 'name': 'name_es', 'key': 'name:es'}, {'type': 'string', 'name': 'name_pt', 'key': 'name:pt'}, {'type': 'string', 'name': 'name_ru', 'key': 'name:ru'}, {'type': 'string', 'name': 'name_zh', 'key': 'name:zh'}, {'type': 'string', 'name': 'name_ar', 'key': 'name:ar'}, {'type': 'string', 'name': 'name_ja', 'key': 'name:ja'}, {'type': 'integer', 'name': 'rank', 'key': 'rank'}], 'type': 'polygon', 'mapping': {'place': ['island']}, 'filters': {'require': {'name': ['__any__']}}}, 'waterway_linestring': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'waterway', 'key': 'waterway'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}], 'type': 'linestring', 'mapping': {'waterway': ['stream', 'river', 'canal', 'drain', 'ditch']}}, 'landuse_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'landuse', 'key': 'landuse'}, {'type': 'string', 'name': 'amenity', 'key': 'amenity'}, {'type': 'string', 'name': 'leisure', 'key': 'leisure'}, {'type': 'area', 'name': 'area'}], 'type': 'polygon', 'mapping': {'amenity': ['school', 'university', 'kindergarten', 'college', 'library', 'hospital'], 'landuse': ['railway', 'cemetery', 'military', 'residential', 'commercial', 'industrial', 'retail'], 'leisure': ['stadium']}}, 'railway_linestring': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'railway', 'key': 'railway'}, {'type': 'string', 'name': 'ref', 'key': 'ref'}, {'type': 'string', 'name': 'network', 'key': 'network'}, {'type': 'wayzorder', 'name': 'z_order'}, {'type': 'integer', 'name': 'layer', 'key': 'layer'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'string', 'name': 'short_name', 'key': 'short_name'}, {'type': 'bool', 'name': 'is_tunnel', 'key': 'tunnel'}, {'type': 'bool', 'name': 'is_bridge', 'key': 'bridge'}, {'type': 'bool', 'name': 'is_ramp', 'key': 'ramp'}, {'type': 'bool', 'name': 'is_ford', 'key': 'ford'}, {'type': 'bool', 'name': 'is_oneway', 'key': 'oneway'}, {'type': 'bool', 'name': 'is_area', 'key': 'area'}, {'type': 'string', 'name': 'service', 'key': 'service'}, {'type': 'string', 'name': 'usage', 'key': 'usage'}], 'type': 'linestring', 'mapping': {'railway': ['rail', 'narrow_gauge', 'preserved', 'funicular', 'subway', 'light_rail', 'monorail', 'tram']}}, 'poi_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'name', 'key': 'name'}, {'type': 'string', 'name': 'name_en', 'key': 'name:en'}, {'type': 'mapping_value', 'name': 'subclass'}], 'type': 'polygon', 'mapping': {'shop': ['accessories', 'alcohol', 'antiques', 'art', 'bag', 'bakery', 'beauty', 'bed', 'beverages', 'bicycle', 'books', 'boutique', 'butcher', 'camera', 'car', 'car_repair', 'carpet', 'charity', 'chemist', 'chocolate', 'clothes', 'coffee', 'computer', 'confectionery', 'convenience', 'copyshop', 'cosmetics', 'deli', 'delicatessen', 'department_store', 'doityourself', 'dry_cleaning', 'electronics', 'erotic', 'fabric', 'florist', 'furniture', 'garden_centre', 'general', 'gift', 'greengrocer', 'hairdresser', 'hardware', 'hearing_aids', 'hifi', 'ice_cream', 'interior_decoration', 'jewelry', 'kiosk', 'lamps', 'laundry', 'mall', 'massage', 'mobile_phone', 'motorcycle', 'music', 'musical_instrument', 'newsagent', 'optician', 'outdoor', 'perfume', 'perfumery', 'pet', 'photo', 'second_hand', 'shoes', 'sports', 'stationery', 'supermarket', 'tailor', 'tattoo', 'ticket', 'tobacco', 'toys', 'travel_agency', 'video', 'video_games', 'watches', 'weapons', 'wholesale', 'wine'], 'amenity': ['arts_centre', 'bank', 'bar', 'bbq', 'bicycle_rental', 'biergarten', 'bus_station', 'cafe', 'cinema', 'college', 'community_centre', 'courthouse', 'dentist', 'doctors', 'embassy', 'fast_food', 'ferry_terminal', 'fire_station', 'food_court', 'fuel', 'grave_yard', 'hospital', 'ice_cream', 'kindergarten', 'library', 'marketplace', 'nightclub', 'nursing_home', 'pharmacy', 'place_of_worship', 'police', 'post_box', 'post_office', 'prison', 'pub', 'public_building', 'recycling', 'restaurant', 'school', 'shelter', 'swimming_pool', 'taxi', 'telephone', 'theatre', 'toilets', 'townhall', 'university', 'veterinary', 'waste_basket'], 'landuse': ['basin', 'brownfield', 'cemetery', 'reservoir'], 'barrier': ['bollard', 'border_control', 'cycle_barrier', 'gate', 'lift_gate', 'sally_port', 'stile', 'toll_booth'], 'aerialway': ['station'], 'leisure': ['dog_park', 'garden', 'golf_course', 'ice_rink', 'marina', 'miniature_golf', 'park', 'pitch', 'playground', 'sports_centre', 'stadium', 'swimming_area', 'swimming_pool', 'water_park'], 'historic': ['monument'], 'waterway': ['dock'], 'sport': ['american_football', 'archery', 'athletics', 'australian_football', 'badminton', 'baseball', 'basketball', 'beachvolleyball', 'billiards', 'bmx', 'boules', 'bowls', 'boxing', 'canadian_football', 'canoe', 'chess', 'climbing', 'climbing_adventure', 'cricket', 'cricket_nets', 'croquet', 'curling', 'cycling', 'disc_golf', 'diving', 'dog_racing', 'equestrian', 'fatsal', 'field_hockey', 'free_flying', 'gaelic_games', 'golf', 'gymnastics', 'handball', 'hockey', 'horse_racing', 'horseshoes', 'ice_hockey', 'ice_stock', 'judo', 'karting', 'korfball', 'long_jump', 'model_aerodrome', 'motocross', 'motor', 'multi', 'netball', 'orienteering', 'paddle_tennis', 'paintball', 'paragliding', 'pelota', 'racquet', 'rc_car', 'rowing', 'rugby', 'rugby_league', 'rugby_union', 'running', 'sailing', 'scuba_diving', 'shooting', 'shooting_range', 'skateboard', 'skating', 'skiing', 'soccer', 'surfing', 'swimming', 'table_soccer', 'table_tennis', 'team_handball', 'tennis', 'toboggan', 'volleyball', 'water_ski', 'yoga'], 'tourism': ['alpine_hut', 'artwork', 'attraction', 'bed_and_breakfast', 'camp_site', 'caravan_site', 'chalet', 'gallery', 'guest_house', 'hostel', 'hotel', 'information', 'motel', 'museum', 'picnic_site', 'theme_park', 'viewpoint', 'zoo'], 'highway': ['bus_stop']}}, 'park_polygon': {'fields': [{'type': 'id', 'name': 'osm_id'}, {'type': 'validated_geometry', 'name': 'geometry'}, {'type': 'string', 'name': 'landuse', 'key': 'landuse'}, {'type': 'string', 'name': 'leisure', 'key': 'leisure'}, {'type': 'string', 'name': 'boundary', 'key': 'boundary'}, {'type': 'area', 'name': 'area'}], 'type': 'polygon', 'mapping': {'boundary': ['national_park'], 'leisure': ['nature_reserve']}}}, 'tags': {'load_all': True}}