Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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);
                }
            }
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
 /// <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)));
 }
Exemple #5
0
 /// <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)));
 }
Exemple #6
0
 /// <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));
 }
Exemple #7
0
 internal EdgeEnumerator(RoutingNetwork network, GeometricGraph.EdgeEnumerator enumerator)
 {
     _network    = network;
     _enumerator = enumerator;
 }