def find_nodes_and_edges(self): ''' Taking all of the paths/roads in the given area, this breaks up those paths/roads into edges and stores in a list.''' self.edge_list = [] for way in self.ways: breakpoints = [] for i in range(len(way.nodes)): if way.nodes[i] in self.intersections: breakpoints.append(i) if breakpoints == []: new_edge = Edge() new_edge.set_start_node(way.nodes[0]) new_edge.set_end_node(way.nodes[-1]) if len(way.nodes) > 2: new_edge.add_multiple_nodes(way.nodes[1:-1]) new_edge.update_distance() self.edge_list.append(new_edge) else: new_ways = [] for point in range(len(breakpoints) - 1): new_ways.append( way.nodes[breakpoints[point]:breakpoints[point + 1] + 1]) for edge_way in new_ways: new_edge = Edge() new_edge.set_start_node(edge_way[0]) new_edge.set_end_node(edge_way[-1]) if len(edge_way) > 2: new_edge.add_multiple_nodes(edge_way[1:-1]) new_edge.update_distance() self.edge_list.append(new_edge)
def map_ends_to_edge(self): ''' Creates a dictionary that maps a tuple containing the end points of an edge to the corresponding edge. ''' self.nodes_edges = {} for edge in self.edge_list: ends = edge.start, edge.end self.nodes_edges[ends] = edge reverse_ends = edge.end, edge.start reverse_edge = Edge() reverse_edge.start = edge.end reverse_edge.end = edge.start reverse_edge.add_multiple_nodes(edge.node_list[::-1]) reverse_edge.update_distance() self.nodes_edges[reverse_ends] = reverse_edge