コード例 #1
0
ファイル: NetworkBuilder.cs プロジェクト: jugstalt/gview5
 public GraphCursor(NetworkGraphEdges graphEdges)
 {
     _graphEdges = graphEdges;
 }
コード例 #2
0
ファイル: NetworkBuilder.cs プロジェクト: jugstalt/gview5
        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
        }