class StreetLoader: street_categories = [ 'road', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential', 'service', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link', 'pedestrian'] def __init__(self, categories=None): self.api = OverpassApi() self._add([] if categories is None else categories) self.tags = self._generate_tags() def load_data(self, bbox): data = self.api.get(bbox, self.tags) return self._generate_street(data) def _add(self, categories): for category in categories: self.street_categories.append(category) def _generate_tags(self): tags = [] for category in self.street_categories: tags.append(Tag(key='highway', value=category)) return tags @staticmethod def _generate_street(data): streets = [] for feature in data['features']: coordinates = feature['geometry']['coordinates'] nodes = [] for coordinate in coordinates: try: lat, lon = coordinate[1], coordinate[0] except TypeError: logger.exception() logger.warn("feature was: {}, coordinate was: {}".format(feature, coordinate)) else: nodes.append(Node(lat, lon)) streets.append(Street(nodes)) return streets
class NodeLoader: def __init__(self): self.api = OverpassApi() def load_data(self, bbox, tag): data = self.api.get(bbox, [tag]) return self._generate_nodes(data) def _generate_nodes(self, data): nodes = [] for feature in data['features']: all_nodes = self._feature_to_nodes(feature) nodes.append(self._get_centre(all_nodes)) return nodes @staticmethod def _feature_to_nodes(feature): nodes = [] coordinates = feature['geometry']['coordinates'] if isinstance(coordinates, tuple): nodes.append(Node(coordinates[1], coordinates[0], 0)) else: for coordinate in coordinates: nodes.append(Node(coordinate[1], coordinate[0], 0)) return nodes @staticmethod def _get_centre(nodes): sum_lat = 0 sum_lon = 0 for node in nodes: sum_lat += node.latitude sum_lon += node.longitude length = len(nodes) centre_latitude = sum_lat / length centre_longitude = sum_lon / length return Node(centre_latitude, centre_longitude, 0)
class StreetLoader: street_categories = [ 'road', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified', 'residential', 'service', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link', 'pedestrian' ] def __init__(self, categories=None): self.api = OverpassApi() self._add([] if categories is None else categories) self.tags = self._generate_tags() def load_data(self, bbox): data = self.api.get(bbox, self.tags) return self._generate_street(data) def _add(self, categories): for category in categories: self.street_categories.append(category) def _generate_tags(self): tags = [] for category in self.street_categories: tags.append(Tag(key='highway', value=category)) return tags @staticmethod def _generate_street(data): streets = [] for feature in data['features']: coordinates = feature['geometry']['coordinates'] nodes = [] for coordinate in coordinates: nodes.append(Node(coordinate[1], coordinate[0])) streets.append(Street(nodes)) return streets