自动构面算法——拓扑网络

Posted by 蒋波涛 26 October,2007 Views (1)Comment

在获得了一个任意折线网中的线段和节点以后,下面需要做的事情是将这些线段和节点组织为一个拓扑网络。拓扑网络是由Node和Edge组成的一个结构,在网络中的每一个Node都知道自己与哪些Edge连通,而每条Edge也知道自己的首尾点是哪一个Node,为了实现这个网络,我们需要通过某种数据结构来建构。

网络的节点和边的数据结构在许多GIS书籍中都写的非常清楚,数据结构的复杂度与程序执行的效率有一定关系,如果复杂度越低,程序执行的运算就越多,反之就越少,在计算机存储资源宝贵的时候,以时间换取空间是值得的,但现在,空间已经不成问题了,我们完全可以做复杂度高的数据结构,以降低运算事件。

    //边的数据结构
    class udtEdge
    {
        int _edgeID;//边的ID号
        public int EdgeID
        {
            get { return _edgeID; }
            set { _edgeID = value; }
        }

        IPolyline _EdgePolyline;//边所在的线段
        public IPolyline EdgePolyline
        {
            get { return _EdgePolyline; }
            set { _EdgePolyline = value; }
        }

        int _startPt;
        public int StartPt//边的起点
        {
            get { return _startPt; }
            set { _startPt = value; }
        }

        int _endPt;
        public int EndPt//边的终点
        {
            get { return _endPt; }
            set { _endPt = value; }
        }

        bool _direction = false;//边的正方向是否已经处理
        public bool Direction
        {
            get { return _direction; }
            set { _direction = value; }
        }

        bool _reverseDirection = false;//边的逆方向是否已经处理
        public bool ReverseDirection
        {
            get { return _reverseDirection; }
            set { _reverseDirection = value; }
        }

    }
    //节点的数据结构
    class udtNode
    {
        int _nodeID;//节点号

        public int NodeID
        {
            get { return _nodeID; }
            set { _nodeID = value; }
        }

        IPoint _pt = null;//节点所在的点

        public IPoint Pt
        {
            get { return _pt; }
            set { _pt = value; }
        }

        List<udtEdge> _edgeCol = new List<udtEdge>();//节点联通的所有线段
        public List<udtEdge> EdgeCol
        {
            get { return _edgeCol; }
            set { _edgeCol = value; }
        }

        List<double> _edgeNodeAngleCol = new List<double>();//节点与联通线段的角度
        public List<double> EdgeNodeAngleCol
        {
            get { return _edgeNodeAngleCol; }
            set { _edgeNodeAngleCol = value; }
        }
    }

在定义了节点和边的数据结构以后,我们就该将节点和边对象逐个用节点和边数据结构来进行描述,这才是网络建构的重点。

Related Items

Categories : ArcObjects Tags : ArcObjects  计算机图形学  
Comments
2007-11-3 0:32:54

终于出新东西了。

Posted by forest Gravatar Icon

Leave a comment

Or, take a look at Archives and Categories

目录

存档