예제 #1
0
 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)
예제 #2
0
 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