1、基于 ArcGIS 管网爆管分析的算法优化与实现第 33 卷第 1 期2008 年 1 月测绘科学ScienceofSurveyingandMappingVo1.33No.1Jan.基于 ArcGIS 管网爆管分析的算法优化与实现刘建川,李永树,蔡国林(西南交通大学测量工程系,成都 610031;四川省基础地理信息中心 ,成都610031)【摘要】爆管分析在城市管网地理信息系统的建设中具有重要的意义.本文首先分析了 ArcGIS 网络模型和流向生成,对传统的广度优先算法进行了优化,并在此基础上,完成了上游关闭阀门的搜索和爆管的影响区域分析;然后利用 COM 技术对爆管分析功能进行封装,实现了该
2、模块的重用.【关键词】ArcGIS; 爆管分析 ;网络模型;广度优先算法;COM【中图分类号】P208 【文献标识码 】A【文章编号】1009-2307(2008)01021503DoI:10.3771/j.issn.10092307.2008.01.0671 引言随着我国城市化进程的加快,城市管网变得越来越庞杂.由于管网绝大部分埋设在地下,尤其是供水,天然气等压力管网,其爆管事故屡有发生,这就要求相关部门在爆管后能快速,准确地确定爆管的地点,影响范围和爆管后应关闭的阀门,并实施相应的抢修方案.目前,许多城市已建立了一些地下管线管理系统(如供水,供热,供气等管网),这些系统都不同程度地实现了爆
3、管分析功能.但由于其数据模型不完善,使得所实现的爆管分析功能存在以下问题:1)大部分系统仅使用简单的广度优先算法对最近阀门进行搜索,而没有考虑管网的物质流向,结果导致关闭阀门的方案不一定是最优的(可以不关闭的阀门也被关闭了).2)即使是支持管网流向分析的地理信息系统平台(如 ArcGIS),也只提供了对树状管网进行爆管分析的函数接口(ITraceFlowSolverGEN).但城市管网的布设大多为环状,若仅使用 ArcGIS 所提供的接口函数将很难对环状管网进行最优爆管分析.基于此,本文将在分析 ArcGIS 网络数据结构,流向生成及优化传统的广度优先算法的基础上,实现上游关闭阀门的搜索和爆管
4、的影响区域分析,并进行相关功能模块化.2ArcGIS 的网络模型和流向生成2.1ArcGIS 的网络模型在 ArcGIS 中 ,对线性网络系统的表达有两种模型:几何网络模型(GeometricNetwork)和逻辑网络模作者简介:刘建川(1977 一),男,四川成都人,硕士,从事地理信息系统开发,3S 技术及应用研究工作.Email:mymailofljc163.con收稿 13 期:20061121型(LogicalNetwork).几何网络模型是要素的集合,是由边线和交汇点相连组成的系统.一条边线有两个交汇点,而一个交?点可以与任何数量的边线相连 ,描述边线和交汇点的要素被称为网络要素(N
5、etworkFeatures).逻辑网络也是由一系列的点和弧段连接组成,与几何网络不同的是逻辑网络不包含坐标值,其主要目的是用特定的属性表存储网络的连通性信息.由于逻辑网络中的边线和交汇点没有几何属性,所以它们不是要素,而被称为元素(Elements).在逻辑网络(LogicalNetwork)中点和边的拓扑关系用三个属性表来描述:边元素表,点元素表和连通性表.几何网络的网络要素和逻辑网络的元素问有一对一和一对多的关联关系(如图 1 所示).一个几何网络总是关联到一个逻辑网络,当编辑几何网络对象时,逻辑网络中的要素将自动更新.图 1 几何网络与逻辑网络的关系2.2 网络中的流向(Network
6、Flow) 生成_塞翅翰熊真一断开/-.I中流的源点和流的终止点,这样就可以在网络中生216 测绘科学第 33 卷成流向.进行爆管分析时,将管网中能源的供给点(如水厂,供热站,供气站等)设置为源点(Source),能源的使用点 (如用户)设置为终止点(Sink),然后使用函数接口(IutilifyNetworkGEN) 生成流向.在 ArcGIS 网络模型中可形成三种流向:DeterminateFlow(已知流向 ),IndeterminateFlow(未知流向)和 Uninitialized(未初始化流向 ).在一个源点(Source)的情况下 ,树状网络结构将全部生成已知流向;环状结构则部
7、分生成已知流向,部分生成未知流向,而与源点不相连的部分则生成未初始化流向(如图 2 所示).对于有多个源点的情况下,则大部分主干网络都生成未知流向.3 广度优先算法的优化由前面对 ArcGIS 网络模型的分析可以看出,在只有一个源点且网络成树状的情况下才能生成已知流向,才能直接使用 ArcGIS 所提供的函数接口(ITraceFlowSolverGEN)寻找上游最近可关闭的阀门.而城市管网一般为环状且有多个源点(Source),这时文献 7中介绍的方法就存在明显不足.为此,本文借助 ArcGIS 的网络模型和流向生成的优点,使用优化的,度优先算法实现爆管分析功能.在传统的广度优先算法中,只考虑
8、 r 网络中边和结点的连通性,没有考虑边上的物质流向,所以在搜索时,只能机械地在爆管发生处向两边搜索最近的阀门,致使下游不需要关闭的阀门被关闭,从而不能进行正确的影响区域分析.所以在运用广度优先算法中,要充分利用网络的拓扑结构,并顾及边上所生成的流向,进而完成上游最近阀门的搜索.具体算法思路如下:设立阀门数组(Valve) 和节点队列 (Queue),将搜索的起始节点加入队列;从队列中取出一个节点P1,搜索与 P1 点相连的所有有效边集合 Edges;从Edges 中取出一条边 .判断其流向 :若为无流或顺向流则终止沿此边的搜索,若为未知流或逆向流则取出此边的另一个节点 P2(上游节点),并做
9、判断,若 P2为有效阀门点则将 1)2 加入阀门数组(Valve),否则将P2 加入队列 Queue;重复第 3 步,直到 Edges 为空为止;重复第 2 步,直到队列 Queue 为空.程序结构流程如图 3 所示:在上述搜索算法中,运用了逻辑网络(I,ogicalNetwork)中的三个函数接口 :INetTopology(实现网络的拓扑功能),INetAttributes( 查看网络元素的有效性),IutiliIyNetw0rkGEN(在网络中生成流和提取元素的流向).具体实现时应注意的问题是:在 ArcGIS 网络模型中,边元素上的流向是利用边元素两端点的方向性来判断的,如果流向是从边
10、的起点到终点,流向即为esriFlowDirection.esriFDwithFl0w(顺向流),反之则为esriFlowDirection.esriFDAgainstFl0w(逆向流).因此,在搜索流向的上游方向时,首先判断 P1 点是边的起点还是终点,然后结合边的流向判断 P2 点是否为该边的上游流向点,如此便可正确搜索到上游最近的阀门.对于流向为未知流向或无流向的边元素则不作以上的判断,直接按算法搜索.图 3 广度优先算法搜索最近阀门的程序结构流程图4 爆管分析的实现与模块化封装4.1 爆管分析的实现在爆管分析中,主要问题是:搜索上游最近的阀门和分析关闭阀门后的影响区域.本文将 ArcG
11、IS 网络模型的接口函数与上述阀门搜索算法结合,有效地解决了这两个问题.具体思路如下:1)利用 INetFlag 接口为爆管位置设置标记 (Flag).爆管可分为两种类型:边上爆管和点上爆管.对于边上爆管可直接设置边标记(EdgeFlag),然后判断边上的流向,根据不同的流向决定阀门搜索的方向(已知流则用上游点进行阀门搜索,未知流则分别用两个端点进行阀门搜索,未初始化流则不搜索);对于点上爆管则直接用该点进行阀门搜索(先判断点是否为阀门类型,若是则应先设置此阀门为无效阀门再进行搜索).2)搜索到可关闭的阀门后,将这些阀门设置为无效(使用 INetworkFeature 函数接口);再用 ITr
12、aceFlowSolver 接口中的 FindFlowElements 函数查找与爆管地点相连通的区域,即为爆管的影响区域;最后还原阀门的有效性,恢复网络模型的初始状态.3)在进行阀门搜索前,应注意网络模型中的源点和流向的设置问题.首先搜索与爆管地点相连的源点,并生成网络流向(使用 IutiljIyNetw0rkGEN 函数接口).只有确保网络中有流向设置,才能完成上述的爆管分析功能.4)根据用户要求的方式输出爆管分析的结果(如应关闭的阀门,影响管线以及影响区域等).在具体编程时,应考虑到不同的用户显示分析结果的方式不同,将爆管分析结果的显示功能以事件接口的方式让用户根据自己的需要实现分析结果
13、的显示与查询(如图 4 所示).在实际的工作中,常常由于所需要关闭的阀门锈死,不能关闭而需要寻找其他方案,这就需要进行备选关闭阀门方案的搜索.在操作过程中,首先将不能关闭的阀门设置为无效(使用 INetworkFeature 函数接第 1 期刘建川等基于 ArcGIS 管网爆管分析的算法优化与实现 217口),然后再次进行最近阀门的搜索,即可找到备选的阀门关闭方案和影响区域.4.2 爆管分析的模块化封装ArcGIS 系列软件的核心为 ArcObject 组件,Ar-cObject 是由 C+语言根据 COM 技术编写的.所谓COM 技术是由微软公司最先提出的一种软件设计技术,在 COM 里,接
14、口提供了对象操作的机制.而接口是由一个或多个相关的方法,属性和事件组成的.通过 COM 技术可实现软件重用,程序封装和动态连接等.为了让用户可以更好地封装和设计与 ArcObject相兼容的类库工具,ArcGIS 提供了 ICommand 和 ITool两个重要的函数接口,只要在所定义的类中实现这两个接口,就可以像 ArcGIS 那样自定义自己的工具.具体方法如下:使用面向对象的编程语言(如 VB.NET)建立类库项目;在工程中添加相关的引用;在所定义的类中实现 ICommand 或 ITool 两个接口;编译工程生成 DLL 类库 ,并注册到注册表中 ;在需要此模块功能的应用程序中引用此类,
15、并将工具添加到ToolBarControl 控件中即可 .使用上述方法实现爆管分析功能的封装时,应充分利用接口的功能,分别定义属性接口,方法接口和事件接口:输入输出参数(如网络模型,阀门要素类等)定义为属性接口;主要的分析功能(如搜索阀门,影响区域等)定义为方法接口;主要的显示功能(如显示阀门,管线以及影响区域)定义为事件接口.这样用户就可根据具体需求应用相应的接口来实现自己的分析功能.在 VB.NET 环境下实现某供水管网爆管分析的菜单和界面.通过模块化方法,可实现代码重用和程序的封装,模块一经实现,用户可直接在其他系统中调用而不必去详细了解其内部的实现方式.5 结论1)通过对传统广度优先算
16、法的改进,能够很好地解决爆管分析中上游可关闭阀门的搜索和爆管的影响区域分析等问题.2)利用 COM 技术对爆管分析功能进行模块化封装,使得该模块可直接加载到其他相关系统中(如供水,天然气,供热等管网),用以提高软件的开发效率,节约开发费用,这在实际工作有着非常重要的意义.参考文献殷人昆,等.数据结构(用面向对象方法与 c+描述)M. 北京 :清华大学出版社 .杨姗姗.供水管网地理信息系统中爆管分析的设计与实现D. 武汉:武汉大学,20054.吴玮,等.基于 ArcGISEngine 的 GIS 开发技术探讨J.科学技术与工程,2006,(1).梁娟妹.给予接口的 ArcObjects 编程c/
17、第六届 ARCGIS 既 ERDAS 中国用户大会论文集.2004.程耀东,孙建国.基于组件的城市地下综合管网信息系统开发研究J.测绘与空间地理信息,2005,(2).ESRILibrary.ArcGIS?EngineDeveloperGuide(ArcGIS?9.0)z.陶国强.城市地下管线三维模型的实现J.测绘科学,2006,30(6).石吉宝,贾力辉.基于 ArcEngine 的城市供水管网信息系统的设计与实现J.四川测绘,2006,(6).(上接第 190 页)3YiningD,ManjunathBS,ShinH.ColorImageSegmentationC/ComputerVisi
18、onandPatternRecognition,IEEEComputerSocietyConference.FortCollins,COUSA.,19994:2038-2044.4YangCK,TsaiWH.ReductionofColorSpaceDimensionalitybyMomentpreservingThresholdingandItsApplicationforEdgeDetectioninColorImagesJ.PatternRecognitionLetter,1996,17:481_490.5薛丽霞,王佐成 ,李永树,汪林林.基于云模型的模糊边缘检测J.西南交通大学,200
19、6,41(1):85-90.6DengY,KenneyC,MooreMS,eta1.Peergrou789PfilteringandperceptualcolorimagequantizationC/ProceedingsofIEEEInternationalSymposlumonCircuitsandSystems.Orlando,USA,19994:21-24.DonyRD,WesolkowskiS.EdgedetectiononcolorimagesusingRGBvectorangleC/ProceedingsofIEEECanadianConferenceonElectricalandComputerEngineering.ShawConferenceCenter,Edmonton,Canada,1999:687692.李德毅,孟海军,史雪梅.隶属云和隶属云发生器J.计算机研究与发展,1995,32(6):16_21.孙伟,夏正良,潘泓.一种基于模糊划分的边缘检测算法J.中国图像图形,2004,9(1):18-22.JJ 一一 JJ12345678rr LrLr