From 023f45ef5c3f2760fe21271c28a82832c9b0c572 Mon Sep 17 00:00:00 2001 From: Vladislav Skukov Date: Sat, 18 May 2019 23:48:20 +0500 Subject: [PATCH] Add vehicles --- osm/osm.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/osm/osm.py b/osm/osm.py index 17d92bf..79da8c9 100644 --- a/osm/osm.py +++ b/osm/osm.py @@ -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} -- 2.50.1