From 968a98456bf2eea5b2280d0396511127284f22a6 Mon Sep 17 00:00:00 2001 From: Vladislav Skukov Date: Sat, 18 May 2019 23:03:27 +0500 Subject: [PATCH] Add buildings to osm --- osm/osm.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/osm/osm.py b/osm/osm.py index 204de2b..0f8aa58 100644 --- a/osm/osm.py +++ b/osm/osm.py @@ -4,7 +4,7 @@ import pprint Api = OsmApi() pp = pprint.PrettyPrinter(indent=4) -min_lon, min_lat, max_lon, max_lat = 60.6212975275,56.8312958592,60.6300522578,56.8366839585 +min_lon, min_lat, max_lon, max_lat = 60.6180181933,56.8111736629,60.6251850558,56.8146972763 def remove_duplicates(l): return [dict(t) for t in {tuple(d.items()) for d in l}] @@ -18,6 +18,12 @@ def filter_streets(objects): and 'highway' in o['data']['tag'] and 'name' in o['data']['tag'], objects)) +def filter_buildings(objects): + return list(filter(lambda o: + o['data']['tag'] != {} + and 'building' in o['data']['tag'] + and 'building:levels' in o['data']['tag'], objects)) + def filter_amenities(objects): return list(filter(lambda o: o['data']['tag'] != {} @@ -26,12 +32,25 @@ def filter_amenities(objects): and 'amenity' in o['data']['tag'] and 'name' in o['data']['tag'], objects)) +def convert_building_type(building_type): + if building_type == 'dormitory': + return 'dormitory' + if building_type == 'garage': + return 'garage' + if building_type == 'apartments': + return 'apartments' + else: + return 'building' + def describe_objects(min_lat, min_lon, max_lat, max_lon): objects = get_objects_from_square(min_lon, min_lat, max_lon, max_lat) streets = [ {'name': x['data']['tag']['name']} for x in filter_streets(objects) ] - + buildings = [ + {'building_type': convert_building_type(x['data']['tag']['building']), + 'levels': x['data']['tag']['building:levels']} for x in filter_buildings(objects) + ] amenities = [ {'name': x['data']['tag']['name'], 'type': x['data']['tag']['amenity'], @@ -39,7 +58,8 @@ def describe_objects(min_lat, min_lon, max_lat, max_lon): 'lon': x['data']['lon']} for x in filter_amenities(objects)] return {'center': {'lat': (min_lat + max_lat) / 2, 'lon': (min_lon + max_lon) / 2}, 'streets': remove_duplicates(streets), - 'amenities': remove_duplicates(amenities)} + 'buildings': buildings, + 'amenities': amenities} objects = describe_objects(min_lat, min_lon, max_lat, max_lon) -- 2.50.1