public GraphCursor(NetworkGraphEdges graphEdges) { _graphEdges = graphEdges; }
public void CreateGraph() { _graphEdges = new NetworkGraphEdges(); ProgressReport report = new ProgressReport(); //List<NetworkNode> nodes = _nodes.ToList(); #region Report report.Message = "Create Graph..."; report.featureMax = _edges.Count; //nodes.Count; report.featurePos = 0; if (reportProgress != null) { reportProgress(report); } #endregion #region Old and Slow //int nodeIndex = 0; //foreach (NetworkNode node in nodes) //{ // foreach (NetworkEdge edge in _edges.SelectFrom(nodeIndex)) // { // _graphEdges.Add(new NetworkGraphEdge(edge.FromNodeIndex, edge.ToNodeIndex, _edges.IndexOf(edge), edge.Length, edge.GeoLength)); // } // foreach (NetworkEdge edge in _edges.SelectTo(nodeIndex)) // { // if (edge.OneWay == false) // { // _graphEdges.Add(new NetworkGraphEdge(edge.ToNodeIndex, edge.FromNodeIndex, _edges.IndexOf(edge), edge.Length, edge.GeoLength)); // } // } // nodeIndex++; // #region Report // if (nodeIndex % 100 == 0) // { // report.featurePos = nodeIndex; // if (reportProgress != null) reportProgress(report); // } // #endregion //} #endregion int edgeIndex = 0; foreach (NetworkEdge edge in _edges) { _graphEdges.Add(new NetworkGraphEdge(edge.FromNodeIndex, edge.ToNodeIndex, edge.Id, edge.Length, edge.GeoLength)); if (edge.OneWay == false) { _graphEdges.Add(new NetworkGraphEdge(edge.ToNodeIndex, edge.FromNodeIndex, edge.Id, edge.Length, edge.GeoLength)); } edgeIndex++; #region Report if (edgeIndex % 100 == 0) { report.featurePos = edgeIndex; if (reportProgress != null) { reportProgress(report); } } #endregion } #region Report report.Message = "Sorting Graph..."; report.featurePos = report.featureMax; if (reportProgress != null) { reportProgress(report); } #endregion _graphEdges.Sort(new NetworkGraphEdges.NodeIndexComparer()); //_graphEdges.RemoveDoubles(); #region Create Graph Row Index //List<NetworkNode> nodes = _nodes.ToList(); //NetworkNode comparerNode = new NetworkNode(-1, null), actNode = null; //NetworkNodes.NodeIdComparer idComparer = new NetworkNodes.NodeIdComparer(); //int RowIndex = 1; //foreach (NetworkGraphEdge graphEdge in _graphEdges) //{ // if (comparerNode.Id != graphEdge.FromNodeIndex) // { // if (actNode != null) // actNode.LastGraphRow = RowIndex - 1; // comparerNode.Id = graphEdge.FromNodeIndex; // int nodeIndex = nodes.BinarySearch(comparerNode, idComparer); // actNode = nodes[nodeIndex]; // actNode.FirstGraphRow = RowIndex; // } // RowIndex++; //} #endregion }