Helper method for ShortestPath, to reconstruct path.

    Arguments:
      came_from: a dictionary mapping Point to (Point, Poly) tuples.
          This dictionary keeps track of the previous neighbor to a node, and
          the edge used to get from the previous neighbor to the node.
      current_node: the current Point in the path.

    Returns:
      A Poly that represents the path through the graph from the start of the
      search to current_node.

def _ReconstructPath(self, came_from, current_node):
    """
    Helper method for ShortestPath, to reconstruct path.

    Arguments:
      came_from: a dictionary mapping Point to (Point, Poly) tuples.
          This dictionary keeps track of the previous neighbor to a node, and
          the edge used to get from the previous neighbor to the node.
      current_node: the current Point in the path.

    Returns:
      A Poly that represents the path through the graph from the start of the
      search to current_node.
    """
    if current_node in came_from:
      (previous_node, previous_edge) = came_from[current_node]
      if previous_edge.GetPoint(0) == current_node:
        previous_edge = previous_edge.Reversed()
      p = self._ReconstructPath(came_from, previous_node)
      return Poly.MergePolys([p, previous_edge], merge_point_threshold=0)
    else:
      return Poly([], '')