/// <summary>
        /// Adds an Edge, DirectedEdges, and Nodes for the given LineString representation
        /// of an edge.
        /// </summary>
        public void AddEdge(LineString lineString)
        {
            if (lineString.IsEmpty)
            {
                return;
            }

            var coordinates = CoordinateArrays.RemoveRepeatedPoints(lineString.Coordinates);

            if (coordinates.Length < 2)
            {
                return; // same check already added in PolygonizeGraph (see #87 and #146)
            }
            var startCoordinate = coordinates[0];
            var endCoordinate   = coordinates[coordinates.Length - 1];
            var startNode       = GetNode(startCoordinate);
            var endNode         = GetNode(endCoordinate);
            var directedEdge0   = new LineMergeDirectedEdge(startNode, endNode,
                                                            coordinates[1], true);
            var directedEdge1 = new LineMergeDirectedEdge(endNode, startNode,
                                                          coordinates[coordinates.Length - 2], false);
            var edge = new LineMergeEdge(lineString);

            edge.SetDirectedEdges(directedEdge0, directedEdge1);
            Add(edge);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="start"></param>
        /// <returns></returns>
        private EdgeString BuildEdgeStringStartingWith(LineMergeDirectedEdge start)
        {
            var edgeString = new EdgeString(_factory);
            var current    = start;

            do
            {
                edgeString.Add(current);
                current.Edge.Marked = true;
                current             = current.Next;
            }while (current != null && current != start);
            return(edgeString);
        }
예제 #3
0
 /// <summary>
 /// Adds a directed edge which is known to form part of this line.
 /// </summary>
 /// <param name="directedEdge"></param>
 public void Add(LineMergeDirectedEdge directedEdge)
 {
     directedEdges.Add(directedEdge);
 }