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

index 17d92bf0e1261fc5e6da8434d2a0ca86c1a4240b..79da8c9924b3ffb5098a71f96e38b4690f9bf70a 100644 (file)
@@ -1,10 +1,11 @@
 from osmapi import OsmApi
 import pprint
+import re
 
 Api = OsmApi()
 pp = pprint.PrettyPrinter(indent=4)
 
-min_lon, min_lat, max_lon, max_lat = 60.6180181933,56.8111736629,60.6251850558,56.8146972763
+min_lon, min_lat, max_lon, max_lat = 60.5945351426,56.8549239909,60.6177094284,56.8619861177
 
 def remove_duplicates(l):
     return [dict(t) for t in {tuple(d.items()) for d in l}]
@@ -42,6 +43,25 @@ def convert_building_type(building_type):
     else:
         return 'building'
 
+def filter_vehicles(objects):
+    return list(filter(lambda o: 
+    o['data']['tag'] != {}
+    and 'vehicle' in o['data']['tag']
+    and 'route' in o['data']['tag']
+    and 'name' in o['data']['tag'], objects))  
+
+def convert_vehicle_type(vehicle_type):
+    if vehicle_type == 'bus':
+        return 'bus'
+    if vehicle_type == 'tram':
+        return 'tram'
+    if vehicle_type == 'trolleybus':
+        return 'trolleybus'
+    if vehicle_type == 'train':
+        return 'train'
+    else:
+        return 'unknown'   
+
 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 = [
@@ -51,6 +71,10 @@ def describe_objects(min_lat, min_lon, max_lat, max_lon):
       {'building_type': convert_building_type(x['data']['tag']['building']),
        'levels': x['data']['tag']['building:levels']} for x in filter_buildings(objects)
     ]
+    vehicles = [
+      {'vehicle_type': convert_vehicle_type(x['data']['tag']['route']),
+       'name': re.split(r'\.', x['data']['tag']['name'].replace(':', '.'))[0]} for x in filter_vehicles(objects)
+    ]
     amenities = [
       {'name': x['data']['tag']['name'],
        'type': x['data']['tag']['amenity'],
@@ -58,6 +82,7 @@ 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),
+            'vehicles': remove_duplicates(vehicles),
             'buildings': buildings,
             'amenities': amenities}