]> git.xn--bdkaa.com Git - where-are-you.py.git/commitdiff
Add buildings to osm
authorVladislav Skukov <v.skukov@gmail.com>
Sat, 18 May 2019 18:03:27 +0000 (23:03 +0500)
committerVladislav Skukov <v.skukov@gmail.com>
Sat, 18 May 2019 18:03:27 +0000 (23:03 +0500)
osm/osm.py

index 204de2b796b01848f355caaf08513b186e9024ea..0f8aa58d3a3463a14c79ecb973833f5b1f8f45d8 100644 (file)
@@ -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)