From: Vladislav Skukov Date: Sat, 18 May 2019 17:04:11 +0000 (+0500) Subject: Add streets and rename objects to amenities. X-Git-Url: https://git.xn--bdkaa.com/?a=commitdiff_plain;h=8bb48ac8c318be49407566104856d51f0bd85fa7;p=where-are-you.py.git Add streets and rename objects to amenities. --- diff --git a/osm/osm.py b/osm/osm.py index 194af89..9e5cd7e 100644 --- a/osm/osm.py +++ b/osm/osm.py @@ -2,28 +2,45 @@ from osmapi import OsmApi import pprint Api = OsmApi() +pp = pprint.PrettyPrinter(indent=4) -min_lon, min_lat, max_lon, max_lat = 60.5906827939,56.8322320824,60.5942769539,56.834157283 +min_lon, min_lat, max_lon, max_lat = 60.6212975275,56.8312958592,60.6300522578,56.8366839585 +def remove_duplicates(l): + return [dict(t) for t in {tuple(d.items()) for d in l}] def get_objects_from_square(min_lon, min_lat, max_lon, max_lat): - objects = Api.Map(min_lon, min_lat, max_lon, max_lat) + return Api.Map(min_lon, min_lat, max_lon, max_lat) + +def filter_streets(objects): + return list(filter(lambda o: + o['data']['tag'] != {} + and 'highway' in o['data']['tag'] + and 'name' in o['data']['tag'], objects)) + +def filter_amenities(objects): return list(filter(lambda o: o['data']['tag'] != {} and 'lat' in o['data'] and 'lon' in o['data'] and 'amenity' in o['data']['tag'] and 'name' in o['data']['tag'], objects)) - def describe_objects(min_lon, min_lat, max_lon, max_lat): - objects = [ + 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) + ] + + amenities = [ {'name': x['data']['tag']['name'], + 'type': x['data']['tag']['amenity'], 'lat': x['data']['lat'], - 'lon': x['data']['lon']} for x in get_objects_from_square(min_lon, min_lat, max_lon, max_lat)] + 'lon': x['data']['lon']} for x in filter_amenities(objects)] return {'center': {'lat': (min_lat + max_lat) / 2, 'lon': (min_lon + max_lon) / 2}, - 'objects': objects} + 'streets': remove_duplicates(streets), + 'amenities': remove_duplicates(amenities)} objects = describe_objects(min_lon, min_lat, max_lon, max_lat) -print(objects) \ No newline at end of file +pp.pprint(objects) \ No newline at end of file