/// <summary> /// Gets the edge represented by the given directed id. /// </summary> public static RoutingEdge GetEdge(this RoutingNetwork graph, long directedEdgeId) { if (directedEdgeId == 0) { throw new ArgumentOutOfRangeException("directedEdgeId"); } uint edgeId; if (directedEdgeId > 0) { edgeId = (uint)directedEdgeId - 1; } else { edgeId = (uint)((-directedEdgeId) - 1); } return(graph.GetEdge(edgeId)); }
/// <summary> /// Merges vertex2 into vertex1. /// </summary> public static void MergeVertices(this RoutingNetwork network, uint vertex1, uint vertex2) { // get and save edge for vertex2. var vertex2Edges = new List <RoutingEdge>(network.GetEdgeEnumerator(vertex2)); // remove edges. network.RemoveEdges(vertex2); // add edges. for (var i = 0; i < vertex2Edges.Count; i++) { if (!vertex2Edges[i].DataInverted) { // not inverted, add as vertex1 -> to. network.AddEdge(vertex1, vertex2Edges[i].To, vertex2Edges[i].Data, vertex2Edges[i].Shape); } else { // inverted, add as to -> vertex1. network.AddEdge(vertex2Edges[i].To, vertex1, vertex2Edges[i].Data, vertex2Edges[i].Shape); } } }
/// <summary> /// Gets the shape points including the two vertices. /// </summary> public static List <Coordinate> GetShape(this RoutingNetwork graph, RoutingEdge edge) { var points = new List <Coordinate>(); points.Add(graph.GetVertex(edge.From)); var shape = edge.Shape; if (shape != null) { if (edge.DataInverted) { shape = shape.Reverse(); } var shapeEnumerator = shape.GetEnumerator(); shapeEnumerator.Reset(); while (shapeEnumerator.MoveNext()) { points.Add(shapeEnumerator.Current); } } points.Add(graph.GetVertex(edge.To)); return(points); }
/// <summary> /// Gets all edges starting at this edges. /// </summary> public static List <RoutingEdge> GetEdges(this RoutingNetwork network, uint vertex) { return(new List <RoutingEdge>(network.GetEdgeEnumerator(vertex))); }
/// <summary> /// Adds a new edge. /// </summary> public static uint AddEdge(this RoutingNetwork network, uint vertex1, uint vertex2, Edges.EdgeData data, params Coordinate[] shape) { return(network.AddEdge(vertex1, vertex2, data, new ShapeEnumerable(shape))); }
/// <summary> /// Returns the location on the network. /// </summary> public static Coordinate LocationOnNetwork(this RoutingNetwork network, uint edgeId, ushort offset) { return(network.GeometricGraph.LocationOnGraph(edgeId, offset)); }
internal EdgeEnumerator(RoutingNetwork network, GeometricGraph.EdgeEnumerator enumerator) { _network = network; _enumerator = enumerator; }