地理信息系统(GIS)网络分析功能的实现
网络分析作为GIS应用最主要的功能之一,在电子导航、交通旅游、城市规划以及电 力、通讯等各种管网、管线的布局设计中发挥了重要的作用。随着计算机及测 绘技术的不断发展,地理信息产业得以蓬勃发展,近几年来我中心面向社会的GIS应用开发不断增多,逐渐形成以MapObject和 MapGuide为主流的GIS应用开发体系。MapGuide是Autodesk公司的商业webgis产品,该产品合理的分配了客户机和服务器的运 算,实现了矢量数据的直接访问,优良的性能、可扩展性强,是webgis应用的首选产品之一。MapObject是美国ESRI生产的控件式GIS系统, 它性能稳定,价格适中,是目前非常流行的GIS系统开发平台。但这两个系统都没有现成的网络分析功能,为了满足用户的应用需求,我们通过二次开发为 MapGuide和MapObject分别定制了网络分析功能。
网络分析中最基本最关键的问题是最短路径问题。最短路径不仅仅指一 般地理意义上的距离最短,还可以引申到其他的度量,如时间、费用、线路容量等。相应地, 最短路径问题就成为最快路径问题、最低费用问题等。其实,无论是距离最短、时间最快还是费用最低,它们的核心算法都是最短路径算法。
最短路径的求解,必须把现实生活中的道路、管线等各种网络抽象成一种数学结构,这种抽象出来的数学结构被称为网络拓扑结构。于是各种网络分析技术实现的关键在于网络拓扑结构的建立和高效能最短路径算法。下面我们就这两个问题进行深入探讨。
最短路径算法
最短路径算法,关键是将一个物理网络结构抽象为一个数学网络结构,再利用数学方法进行求解。
1、算法选择
在 数学和计算机领域网络被抽象为图,再利用图论的方法计算最短路径。目前提出的基于图论的最短路径的算法大约有17种。经专家测试,其中有3种效果比较 好,它们分别是:TQQ、DKA以及DKD。其中TQQ算法的基础是图增长理论;后两种算法则是基于Dijkstra的算法。Dijkstra算法是经典 的最短路径算法,目前多数系统解决最短路径问题采用了Dijkstra算法为理论基础,只是不同系统对Dijkstra算法采用了不同的实现方法。
2、 经典Dijkstra算法的主要思想Dijkstra算法的基本思路是:将顶点分成两个集合S和T,已求出最短路的点置于S中,其它点置于T中。 开始时S中仅含起点vs,其它点全在T中,随着求最短路迭代工作的进行,S中的点逐渐增多,当终点vt也被纳入S中时,迭代结束。为了便于计算和区分各顶 点是否已进入集合S,给已求出到起点最短路的点vk赋以标号。这个标号由两部分组成,记为(d(vs,vk),i)其中i为vk到起点最短路上的前 点,d(vs,vk为从起点vs到vk的最短路长。因每个标号含有两部分,故称为双标号法。最短路径算法的基本过程如下:
- 给始点vs赋以标号(0,s),并置vs于置,其它顶点于集合T中。
- 对图G里起点在S中终点在T中的边ei,计算:d(vs,vk)=mim{d(vs,vi)+minj[Wij]|vi∈s,vj∈T}并将vk置于S中,同时赋给它标号(d(vs vk),i)。
- 重复步骤(2),当vt∈S时计算结束vt的第一个标号给出vs→vt的最短路长;利用第二个标号反向追踪,可得最短路径。
网络拓扑关系的获取与高效访问
要想用计算机程序实现Dijkstra算法,关键技术是用什么样的方式抽象出网络拓扑结构,及节点与节点的连通关系,并对网络拓扑结构进行高效能访问。
1、拓扑关系的获取
GIS 中的数据(如道路、管网、水系等)要进行最短路径的计算,就必须首先将其按结点和边的关系抽象为图的结构,这在GIS中称为构建网络的拓扑关系。只 有建立了拓扑关系,我们才能进行网络路径分析。GIS数据通常是图形数据和属性数据的有机集合。在ARC/INFO下利用命令CLEAN对道路网数据构建 网络拓扑,我们可以看到属性表,其属性数据中包括_Fnode (起点)和_Tnode(终点)两个属性项。该属性表中包含了一个完备的网络拓扑关系,即记录了该图拥有多少个节点,又记录了节点与节点的连通关系,不同 的_Fnode、_Tnode标号代表不同的节点,及一条线的起始节点和终止节点,拥有相同节点的线相连,从该表大家应该很清楚的看出道路网的拓扑结构。 构建网络拓扑是一个复杂的过程,在搭建用户应用系统时,一般使用ARC/IN FO等专业软件事先构件好网络拓扑关系,使用时只需访问GIS数据的属性表即可。
2、网络拓扑关系的高效访问
利用上面的属性 表我们可以有效的解读出一个网络拓扑关系,在按标记法实现Dijkstra算法的过程中,核心步骤就是从未标记的点中选择一个权值最小的弧 段,即上面所述算法的2)~3)步。这是一个循环比较的过程,如果不采用任何技巧,要选择一个权值最小的弧段就必须对属性表进行多次扫描,在大数据量的情 况下,这无疑是一个制约计算速度的瓶颈。下面主要就如何从含拓扑关系的属性表中解析一个简洁高效的网络拓扑存储结构进行讨论。在数学和计算机领域中网络拓 扑被抽象为图,所以其基础是图的存储表示。一般而言,无向图可以用邻接矩阵和邻接多重表来表示,而有向图则可以用邻接表和十字链表表示,其优缺点的比较。
综 合以上4种存储结构的优缺点,我们采用了两个数组来存储网络图,一个用来存储和弧段相关的数据(Net-ArcList),另一个则存储和顶点相关的数 据(Net-NodeIndex)。Net-ArcList用一个数组维护并且以弧段起点的点号来顺序排列,同一起点的弧段按权值排序。这个数组类似于邻 接矩阵的压缩存储方式,其内容则具有邻接多重表的特点,即一条边以两顶点表示。Net-NodeIndex则相当于一个记录了顶点出度的索引表,通过它可 以很容易地得到此顶点的出度和与它相连的第一条弧段在弧段数组中的位置。这样就可以以最快速度搜索出与任意节点相连的边在顶点已编号的情况下,建立Net -ArcList和Net-NodeIndex两个表以及对Net-ArcList的排序其时间复杂度共为O(2n+lgn),否则为O(m+ 2n+lgn)。这个结构所需的空间也是必要条件下最小的,记录了m个顶点以及n条边的相关信息,与邻接多重表是相同的。利用表1所提供的属性表,有向图 只需对Fode进行一次排序和一次索引,即可得到上面的两个数组,对与无向图则稍复杂一点。
最后我们所要作的事情就是进行算法2)~3) 步的循环求解最短路径。我们利用该方法在Vb开发环境中针对MapObject定制了具有网络分析功能的动态 连接库;在ASP.Net开发环境下,利用ASP.NetWeb服务为MapGuide成功的定制了网络路径分析服务器。在算法的具体实现中我们还吸收了 Moore-Pape算法的优点,使运算速度有了进一步提高,经测试,2万个节点, 25000条路全部遍历,平均只需1秒。完全可以满足用户在速度方面的需求。