自动构面算法——拓扑网络
在获得了一个任意折线网中的线段和节点以后,下面需要做的事情是将这些线段和节点组织为一个拓扑网络。拓扑网络是由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
Comments
Leave a comment
Or, take a look at Archives and Categories
终于出新东西了。