from typing import Iterable, Tuple, List
import geojson.utils
-from geojson import FeatureCollection, Feature
+from geojson import FeatureCollection, Feature, Point
class WrPointFeatureType(Enum):
simplify_way(way['geometry']['coordinates'], max_dist)
-def find_center(coordinates: Iterable[Tuple[float, ...]], fallback: Tuple[float, float]) -> Tuple[float, float]:
+def find_center(coordinates: Iterable[Tuple[float, ...]], fallback: Tuple[float, float]) -> Point:
"""Returns the center of the given coordinates. If the lists are empty, fallback_lon is returned."""
coordinates = list(coordinates)
min_lon = min(coordinates, key=lambda c: c[0], default=fallback[0])[0]
max_lon = max(coordinates, key=lambda c: c[0], default=fallback[0])[0]
min_lat = min(coordinates, key=lambda c: c[1], default=fallback[1])[1]
max_lat = max(coordinates, key=lambda c: c[1], default=fallback[1])[1]
- return (min_lon + max_lon) / 2., (min_lat + max_lat) / 2.
+ return Point(((min_lon + max_lon) / 2., (min_lat + max_lat) / 2.))
-def find_map_center(wrgeojson: FeatureCollection, fallback: Tuple[float, float]) -> Tuple[float, float]:
+def find_map_center(wrgeojson: FeatureCollection, fallback: Tuple[float, float]) -> Point:
# Calculate center of the map
coordinates = geojson.utils.coords(wrgeojson)
return find_center(coordinates, fallback)
point = node_coordinates(element)
elif element.tag == 'way':
line_string = way_coordinates(osm_tree, element)
- point = find_center(line_string, fallback=(0., 0.))
+ point = find_center(line_string["coordinates"], fallback=(0., 0.))
else:
raise ValueError(f'Unsupported element: {element.tag}')
return Feature(geometry=point, properties=properties)
center = find_map_center(feature_collection, (0., 0.))
feature_collection = sort_features(feature_collection)
feature_collection['properties'] = {
- 'lon': center[0],
- 'lat': center[1],
+ 'lon': center['coordinates'][0],
+ 'lat': center['coordinates'][1],
'zoom': 14
}
return feature_collection