• 2.87 MB
  • 2022-04-22 11:25:48 发布

基于gis环境下供水管网故障时决策系统的研究

  • 78页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'湖南大学硕士学位论文GIS环境下供水管网故障时决策系统的研究姓名:肖化政申请学位级别:硕士专业:市政工程指导教师:许仁荣20030901 摘要,洒73231本文对邃理售惠系统(Gis)进行了一黢瞧豹赍绍,重点介绥了6is环凌下城市供永管网故障时的决策方案一优化豹关润方案和水力计算方法,以及ois环境下供水管网故障时决策祭统(GIS—OF)的设计思想、总体结构和荧键技术。GIS—GF系统是利用Maplnfo的二次开发工具MapBasic语裔,运用集成地图的方法(邸通过VisualBasic语言将MapInfo地图窗口集成至《VB疆序中)而开发逡采戆应震程痔。凌系绞孛,裁爱Maplnfo褒管理供农营嚣懿黛凌数据及霞形,供水篱网的属性数据襻储予Access数据蓐中,通过OLE技术将两者连接起来并实现一定的功能。在GIS—GF系统中,其关键是建立优化的关阎方案模块,它鼹实现水力计算模块的基础。根据管嘲的拓扑关系,运用图论中的BFS算法,建立了关阀模块,实瑷了警网鼓障时阕门熬往恁调度。透过低求攫下管网的水力诗黪,来模熬鼓障越秘荚阔螽豹承力工褫。按照软件工程的方法,本文经过系统分析,从当前人工系统出发,提出了61S-6F的结构及功能,Ⅲ并对这些功能模块的察现一一作了说明。关键词;供水管网必阀方案GISMapInfoBFS算法水力计算 AbstractGeographicInformationSystem(GIs)isintroducedradicallyinthisthesis.OptimizedschemesofvMveshutdownandhydrodynamicalcalculationscalleddecision—makingprojectunderGISenvironmentastheaccidentofurbanwatersupplynetworkhappenstancearekeyintroduced+Anddesignmethod,wholeconstructionandkeytechnologiesofDecision—makingsystemunderGISenvironmentwhentheaccidentofurbanwatersupplynetworkhappenstance(GIS-GF)areanalyzedatthesametime。GIS*GFareappliedprogramsdevelopedbyMapBasiclanguageofseconddeveloptoolinMapInfo,andbythewayofintegratingmaps,thatistosay,mapwindowinMaplnfoisintegratedintoVisualBasicprogrambyVisualBasiclanguage.Inthissystem,spatialdataandgraphicsofwatersupplynetworkaremanagedbyMaplnfotables+CharacteristicdataofwatersupplynetworkarestoredintheAccessdatabasement.AndtheyareconnectedbyOLEmethodandputintosomeoperations,EstablishmentofoptimizedmoduleofvalveshutdownschemeisthekeypartintheGF—GISsystem,andisthefoundationofrealizinghydrocalculationmodule.ValveshutdownmoduleisestablishedbyBFSalgorithminPlotTheory,basingonpolo垂calrelationshipofwatersupplynetwork,itimplementedoptimizedvalveattemper.Hydrodynamicsstatuswhentheaccidentofurbanwatersupplynetworkhappensoraftervalveshutdownaresimulatebyhydrodynamiccalculationsofnetworkwithlowerhydro—pressure.Aftersystemanalysis,constructionsandfunctionsofGF—GISareputforwardaccordingsoftwareellgineeringmethods.Fromnarrationofthe毡p-to—datemannedsystemandthenon,applicationsofthesefunctionmodulesareshowedbysteps.KeyWords:watersupplynetwork,schemesofvalveShutdown,GIS,MapInfo,BFSalgorithm,hydrodynamicalcalculations 1.1地理信息系统简介第一章概述地理信息系统的英文名称为GeographicalInformationSystem,缩写为GIS。地理信息系统通常泛指用于获取、储存、查询、综合、处理、分析和显示与地球表面位置相关的数据的计算机系统“1。它的特征有两点:一方面,它是一个计算机系统;另外一方面,它处理的数据是与地球表面位置相关的。地理信息系统是随着地理科学、计算机技术、遥感技术和信息科学的发展而发展起来的一个学科。地理信息系统萌芽于20世纪60年代初。加拿大的测量学家RogerF.Tomlinson和美国的DuaneF.Marble从不同角度提出了地理信息系统。1962年,Tomlinson提出利用数字计算机处理和分析大量的土地利用地图数据,并建议加拿大土地调查局建立加拿大地理信息系统,阻实现专题地图的叠加、面积计算等。与此同时,DuaneF.Marble在美国西北大学研究可以在数字计算机运行的软件数据系统,以支持大规模城市交通问题研究,并提出建立地理信息软件系统的思想。60年代为地理信息系统开拓期,注重于空间数据的地学处理,出现了一些处理城市数据(如美国人口调查局建立的DIME)、普查数据(加拿大统计局的GRDSR)的系统等。许多大学还研制了一些基于栅格系统的软件包,如哈佛的SYMAP、马里兰大学的㈣S等。70年代为地理信息系统之巩固发展期,注重于空间地理信息的管理。地理信息系统的全面发展应是70年代的事情,由于计算机硬件和软件技术的飞速发展,尤其是大容量存储设备的使用,促进了GIS在包括城市规划方面等诸多领域的应用和发展,不同专题、不同规模、不同类型的各具特色的地理信息系统被研制开发出来。这一阶段,GIS受到政府主管部门、开发商和工程技术人员的普遍重视,一些商业公司看准了它的商业价值,支付了巨额资金支持其研究开发。80年代为地理信息系统技术大发展时期,注重于空间决策支持分析。GIS技术逐步走向成熟,并在全世界范围内全面推广,其应用领域也不断扩大。中国于1985年成立了资源与环境信息系统国家重点实验室,美国于1987年成立了国家地理信息与分析中心,英国于1987年成立了地理信息系统协会。20世纪80年代是GIS发展具有突破性的年代,涌现出一批有代表性的GIS软件,如ARC/INFO,GENAMAP, SPANS,MAPINFO,ERDAS,Microstation,SICAD,IGDS/MRS等。90年代为地理信息系统的用户时代。一方面,地理信息系统己成为许多机构必备的工作系统:另一方面,社会对地理信息系统认识普遍提高,需求大幅度增加,从而导致GIS应用的扩大与深化。随着地理信息技术和数字化信息产品在全世界的推广。GIS已初步成为一种新兴产业,投入使用的GIS系统每2到3年就翻一番。如今,人们讨论的不再是是否需要利用GIS,而是如何利用GIS发挥其最大的效益。我国的GIS发展较欧美先进国家起步约晚15年左右,但发展速度并不很慢。1994年9月,我国国家测绘总局与美国ARC/INFO总部签订了合作的ARCCHINA计划。1997年国家环保局用世界银行支援项目“中国省级环境信息中心”,在我国27个省建立了省级环境信息中心。仅以GIS在城市方面的应用领域就有城市自来水、城市煤气、城市规划、城市地下管线、城市环境、城市道路、城市土地等,不胜枚举,至于其它各方面的应用诸如环境监测、水土流失、矿产资源、投资评价等更是屡见不鲜。我国GIS的第一阶段从1970年到1980年,为准备认知阶段,主要进行舆论准备并开始组建队伍和培训人才。第二阶段从1981年到1985年,为起步阶段,完成了技术引进、数据规范和标准的研究、空间数据库的建立、数据处理和分析算法及应用软件的开发等,对GIS进行了理论探索和区域性的实验研究。第三阶段从1986年到现在,为初步发展阶段,我国GIS的研究和应用进入有组织、有计划、有目标的发展阶段,逐步建立了不同规模的组织机构、研究中心和实验室。1994年中国GIS协会在北京成立嗍。所有这些都标志着GIS在我国的成长与发展。1.2地理信息在供水系统中的应用与发展GIS作为世界性的高科技领域学科和技术体系已渗透到各行各业。GIS在供水系统中也得到了广泛地应用,但主要集中在输配水管网的日常管理中,如上海、深圳、唐山等城市。天津大学环境工程系也曾根据供水企业的要求,先后以北京大学的Citystar和中国地质大学的EMDGIS为软件开发平台,建立了城市供水管网管理系统,实现了供水管网图形数据和属性数据的计算机录入、修改:对管线及各种设施进行属性查询、空间定位以及定性、定量的统计、分析;对各类图形(包括管线的横断面和纵断面图)及统计分析报表显示和输出;通过GIS的集成,使管网圆形库、属性数据库及外部数据库融为一体,不仅图文并茂,准确高效,而且宣于动态更新,从而大大提高了管网管理工作的效率和质量。湖南大学土木工程学院水工程系也进行了此方面的研究,建立了GIS环境下城市供水管网水力分析系统,主要包2 括这几个方面的功能:第一,供水管网基础资料及图档管理;第二,城市基础地理信息的管理;第三,用户信息管理;第四,管网压力监测数据管理;第五,基于GIS的供水管网水力计算模型的建立;第六,供水管网工作状况分析。目前我国大、中城市管网更新改造的任务逐年加大,迫切需求实用的管网水力分析及扩建改造优化设计的软件系统。然而,尽管近年来有关管网优化设计理论和方法的研究日趋成熟,但其应用并不广泛,究其原因就在于优化模型的建立及其解法与编程,对于部分设计人员来讲难度较大,尤其是扩建、改造方面的优化,不仅涉及的问题比较复杂,而且往往需要庞大的数据量。而解决这一难题的有效方法就是将管网计算理论、系统优化理论与GIS相结合,凭籍GIS强大的空间数据管理功能,利用GIS上的实际管网图构造出管网计算图形,并从GIS的属性数据库中提取有关数据,通过编制计算程序,进行水力工况分析。在此基础上再将GIS的网络分析与优化模型的建立及求解融合在一起,建立一个管网扩建、改造优化的辅助设计系统。1。这样不仅将优化设计的思想、方法渗透到管网建设中,有利于城市供水管网的合理布局与科学调整,为日后管网的优化调度奠定良好的基础:而且通过GIS将管网大量的基础数据、水力分析计算、优化设计计算以及设计方案输出等集成为易于操作的专业软件,为设计人员的实际应用提供了极大方便。优化设计的最终目的是运行优化。一个大型、复杂的管网做到安全可靠、经济合理的运行并非易事。从长远目标来看,根据可靠、准确的管网运行工况进行动态模拟,是实现管网优化运行的必经之路。而在管网建模过程中,GIS以其独特的优势,将作为对管网运行实施信息模拟不可替代的工具。在GIS的支持下,管网的结构参数和状态参数融为一体,可以利用GIS数字高程模型,模拟管网水压分布状态,并以二维或三维图形直观显示:也可以在多水源管网中寻求管网内供水分界线的变化规律,以合理设置供水分界地带的测压点,并确定各测压点之间的相互关系,为优化调度提供决策依据“1。当然,GIS应用于供水系统所产生的功效还远不止于此。就GIS本身而言,对空间数据的组织管理只是最基本的功能,而更深刻的内涵在于GIS的空间分析、模型分析所产生的信息,能够对自然过程或决策方案进行模拟和趋势预测,以便从中选择最优方案,避免管理和决策失误。此外,GIS的空间分析、网络分析还可以用于管道施工、管网维修方案等方面。如在管网建设施工中,利用GIS的缓冲区(Buffer)模型,对将要敷设的管道进行缓冲区分析,并将计算出的缓冲区与数字高程模型迭加,计算其工程土方量。又如在未来的管网事故紧急抢修时,可以采用GIS与GPS相结合,一方面通过GPS系统获 取抢修车的地面位置和路网交通状况,并将数据实时传送GIS,计算最短行车路线;另一方面利用GIS的关阀搜索、管网状态仿真模型,快速分析事故的影响范围和影响程度,模拟管网动态变化,以便调度管网有关设施,确保供水服务质量。显然与传统的事故处理方法相比,上述技术方案充分显示出现代信息技术高效率的优势。以上列举的各项只是GIS在输配水系统中的部分应用,实际上GIS在供水系统中还可以用于水资源规划与管理、地面水水质模型、地下水水质保护以及GIS结合专家系统实现供水系统区域优化等众多领域,并将日益发挥更多的功效。GIS在供水系统中进一步开发应用的前景十分广阔。要跟踪GIS技术的发展,选择一个成熟、优秀的GIS平台,对于许多用户来说则是至关重要的。近年来国产GIS软件中,比较著名的有北京大学的Citystar和中国地质大学的MAPGIS,前者在实现3S(GIS、RS、GPS)一体化方面较为出色:后者在图形处理、空间分析及用户界面等方面更胜一筹,两者已被许多用户选为基础平台进行二次开发,并在用户使用与开发者研制的过程中日趋完善。国外的GIS软件中,Mapinfo是比较成熟的GIS软件,是第一个与Windows兼容的32位地理信息系统,Mapinfo简单易学、功能强大、二次开发能力强,且可以与普通的数据库连接,因此用户数量增长十分迅速,并在各行各业中得到了广泛的应用,本文作者就是采用Mapinfo作为二次开发的平台。GIS在各个专业的综合、深化应用,首先要取决于地理信息建模系统的完善和支持,但同时更需要专业人员的积极参与,尤其是在新一代组件式GIS的开发研制中,这样才能不断拓宽GIS在本专业的应用范围,提高应用水平,使其由一个偏重于信息采集、管理、统计分析与处理的技术系统,逐渐发展成为功能强大的决策支持系统或专家系统,在未来的信息时代发挥更大的作用。1.3本课题的提出及研究内容近几年来,地理信息系统发展迅速,国家科委将其列入九五重中之重科技攻关项目。GIS技术在国防、城市规划、交通运输、环境监测和保护等与国家命脉相关的重要领域的成功应用,极大地推动了社会生产力的发展,因此地理信息系统应用于供水系统已是一种必然趋势。这将提高整个供水系统的管理水平,使水工业获得更大的发展空间。随着国民经济的快速发展,我国城市化进程日益加快,时代己对城市供水管网的规划及管理提出了更高、更新的要求。在供水管网的规划与管理方面,长期以来,我国城市供水规划关注的多是既定蓝图的实现,而忽视了规划本身对城市供水系统实施过程的调控作用。规划中往往缺乏对实施的可行眭论证和评4 估,造成规划就事论事,事实上成了一种短期行为或局部行为;另一方面,传统上的规划成果只包括图纸和说明书,这些都是静态的东西,而规划的实施事实上是一个处于动态的过程。当传统规划试图用静态的图纸来解决动态的实际问题时往往会出现许多矛盾,而解决矛盾的过程会使规划的实施大幅度偏离原来的目标,从而失去了原有规划的控制作用。现代规划比较注重从“方案”(plan)到“实施”(actualization)的全过程调控,强调规划是一种动态发展与整体协调的过程。之所以将规划理解成是“动态的过程”,一方面是因为规划面对的问题在不断变化,另一方面也由于参与决策的各方面对问题的态度在不断改变。在供水管网的管理方面,长期以来,我国供水管网的管理滞后于管网的建设,由于历史原因多数城市的供水管网信息资料管理工作滞后于城市建设速度。许多城市至今还存在着管网资料不全、资料数值精度不高等情况,不能适应现代管理的需要。为使供水管网的规划、建设、改造和管理始终处于最优控制状态,一方面要深入研究供水系统规划的优化技术,另一方面城市供水管网管理及规划信息系统的建立也势在必行。本课题在此背景下,研究GIS环境下的关阀方案并进行关阀前后水力工况分析。相对于传统的阀门调度而言,本课题的优化调度方案,将提高关阀准确性、降低关阀成本、提高工作效率,并输出停水管段、受影响的用户等信息,从而可以通知受影响用户提前作好停水准备,避免有较大的影响;并且可以指导阀门的布置:在那些管段需要增加阀门,以免当事故发生时,造成大范围的停水区域;在供水管网改造和扩建的时候,也可以起到指导性作用。通过正常时水力工况分析、故障时水力工况分析、关阀后水力工况分析,对调度送水泵站机组的运行起到指导性作用,优化管网压力,避免关阀后某些地区因为管网压力过高而再次爆管;在供水压力较低的时候,也可以应用本系统的事故时水力工况分析系统来计算,对供水管网的工况进行模拟分析。因此本课题对提高供水企业的社会效益和经济效益具有重要的现实意义。其具体开发内容如下:1)建立城市供水管网计算机辅助管理数据库,其主要内容如下:(1)供水管段数据库。包括的信息有:管段编号、上游节点编号、下游节点编号、流量、流速、管径、管长、管材,以及管段比阻、所在道路等信息;(2)供水管网节点数据库。其中的信息有:节点编号、节点流量、标高,以及X坐标和Y坐标等信息;(3)供水管网阀门数据库。其中的信息有:阀门编号、所在的道路编号、x坐标以及Y坐标等信息; (4)供水管网开口数据库。包括的信息有:开口编号、所在的管段编母以及x搬标帮¥坐标等信息;(5)供水管网用户数据库。其中的信息有:用户编号、用户名称、用户水量和矮开日警等信怠。2)建立城市供水管网开放性数据库,该数据库可以在已有供水系统信息基础上补充新的信息和图纸。3)建立城市供水管网瓷料查询系统,可提供两种查询方式:一种是点击地图奄询,一种是区域代码黉询;4)建立城市供水管网优化关阀系统。可以实现多赦障点,多求源的优佬关阀方案,故障处可以为管段、节点以及润门。5)建立城市供水管网水力工况分析系统。可以进行正常时、故障时、关阀后的水力模拟,并对謦蹲各个节点的水压和流爨进行比较,为送水泵站的调度提供支持。6)建立城市供水管瞬成果输出系统。该输出系统既可打印供水系统管网图纸及其相应信息,又可选择特定范围的供水管网图及其相应信息打印,并能打印故障时优饯关阀方察、停水管段信息以及影响用户倍息,还能够打印出水力计算的结果。6 第二章GIs—GF开发工具介绍利用开发工具充分发挥GIS的功能成为GIS信息管理系统评价的一个重要方面,因此如何针对不同的应用目标高效地开发出即合乎需要,又具有方便美观界面的应用型GIS成为开发人员普遍关心的问题。GIS-GF是由GIS集成二次开发而成,GIS集成二次开发是指以通用编程软件尤其是面向对象的可视化开发工具为开发平台,利用GIS工具软件实现GIS基本功能。VisualBasic6.0是一种可视化的、面向对象和采用事件驱动方式的高级程序语言,它编程简单、方便、功能强大,具有与其它语言及环境的良好接口,如今,有较大数量的应用程序是用VisualBasic6.0编写的。Maplnfo吸取了传统GIS系统的精华,并借助于计算机技术的发展,及时地将GIS的概念从大中型计算机的专用工作站引入到普通PC机上,MaplnfoProfessional6.0是目前世界上最为完备、功能强大、全面直观的桌面地图信息系统,它复杂而深层次的可视化地理分析功能,可以帮助用户在不同的数据之间建立关联,从地理学的角度来获取信息。VisualBasic6.0与MaplnfoProfessional6.0二者的结合,既可以大大提高开发效率,又能从外观、速度和GIS功能等方面使信息系统更加完善。2.1系统软硬件环境硬件基本配置内存:大于256MCPU:IntelPentium41.OG以上硬盘:40G以上显示器:SVGA彩显打印机:HP喷墨彩色打印机软件环境:操作系统:GIS系统软件:数据库管理系统:应用软件:WINDOWS98及以上版本MaplnfoProfessional6.0ACCESS97及以上版本VisualBasic6.0,AUTOCAD20002.2MapInfo的一般介绍1986年在美国纽约州的Tory市,Maplnfo公司宣告成立,并推出了Maplnfo的第一版本———MapInfov1.0及其开发工具MapBasic。Maplnfo推出后,由于7 它易学易用,功能强大,二次开发能力强,又能与日常的数据库建立连接,因此发展很快。1995年底,MapInfo又推出了其最新版本MapInfoProfessional。这是第一个可运行在Windows上的桌面地图信息系统软件。2.2.1桌面地图信息系统MapInfo的迅速发展,使一个新的市场——桌面地图信息系统市场也随之产生了。桌面地图信息系统不同于GIS,它面向的是各行各业,主要目的是建立信息系统,地图及在地图上进行的地理分析等功能只是一种手段。通过桌面地图信息系统,用户将各种数据放在地图上,使枯燥无味的表格数据可视化。Maplnfo公司把Maplnfo的市场定位总结为一个等式:Maplnfo=Mapping+Information。可以这样说,只要用到地图的行业,就有使用桌面地图信息系统的需求。而Maplnfo出色的数据引用和二次开发能力,保证了其在各行各业的广泛应用。Maplnfo能直接访问dBase,FoxPro和Excel的数据,并通过ODBC访问各种企业级数据库,如Oracle,Sybase,Informix,SQLSever等。通过地理编码和关系连接,Maplnfo可将这些数据以各种形式显示到地图上,使用户的数据可视化,思维可视化“1。Maplnfo的二次开发语言MapBasic是一种类Basic语言,简单易学,功能强大,使用MapBasic,用户可以方便地定制Maplnfo的界面,使Maplnfo中的操作自动化,扩展Maplnfo的功能,建立Maplnfo与其他应用程序的连接等“。桌面地图信息系统的发展,不但没有消减GIS的市场,反而促进了GIS市场的增长。这是因为,更多的用户从桌面地图信息系统中体会到使用地理分析和数据可视化所带来的好处。随着计算机的普及,桌面地图信息系统的市场潜力仍然很巨大。MapInfo公司希望每台Pc机上都有Maplnfo运行,将信息可视化、地图化的功能带给所有计算机用户。2.2.2Maplnfo的技术特点1)Maplnfo内置关系型数据库,并实现了电子地图与数据库的自动选择和双向查询。2)Maplnfo支持数字化仪的图形输入方式,直接生成矢量格式。Maplnfo支持目前市场上流行的7种图像格式,如BMP、PCX、JP6、DLL等。用户可以方便地将地图扫描成珊格图或矢量图,然后进行珊格数据和矢量数据的转换,生成矢量地图。3)Maplnfo采用图层的概念组织、管理数据;利用颜色、符号形状模板相结合的方式来表示数据符号,包括点符号、线符号、多边形符号以及图面注记4个类 别。4)MapInfo具有完备的地图制作工具,用户可以方便地绘制地图,MapInfo的节点自动跟踪功能,使用户能更加精细、方便地编制地图。5)通过地理编码,blapInfo可以完成两个或多个表之间的自动关联,进行空间信息的传送,满足用户空间分析的需要。6)MapInfo具有强大的数据兼容性,能接收多种不同数据,同时可输出数据给其他系统使用,包括MIF、DBF、DXF、ASCII文件。7)MapInfo具有OLE和OLEAutomation的功能。MapInfo可方便地嵌入Word、Execel等环境中,同时允许vB、C++、PowerBuilder把Mapinfo作为一个对象加以调用。8)Maplnfo的自动漫游功能,可满足用户全方位浏览图形的需要,更便于满足对动态物体的跟踪需要。MapInfo可对已有数据进行动态更新与维护,确保用户数据的一致性。2.2.3Maplnfo的基本功能1)测量分析:直线距离、可近度分析、面积测量。2)缓冲区分析:点周围、沿直线、沿曲线、加权缓冲区。3)地图代数:加减常数。4)多边形操作:多边形复合、点在多边形内、线在多边形内、多边形合并。5)DEM分析:高程等直线、地形图断面。6)其他功能:题布尔操作、邻近搜索、移动窗口过滤、最优路径、坐标几何、网络分析、投影变换。2.3MapInfo与VisuaIBasic数据共享VB与MapInfo数据共享的方法主要有‘”:方法一:利用剪贴板;方法二:利用WindowsAPI函数;方法三:利用DDE技术;方法四:利用OLE技术。其中DDE和OLE技术较为简便、实用。下面就实现VB与Maplnfo数据共享的DDE和OLE技术进行探讨。1。 2.3.1DDE技术DDE(DynamicDataExchange--动态数据交换)是Windows操作系统支持的机制,是一种通过应用程序共享的公共内存空间的实现其相互通讯的手段。它允许支持DDE的应用程序之间通过连续自动地交换数据进行会话。初始化DDE会话的应用程序称为目标(Client),响应目标的应用程序称为源(Serve)。MapInfo应用程序既可作为源,也可作为目标。且可同时参与几个会话,在一些会话中作为源,在另一些会话中作为目标嘲。它作为源或作为目标,没有特殊的差别,只是所担任务的不同。.1)VB作为目标,MapInfo作为源、当在vB里调用DDE实现与MapInfo的数据共享时,需指明:(1)源(Sever)程序名。其名必须唯一,通常为不带后缀的可执行文件名。(2)链接标题(LinkTopic)。它是一个包括扩展名的完整路径名。(3)链接项(LinkItem)。它是对DDE会话双方都有意义的数据。(4)链接模式(LinkMode)。DDE链接有三种模式:自动链接、手工链接、通知链接。2)MapInfo作为目标,VB作为源在MapBasic应用程序中调用DDEInitiate语句初始化DDE会话;然后用DDEPoke、DDEExecute、DDERequest$等DDE语句实现对源应用程序的控制;最后用DDETerminate或DDETermainateAH语句结束DDE会话。若把vB应用程序的窗体作为源,要把窗体的LinkMode属性设为Soure,其中的每一个文本框、标签和图片都可以成为DDE会话的项目。2.3.2OLE技术OLE(ObjectLinkingandEmbeding),意为对象链接与嵌入。是在DDE的基础上建立的,提供了一种使Windows应用程序之间共享数据和程序的机制“”。现在OLE是一个标准的组件集成和服务体系结构,OLE技术是目前非常流行的一种技术。vB中经常用到的有OLE可视化编辑、复合文档、拖动、剪贴板和OLE自动化等服务。OLE有4种基本的应用:对象链接(ObjectLink)、对象嵌入(ObjectEmbed)、OLE自动化(OLEautomation)和OLE控件。1)OLE对象是指由支持OLE技术的应用程序(OLE服务器)可提供的数据。2)对象链接是指在OLE对象和、,B中支持OLE控件之间建立一个链,并未将10 OLE数据复制过来。这是一种动态联系。3)对象嵌入是指将OLE对象复制到VB当前程序中,即在OLE控件内部保存数据。4)OLEAutomation--OLE自动化、即对象链接与嵌入自动化技术,是指通过编程来使一个OLE服务器应用程序自动修改它的OLE对象。OLE自动化使得vB程序使用另外程序的功能,如用Word的拼写器程序检查当前程序的文本框中文本的拼写错误而不必再费力编写相同功能的程序。如果通过OLE自动化技术,对OLE对象变量(如OLEobject。VB中为OLE进行自动化设计的对象类型)编程,引用存储在OLEobject变量中的对象进行自动化控制,OLE服务器对前台应用程序的要求在后台响应自动完成,用户就可以不用直接介入服务器的操作。GIS开发工具平台本身的复杂性对用户有一定的要求,易使非专业用户望而却步,将其通过OLE自动化技术转换成可被用户接收的、易操作的应用系统也是集成开发的初衷。Maplnfo具有对象链接和嵌入(ObjectLinkingandEmbedding,OLE)功能,允许其它支持OLE功能的应用程序把Maplnfo作为一个对象加以调用。Maplnfo作为OLE服务器向其它应用程序提供它的对象,而客户应用程序则使用它的对象。由于对象包含数据(属性)和功能(方法),可以调用OLEAutomation对象的代码执行相应的动作达到利用对象功能的目的。需要说明的是:应用程序引用的是对象的参考,而非对象本身。Maplnfo提供的OLE对象有可插入的可视控件(MaplnfoMap,地图控件)和不可视可编程对象(OLP,OLEprogrammableobject)—MapInfoApplication。MaplnfoMap控件对应的服务器只是Maplnfo中的地图服务器,不是Maplnfo开发工具平台。Map地图控件只能使用Maplnfo的部分特性来创建。显示和编辑地图,不是所有的Maplnfo功能都可以在地图嵌入范围内使用。进行Maplnfo集成二次开发,是指利用MaplnfoApplication对象集成开发来实现GIS功能。通过上面的分析,可以知道采用OLEAutomation方式来实现vB与MapInfo数据的共享是比较合适的。本文作者就是使用这种方法的。Maplnfo为支持OLE自动化而设计的指令主要有:Do(string)(将字符串转换为MapBasic语句来执行),Eval(string)(将字符串转换为MapBasic表达式,而且返回表达式的值),RunMenuCommand(menuid)(执行Maplnfo菜单或按纽命令)等。2.4集成图编程 2.4.1集成图(IntegeratedMapping)概念综述在Windows操作系统中,用户可以用MapBasic之外的其它编程语言来控制MapInfo。例如,如果知道如何用VisualBasic语言进行编程,那么就能够把一个MapInfo的地图窗口集成到VisualBasic应用程序中去,而编程工作的大部分工作都用VisualBasic来完成,这类应用开发称之为集成图(IntegeratedMapping),因为是把Maplnfo的地图操作功能集成到另一个应用程序中。如果已经知道如何使用其他编程语言,如C或者VisualBasic进行编程,你将会发现,采用集成图方式是把Maplnfo地图窗口集成到非MapBasic应用程序中去是一种很容易的事情,而且集成图窗口具有MapInfo地图窗口的所有操作功能。当把MapInfo地图集成到用vB开发的应用程序中时,用户见到的是一个地道的MapInfo地图窗口,而绝非BMP,MTF或任何别的类型的图形文件。用户可以对这个地图窗口进行交互操作,比如使用工具放大地图等。一个集成图窗口包含Maplnfe地图窗口中所有的地图操作功能““。在集成图应用程序中要执行一条在后台启动MapInfo的语句,可以通过调用VisualBasic的CreateObject0函数来启动MapInfo。MapInfo不声不响地在后台启动,不显示快速启动屏幕窗口。然后,程序通过构造代表MapBasic语句的字符串,用OLE自动化发送这些字符串给Maplnfo的方式来操作MapInfo。Maplnfo执行这些语句时,就像把这些语句输进MapBasic窗口中一样。在MapBasic编程环境中,要打开一个地图窗口,可用MapBasic的MapFrom语句,但在集成地图应用中,还要使用另外的语句(如SetNextDocumentParent),使这个地图窗口变为该应用软件的一个子窗口。这个过程叫做“再生(reparent)”该窗口,可以再生地图窗口、浏览窗口、统计窗口、布局窗口和图例窗口。图2.1显示了一个集成图应用的主要组成部分。2.4.2在VisuaIBasic中集成图的编程本节将详述如何把MapInfo的地图功能集成到VisualBasic应用程序中,这个讨论基于两个假定:一是已经了解Windows编程的基本术语和概念:二是已经知道如何使用VisualBasic编程,因为这里的讨论中例举的代码全是用VisualBasic语法。12 图2.1集成图结构1)启动Maplnfo要启动一个Maplnfo引用,需调用VisualBasic的CreateObject0函数,并把其返回值赋给VisualBasic的一个object变量,这个object变量成为全局变量,否则,当退出局部过程时这个MapInfo对象会被释放。例如,如果把object变量命名为“mapinfo”,那么以下语句就能启动MapInfo:Setmapinfo=createobject(“Mapinfo.Application”)要连接一个已经运行着的Maplnfo,需用VisualBasic的GetObject0函数。Setmapinfo=Getobject(,“Mapinfo.Application”)CreateObject0和GetObject()函数都是用OLE自动化连接MapInfo,在32位的Windows操作系统下,可以同时运行多个Maplnfo引用。如果已启动了Maplnfo,然后又启动另一个调用CreateObject0的集成图应用程序,就会有两个独立的Maplnfo引用在运行。2)发送命令到Maplnfo启动Maplnfo后,要构造代表MapBasic语句的字符串。例如,如果想要MapInfo执行一个MapBasic的OpenTable语句,就要构造以下字符串:msg=“ODenTable”“阀门.Tab”“Interactive”用OLE自动化连接MapInfo,就要用Do方法给MapInfo发送字符串。如下:mapinfo.Domsg当使用Do方法时,Maplnfo以命令的方式执行字符串,就好像把这个命令直接打进MapBasic窗口那样.3)获取返回值 要获取一个MapBasic表达式的值,需要构造一个表达式。例如,如果要检测MapBasi函数WindowslD(0)调用后的返回值,可在VisualBasic内构造如下字符串:msg--“WindowsID(O)”当用Eval方法时,MapInfo把这个字符串解释为一个MapBasic表达式,确定该表达式的值并以一个字符串的形式返回这个值。DimresultAsStringResult=mapinfo.Eval“WindowsID(0)”4)再生MapInfo窗口启动MapInfo之后,可使用MapBasic语句SetApplicationWindow来让Maplnfo的对话框和错误信息窗口从属于客户程序。下面的程序代码为再生Maplnfo地图窗口例子,其中的“FormName"是~个VB窗体的名字。msg=“SetApplicationWindow”&FormName.hwndmapinfo.Domsg如果想在VisualBasic程序中集成地图窗口,可在再生MapInfo地图窗口后给MapInfo发送一条SetNextDocument语句,例如:msg=“SetNextDocumentParent”&MapFrame.hwd&“style1”mapinfo.Domsgmsg=”MapFromStates”mapinfo.Domsg其中的SetNextDocument语句“再生”窗口,在SetNextDocument语句内要指定一个控件的Hlj『ND(句柄),以后的程序中,使用Map、Graph、Browse、Layout或CreateLegend语句建立一个窗口时,新建立起来的窗口都是再生的,而且都是把客户程序作为父窗口。在SetNextDocument语句中包含了一个Style子句,它控制着想建立的窗体的类型。上述例子中使用的是Style1,表示生成一个不带边框的子窗口;如果指定为Style2,则表示生成带半高标题栏的弹出式窗口(像Maplnfo的图例的子窗口);或者指定为Style3,产生带全高标题栏的窗口。对再生的每一个窗口,都要使用两条语句:一条是SetNextDocumentParent语句,后跟一条建立这个窗口的语句。建立起窗口之后,可以查询“Windows(0)”的值,以获得这个窗口的ID值,许多MapBasic语句要求知道窗口的ID值,以便在后面的程序中用这个ID值进行识别调用。14 mapid=Val(mapinfo.Eval(“WindowslD(0)”)5)再生图例窗口及其他特殊窗口Maplnfo有几种非模式的窗口,包括信息窗口、标尺窗口、消息窗口和统计窗口。要再生一个这些特殊的“浮动“窗口,就要用MapBasic的SetWindow⋯Parent语句。例如,如下语句再生信息窗口:mapinfo.Do“SetWindowInfoParent”&FindZipForm.hwnd再生信息窗口的过程与再生地图窗口是不同的,再生信息窗口时,不用SetNextDocument语句,这个过程之所以不同,是因为在应用程序中只有一个图例窗口,却可以有多个地图窗口。图例窗口是一个特殊情况,通常Maplnfo用户界面中只有一个图例窗口,正如只有一个信息窗口一样,但是MapBasic语言包含了一条CreateLegend语句,所以可以创造另外的图例窗口。要再生Maplnfo“仅有的一个”标准图例窗口,可使用MapBasic的SetWindowLegendParent语句。要建立一个自定义的图例窗口,可用MapBasic的SetNextDocument语句,然后用MapBasic的CreateLegend语句。可以创造一个在地图窗口内浮动的图例,方式是用SetNextDocument语句,指定这个地图窗口的hwnd为Parent,例如:mapinfo.Do“SetNextDocumentParentWindowlnfo(“&mapid&”,12)一Style1”mapinfo.Do”CreateLegendFromWindow”&mapid其中mapid为地图窗口的句柄,新创建的图例窗口为地图窗口的子窗口,所以生成的图例只能在地图窗口内“浮动”,而不能超越地图窗口以外。6)缩放地图窗口用户是否能缩放地图窗口,取决于如何设置应用程序。如果把一个地图窗口放进了一个vB图片框控件中,它就不能被缩放了。但是用一个如I界面再生一个地图窗口后,就允许用户缩放这个窗口了。用户缩放这个地图窗口时,Maplnfo不会自动调整窗口的内容使之填满新窗口。因此,如果应用程序允许用户缩放地图窗口,就必须调用Windows的API函数的MoveWindow来使地图窗口适应新的大小。例如,如果VB是在32位的Windows上运行,可用下面的Declare语句访问API函数MoveWindow: PublicDeclareFunctionMoveWindowLib”user32’Alias”MoveWindow”(ByValhwndAsLong,ByValxAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValbRepaintAsLong)AsLong当用户缩放地图窗口时,就调用MoveWindow函数,在VB中,缩放事件触发Form_Resize0过程,可以从这个过程内调用MoveWindow,如下例所示:DimmHwndAsLongmHwnd=Val(mapinfo.Eval(“WindowInfo(FrontWindow0,12)”))MoveWindowmUwnd,0,0,ScaleWindth,ScaleHeight,0数字12与MapBasic的标识WININFO_WND对应.ScaleWindth和ScaleHeight是、『B窗体的属性(Properties),代表窗体的当前宽度和高度.7)集成MapInfo的工具条按钮在客户程序中,不能直接使用Maplnfo的工具条,如果要在客户程序中使用MapInfo的工具条,必须用所用的语言来重新创建按钮。例如,如果想要让一个vB工具条按钮仿真一个标准的Maplnfo按钮,就要使用MapInfo的RunMenuCommand方法,这个方法与MapBasic的RunMenuCouⅡnand语句有相同的效果。例如,要使一个按钮具有Maplnfo的漫游工具那样的功能,需要使用如下语句:Maplnfo.RunMenuCommand1702当用户单击这个按钮时,程序就调用Maplnfo的RunMenuComman方法,将工具号1702(Maplnfo的漫游工具)活化。作为调用的结果,MapInfo的漫游工具变成了活化工具。“魔术数字”1702表示MapInfo的漫游工具,它是在标准定义文件Menu.def中定义的,其相对应的标识码为M_TOOLS_RECENTER。下面的语句例子与前面那个例子具有相同的结果:Maplnfo.RunMenuCommandMJOOLS_RECENTER使用标识符(如前面的M_TOOLS_REcENTER)可以增加程序的易读性。但是,如果打算把表示码直接用于vB程序代码中,就必须设置程序,让它包含一个相应的定义头文件,头文件是MapBasic.bas。8)自定义Maplnfo的快捷菜单如果在Maplnfo地图窗口中单击右键,Maplnfo就显示一个快捷菜单,这些快捷菜单在集成地图应用程序中也能使用。由于程序的应用目的各有不同,用户或许想要修改甚至清除Maplnfo的快捷菜单。例如,可能想要从地图窗口的快捷菜单中16 删除副本视图菜单命令,因为在集成图应用程序中不能创建副本视图。要从MapInfo快捷菜单中删除一条或多条菜单,要用MapBasie的AlterMenu⋯Result语句,或者用CreateMenu语句重新定义整个菜单。要在MapInfo快捷菜单上增加自定义的菜单项,就要用MapBasic的AlterMenu⋯Add语句,并要用CallingOLE或CallingDDE方法,详见“回调”部分。要删除整个快捷菜单,可使用MapBasic语句CreateMenu重新定义这个菜单,并用控制码“(一”作为这个新菜单的定义。例如,下面的语句就删除了地图窗口中的快捷菜单:mapinfo.Do“CreateMenu⋯Mappershortcut”“ID17AS”“(一”“"9)打印集成地图窗口MapBasic的PrintWin语句可以打印一个Maplnfo窗口,也可以用这条语句来打开集成图窗口,如下面的例子:PrivateSubMenu_PrintMap_ClickOmapinfo.Do“PrintWin’’EndSubPrintWin语句把集成图打印在一个单独的页上,在这个页上不附带其他内容,也可以使用MapBasic的SaveWindow语句把地图窗口内容输出到一个Windows源文件(w肝)中,然后再使用v13的PrintForm方法打印地图。10)检测运行时错误当客户程序发送一个Maplnfo命令时,这个命令可能失败。例如,当发送MapFromWorld命令时,如果这个表不存在,命令操作将失败,Maplnfo就产生一个错误码。要捕捉Maplnfo的错误,需要设置错误捕捉陷阱,就像处理任何其他OLE自动化操作过程那样。在vB的应用开发中,通常使用OnError语句进行错误捕捉。要确定在Maplnfo中出现错误的类型,需查看MaplnfoOLE自动化属性的LastErrorCode和LastErrorMessage。这些属性的细节,由“OLEAutomationObjectModel”可以知。编制一个将通过Automation调用的mbx程序,应力求简明,在这个mbx程序内避免使用MapBasic的onError语句,而应该在调用这个MapBasic程序之前进行仔细调试。11)OLE回调技术17 由某个事件导致Maplnfo访问客户程序的情况,被称为“回调”(Callback)。Maplnfo能在下列情况下发送信息给客户程序:一是用户用一个自定义工具操作MapInfo窗口;二是用户选择一个菜单命令;三是地图窗口发生变化;四是Maplnfo的状态栏内容发生变化。以下步骤讲述了使用OLE回调的大致过程““:(1)通过VB创建一个定义了一个或多个OLE方法的类(Class)。(2)如果你要仿真MapInfo的状态栏,应该建立一个叫做SetStatusText的方法,把这个方法定义成带有一个字符串的变元(参数)。(3)如果要MapInfo每当地图窗口发生变化时都通知客户程序,应该建立叫做windowContentsChange的方法。(4)如果要Malnfo每当自定义的菜单命令或按钮被使用时都通知客户程序,应该创建一个或多个方法。(5)用自定义的类创建一个对象。如果把这个类叫做“CMYClass”,通过以下语句建立这个类的对象:PublicmyObjectAsNewCMYObject(6)在程序启动了MapInfo后,调用MapInfo的SetCallback方法,并指定前面定义的对象名:mapinfoSetCallbackmyObject(7)如果要MapInfo在用户单击一个自定义的工具条按钮时通知客户程序,应该定义一个自定义按钮,向MapInfo发生一条AlterButton⋯Add语句,然后定义它调用的方法,如“CallingOLE方法名”,方法名在第4步中创建的。(8)如果想让MapInfo每当用户使用一个自定义菜单命令时都通知客户程序,应该定义一个自定义菜单命令。(9)在定义的方法内,要有必要的语句来处理MapInfo传送的变元(参数)。12)结束Maplnfo和vB程序如果通过调用vB的CreateObject0函数建立了一个新的Maplnfo引用,在释放这个Object对象变量时,MapInfo自动退出。如果这个对象变量是一个局部变量,需给它赋一个空值(Nothing)来结束Maplnfo:Setmapinfo=Nothing2.5数据结构和数据库 建立供水管网GIS,首先考虑的应是系统数据魔建立的问题,一切算法的实现都蔗基予一定数据结褐戆,一留系镜功畿的实现落有赖于数据库豹建立。GIS系统中数据分为两炎,一类是图形,我们称之为图形数据,也叫做空间数据;—类怒与蚕形相应豹僚患,我稻称之为属往数掇,遣翻傲箨空瀚数据。瘀蠲数据通常有矢量数据和栅格数据两种形式,GIS的数搬结构主要有三种:矢量数据结{訇、褥格数据结构和矢量栅格混合数据结丰弩。矢量数据就是代表图形的各离黻点平面坐标(x,y)的商序集合,矢量数据结构是一种墩常见的图形数据结构,主要用予表示图形元素几何数据之间及萁瞒性数据之间的褶互关系,通过记录坐标方式,尽可能将她理实体煦空间位置表现的精确笼误。地蠼实体可以分为点实体、线实体、谢实体兰种。点实体在二缀空间中,可以嗣一对坐标x、Y来定位。线实体可以认为是由连续的直线段组成的曲线,用坐标对的集合(x。Y,:姑,KI.I-k,Y。:)采记录。在记录面燕体时,通常通过记录面状地物的边界来实现,因而有时识称为多边形数掇。矢量数据鲍编码相对比较筒单,它主要是通过记录坐檬点的数馕来实现。点、线、面空间位置数据之间稃在着某种特定的拓扑关系,经摊列组合形成了九种形式的拓扑关系:点与点;点≮线;点与面;线与点;线与线;线与西{面与点;露与线;面与面。这类拓扑关系包括三炎,一类是拓扑邻接,存在于一个图的同类元素之间,te如图中敕节点之阕形成节点邻接芙系,榻连的弧段形成了弧段邻接,每个路径的左、右面域形成了谢域邻按;一类怒关联关系,存在于图的不同类型的元素闻,EE如嬲中的节点与会聚于结点处的弧段之间形成了节点一弧段关联关系,面域岛环绕该u黼域的诸孤段之间形成了弧段一糊域关联必系。另一类是包含关系,存在予霹类但不同级懿元素之阍。一旦建立这些拓扑关系,图形文{牛就撼供了-卜分方便的检索和使用基础。援据数据缝梭稠矢量糖播漫会数据结构由于强本系统努发中没毒履至I,在l鞋:不打算再加以介绍。数援疼系统(DataBaseSystem)是运趱计算枕投术管理数据款系统。数据露营理系统(DataBaseManagementSystem简称DBMS)怒一组计算机程序,控制组织和瘸户豹数攥疼煞黧残、缨护弱楚照。隧善诗算捉瘦弱鲍发鼹,DBMS匏珐懿惫寒愈强,规模愈来愈大,复杂性也随之增加。层次、网状和关系数据库燎数据库诞生以采广泛悫翔豹三耱数据瘁,一般稼是转统戮数据瘴。GIS褒一定意义上是诗簿瓠按术应用系统,其成用的数据库系统必须建立在常规数据库系统的基础上,数据库技术蠡冬发震溺筵也深亥《影璃羲GIS熬数据警溪模式。毽GIS又竣楚理窆凌数爨署羹空嚣关系为特点,其数据库系统中心必须增加空间类型及其空间数据操作,并撮供空间19 索引。经过这样扩充的数据库系统被称为空间数据麾系统。现流行的GIS系统多以DBMS鸯豢磷,跃关系数爨库替毽系统(RDBM$)为主,在近来又发展了对象一关系数据库系统(0RDBMS)或对簸数据艨系统(ODBMS)。地理信息系统的黧要特{芷之一是它能将空闷图形数据综合要a一个擎一酶系统,这样使得空蔺数据和菲空阕耩性数据之间的交甄复杂分析和建模成为可能。在空间数据库系统中,图形数据与专题属性数据一般采用分离组织存储魏方法存储,戳增强整个系统数据处理的灵活髋,尽可能减少不必要的机时与空间上的升销。然而,地理数据处理又要求对区域数据进行综合性楚疆,萁中包括图形与专飚属性数据处理。酾j篼,图形数据与专题属性数据的连接也是很重要的。图形数据与专题属性数据的连接基本上有4种方式:第一种,潮形数摅与专题鞴性数据分别管联;第二种,对道鞠DBMS避行扩箴以增加空阉数攒的管理能力;第三种,属性数摄与图形数据具有统一的结构;第四种,图形数据与藕性数据自成体系。本系统采用第一种方式。 第三章GIs—QF系统分析与设计系统分析的主要任务是将在系统详细调查中所得到的文档资料集中到一起,对组织内部管理状况和信息过程进行分析。它侧重于从业务全过程的角度进行分析。系统分析的目的是将用户的需求及其解决方法确定下来,这些需要确定的结果包括:开发者关于现有组织管理状况的了解:用户对信息系统功能的需求;数据和业务流程;管理功能和管理数据指标体系等。系统分析所确定的内容是今后系统设计、系统实现的基础。系统设计是信息系统开发过程中另一个重要阶段,是在系统分析报告的基础上进行的,其主要目的就是为下一阶段的系统实现(如编程、调试、试运行等)制定蓝图。在系统设计阶段,其主要任务就是在各种技术和实施方法中权衡利弊,精心设计,合理地使用各种资源,最终勾划出系统的详细设计方案。到目前为止,系统设计所使用的主要方法还是以自顶向下结构化的设计方法,但是在局部环节上使用原型方法、面向目标的方法,这是比较流行的发展趋势。系统设计阶段的主要依据是系统分析报告和开发者的知识和经验,主要内容包括系统总体结构框架设计、代码设计、数据库设计、输入/输出设计,处理流程及模块功能的设计““。3.1Gls环境下供水管网故障时决策系统的工作内容供水管网管理是自来水公司重要的日常工作之一。供水管网的优化关阀方案及水力工况分析是供水管网系统正常、高效运行的基础,同时,也为供水管网的改扩建和运行调度提供决策依据。基于地理信息系统(GIS)的供水管网故障时决策系统主要包括以下几个方面的工作⋯1:1)供水管网图纸及图纸更新资料的管理对于每一供水管道工程的图纸都应该审查,考虑当前的管网实际情况,经过管网水力工况分析和管网技术经济计算,提出改进意见。对于竣工工程,一般应交付大比例的竣工图纸存档,以备今后管网的改扩建和日常管理等使用。由于供水管线不断变化,旧的管线、阀门等应确定其位置,输入管网图中,新的管线也应尽快输入管网图,使现存的供水管网图尽可能反映实际的供水管网情况。2)大用户信息管理用户作为供水管网的终端,是城市供水管网信息管理的重要内容。对于用水21 量较大的大用户,其用户名称、接口位置、水表位置、用水量、用水规律等情况都应该存档,以备查看使用。3)供水管道开口的管理需要从市政管道上开口接管的用户应申报并得到批准方可实行,其开口位置、开口数等及相应施工图应存档。市政管线铺设时,其上的预留口的位置简图也应存档,以备用户开口接管时使用。4)供水阀门的管理供水管线上的阀门主要有:立式闸阀、卧式闸阀、蝶阀、止回阀、排气阀等,这些阀门的种类、规格型号、生产厂家、安装日期、施工单位、阀门位置、阀门口径、阀门的旋向、启闭圈数等参数都要存档,以备查看使用。5)城市基础地理信息的管理供水管网是城市的附属基础设旌,供水管网的图形管理当然离不开城市基础地理信息,比如城市道路、建筑、单位界地、水系、地形和地貌、高程等。城市基础地理信息应随城市建设不断进行更新。6)供水管网压力监测数据管理对于不同时段、不同季节的管网压力、流量等实测数据都应存档,以备今后查看使用。7)供水管网事故分析和决策当管网中的某一部件(如管段、节点、阀门等)出现故障时,确定最优的关阀方案,以便抢修人员进行抢修;确定停水范围和停水用户名单,以便通知用户作好停水准备。8)供水管网水力工况分析应定期根据用户水量等数据,根据供水管网图形形状,建立水力计算模型,进行水力计算,根据计算结果分析管网中不合理的地方,如超压区和欠压区等,提出改扩建意见。同时,根据管网的实测数据对管网模型进行修正,使其更符合实际情况。对事故时管网进行水力计算,为运行调度提供决策依据。3.2GlS-GF系统的需求分析系统需求分析是系统开发工作中最重要的环节之一,系统分析是解决将要开发的软件能够做什么,做到什么程度。系统需求分析的方法很多,常用的分析方法有面向数据流的结构化分析方法,面向数据结构分析方法和面向对象分析方法, 以及用于建立动态模型的状态迁移图或Potri网。以结构化分析(StructuredAnalysis)方法最为普遍,简称sA方法。sA方法的基本思想是“自顶向下、逐层分解”,把系统由整体向局部进行功能分解,直到分解成具有单一功能的最底层予系统。通过这一方法,利用分解和抽象这两个基本手段来控制系统的复杂性,从而将大问题分解为小问题,然后分别解决。在分解过程中,首先考虑的是问题的本质属性,暂时略去具体细节,以后再逐层添加细节,直到最详细的内容。这种方法采用图形方式进行,是系统分析的一种较好方法“”。结构化分析的主要工具有数据流程图和数据词典,根据系统分析确定人工管理系统模型等。3.2.1当前系统模型(人工管理系统模型)由前述GIS环境下供水管网故障时决策系统的工作内容,可以得到当前系统模型n61如图3.1所示。其中输入的原始数据包括:供水管道、节点、阀门、开口以及用户五个方面的图形和数据。图3.1当前系统模型 3.2.2人工管理系统逻辑模型在当前系统模型的基础上,必须抽象出逻辑模型,才能进行编程工作。GIS—GF系统从当前系统模型抽象出来的人工管理系统逻辑模型如下:1)原始数据系统应输入进行管理的数据有:供水管段、阀门、开口、用户、节点的图形及其参数。2)归类存档应按不同的类别存贮图形和数据,数据在存贮方式上可分为两大类:地理信息数据和相关的属性数据。地理信息数据以Mapinfo数据表存贮,而相关的属性数据以Access2000数据库存贮。.3)管网图形绘制根据管网工程图资料,在基础地理图上绘制出详细的管网平面图,比例可为1:500、1:1000或1:5000。4)管网工作状况分析根据管网图形和部件参数,形成水力计算模型,利用平差程序进行平差,显示平差结果,并据此进行水力状态分析。5)事故分析和决策当管网上某处发生故障时,应找出影响范围,提出关阀方案,并统计出停水用户,形成书面报告。6)数据查询、编辑常用的数据查询方式有:点选查询与区域代码查询。查询的内容包括有:部分区域管网图形查询,管网部件的位置及参数查询等。3.2.3目标系统的逻辑模型根据人工管理系统的逻辑模型,建立目标系统的逻辑模型如下:1)系统管理的数据包括:供水管段、阀门、节点、用户、开口五类,每类数据分为两种,一种是图形数据,一种是参数(属性)数据,两种数据分别输入存贮于图形数据库和属性数据库。2)对于图形和属性数据,都应提供编辑功能。3)为了进行图形和属性数据的双向访问,两者间要建立链接关系。4)在属性数据库中,保留反映数据间关系的字段,以加快查询的速度。24 5)根据数据库生成水力计算所需的数据文件,利用水力计算程序对不f闭状况下《歪常辩、事敖瓣及关润磊)懿綮网进簿承力计算,荠辩计算结采迸行院较。6)根据数据库形成事故分析对策时所需的数据文件,利用关阀程序进行事故捻修对策分耩,镪括箨承方案分褥稻影稳嗣户努耩。3,2,4Gl$-GF系统的数据流程分攒现有的数据流程分析多是通道分层的数据流稷图(dataflowdiagram,简称DFD)来实现的。数据流程鬻是结构位分析方法最蕊本的工其,它从数据角旋描述了数据作为输入对象进入系统,缀过加工戏合并,或分解或存储,最后作为输出产品离开系统的逻辑关系,也称逻辑数据流程图酾。箕萋本组成包括4个部分:外部实体、处理过程、数据存储和系统中的数据流。在数据流程图中分别用特定的符号来表示这魏部件,如图3,2所示。处理过程————————◆数据流●____’____。_____。●_-___-’H11。。‘。‘一豁酃实赣l鼗据誊旗图3,2数据流程豳图例GIS—GF系统的数据流程图如图3.3所示。3,2.5GIs—BF系统的数据字典1)貘零警爨j霾毪数掇=袋拳营段+节悫+阖门+开瑶+雳户,其孛供水管段属性=管段编号+起点编号+终点编号+所在路名+管长十管径+瞥材+管段毙疆÷堰设基期节点属性=节点编号十节点流缀+标高+x坐标+Y坐标阀门藩蕊=溺门编号+掰藩管段编号+X坐标+¥坐标+溺门类鍪÷淹门蜀强+壤设Fj期并翻_|I莺往=嚣日编号丰所属警羧编号+x坐稼+¥整振+嚣霜酲期口囝 图3.3GIS—GF系统数据流程图 用户属性=用户编号+所属开口+用户名称+所属工区+用户水墩2)鞠形数据一篌永管段+节点+闽门+角户+开盈黼形3)统计文件=管道统计文件十阀门统计文件十用户统计文件管道统诗文梅=管材+警径+管长+小诗+慧计阀门统计文件=类型十口径+个数十小计+总计掰户统计文件=水鲞范函+个数+小计永量+总计水量4)水力计算文件=水力计算管段文件+水力计算节点文件永力计算管段文俘一管段编芍+起煮编号+终点编弩+管长十管径+魄阻水力计算节点文件一节点编母+节点流量+地面标离+x坐标+Y坐标5)水力计算结采文件=结栗管段文件+结粜节点文件结果臂段文件=管段编号+镣段流量+管段流速结栗节点文件=节点编号+慧永鹾+自由承压+节点流量6)事故工况分析报俺=影响管段编姆+用户编号+哭阀编母+所在路名+潮户名称7)属性数据虐按系统管理酌属性数锘类型,分捌角Access2000建立了供水篱段、蠲门、节点、用户、开口赢个数撼库,管煺相应的数据。8)黼形数攒库在MapInfo中数据库经常被称为表。MapInfo中能使用两种袭:第一种是地蟪表,MapInfo中大多数寝是这种类型,它又可分为含图形对象的数据表帮不包含图形对象的数据表:第二种是栅格表,☆&在地图窗口中显示的圈像。本文作者采用的慧第一种表。表是MapInfo的数据与地图肖机联系的枢纽。在MapInfo中,图层是计算机魏国的构筑块,计算机地图实际怒多个圈层的集合。图瑟来自于含有图形对象的数据库表,每个食有图形对象的数据库表都可显示为一个图层。数据库袭主要由娩理底圈数据、点数据、线数据等组成,其中地瑷地图数据包含一些最基本酶信息,如道路、建筑物等;阀门、带点、开口等的空间数搬组成点数据;管段的空间数据形成线数据。其结构如图3.4所示。按照系统管理的属性数据类型,分别在Maplnfo中建立建筑、单位、衡道、供水管段、节点、开口、阀门等数据库袭,管理相应的地理信息数据“8H⋯。这里特别强调的是,由于MapInfo没褥提供拓扑分析功能,因此必须农数据席褒的设计中提供反映备图形对象拓扑关系的字敬。 各数据库的结构及说明见表3.1’表3.5。图3.4GIS—GF空间数据结构表3.1管线数据库结构字段字段名称字段类型字段长度小数位l序号字符型122管段编号字符型123管径数值型12O4管材字符型125长度数值型1216埋深浮点型637起点图号字符型128终点图号字符型129起始节点号字符型1210终止节点号字符型121l所在道路字符型2012埋设年代字符型12 表3.2节点数据库结构字段字段名称字段类型字段长度小数位l节点编号字符型122图幅号字符型123高程浮点型834节点流量浮点型835坐标X浮点型836坐标Y浮点型83表3.3阀门数据库结构字段字段名称字段类型字段长度小数位1阀门编号字符型122图幅号字符型123阀门口径数值型1204所在管段字符型125坐标x浮点型。836坐标Y浮点型83表3.4开口数据库结构字段字段名称字段类型字段长度小数位l开口编号数值型2002图幅号字符型123所在管段字符型124坐标X浮点型835坐标Y浮点型83 表3.5用户数据库结构l字段名称字段类型字段长度小数位2用户编号字符型123用户名称字符型244联系人字符型125联系电话数值型2006所接开口字符型7用户水量数值型1133.3GlS-GF系统模块设计软件开发在系统设计阶段可分为两个步骤,第一是概要设计即模块设计;第二是详细设计。概要设计考虑软件的总体结构,从功能上将软件划分为模块。3。根据系统总体功能目标,结合Maplnfo的二次开发功能,将GIS—GF系统分成4大功能子系统。分别是管网输入编辑子系统、管网管理子系统、关阀方案子系统、水力计算子系统。每个子系统由数个模块组成,如图3.5所示。管网编辑统空间数据库日日日属性数据库日日日管网输入ll管网管理编辑于系统}l子系统鞭懂关阀方案f子系统【[——]囊㈤方51况案|报图3.5GIS-GF系统结构图水力计算子系统正常水力计算事故水力计算统计常用工具信息查询条件检索 GIS~GF是以数据库为中心的系统,具有事务型的特征。”,其主要模块说明如下:1)文件管理功能:装入、僳存甏形文{争(MapInfo表>,懑密系统2)管网编辑功黥:露营线、节煮空闯数攥的各种操俸和编辑,辩管线、留点参数和属性的编辑和修改,提供可视化编辑功能。3)窝闯数攒转入功能:可由空间数据库转入,也可由其它格式数据转入,以及键盘输入。4)统计功能:对管段、闸门、用户的信息进行统计,形成相应的统计文件。5)条件查询功能:查询阁上某一图形元素(如管段、阀门等)的属性数据,位置等。s)荚润优纯方案功能:分析管网上的管段、节点或阀门出故障时影响用户和成采取的关阀方案。7)事故水力计算功靛:提取耩缝数据痒中的麟性信惑和拓矜债息,形成管风承力计算时所需要的原始数据文件,再利用水力计算程序进行计舞,形成结果数据文件。3.4GJS-GF代码设计代码设计问题是一个科学管理的问题。设计出一个好的代码方案对于系统的开发工佟是一{串凝麓褰裁戆事情。健玛就是激数躐字蟹来代表各耱客霾实俸。在系统开发过程中设计代码目的是:第一,客观实体的唯一化;第二,客观实体的筑范纯;第三,褰鼹实侮豹系统纯。编聪瓣霆静关键在予分类。蠢了一令疆学豹分类,系统要建立编码就很容易丁。准确的分类怒工作标准化、系列化、合理化觞基稿和僚证。分类覆耍《瘫遵蕤嘲:第一,宓矮绦证有足够戆容鬃,要是戳包括规定范围内的所有对象;第二,按属性分嶷;第三,分类疆有一定的柔性,不至予在密璇交更时酸环分类靛结构;第霞,注意本分类系绞与矫系统、己鸯系统静协调。分类的方法有两种,一是线分类,=是面分类。编码归纳为以下几种形式:第一秘怒颓痔鹂,第二稀是鼗字褊,第三静是字德码,第鹜释是混台码。 在进行基础地理信息和供水管网数据组织时,设计一套合理的编码有利于信惑静分类管瑾帮瓣痒,苟明显提裔查询速菠窥方便网络分辑,同耩雩也方便了罱户进行数据维护,如数据的添加、修改等。因此必须为一些主要的信息对象设计编弱。设诗编码匏激辩是采麓结{訇纯的编鹨方案,戳便容荔鸯将来酌国家标准接轨,同时充分考虑到当地的地理情况和特点。根据上面的分析,确定道路、管段、节赢、阀门及开口酌编码方式如下:1)邋路码格式为3靛数字编码:方位及分类粥(1位)十路线码(2位)。方位及分类码:“l”表示东谣方向的主于道路;“2”表永南托方淘主干邋;“3”表示西北一东南方向普通道路及市区老路:“4”寝示东北一西南方向的普通道路及市区老游;“5”滚示东落方向鹃街坊路;“6”表示西jE~东南方囱街坊路;“7”表示南jE方向街坊路;“8”表示东jb一西南方向街坊路。路线码对东西方向的道路,从北往南逐条编码,对藏jE方淘的道路,放西缓东逐条路编码。于是这兰个数字裁形成了路名码,它与镪条路名一一对应,不同的道路有不同路名码。2)供水管蔽鼢编码勰定为8位字符褥:分类码(2位)+路名秘(3位)+j|夏序玛(3位),其中第一位分类码字符代表管段的类别,取其汉语拼音的字头,如,供求管用“SG”表示。后六位构成傲水管段码,由管线所在道路静精名码和阋一道路上管段的顺序码组成。3)供永节点静编码定为7位:分类褥(2谴)+路名磷(3位)十顺序码(2位),其中前两位分类鹕字符代表供水节点的类别,取其汉语拼音的字头,如,供水节点编号弼“町”袈示。嚣五位构成供求节点码,内供农节点所在邋路的潞名码和阍一道路上节点的顺序粥组成。4)供永阖门扮编码定为7佼:分类褥(2位)+路名粥(3位)+顺序鹞《2位),其中前两位分类码字符代表阀门的类别,取其汉谗拼音的卒头,如,供水阀门编霹用“SF”表示。后五位构成供承阏门鹤,由供水阀门所在道路的路名碣和同一邋路上阀门的顺序码组成。5)供水开1:3的编码定为7使:分类褊(2位)十路名褥(3位)卅顿序鹞(2位),其中前两伍分类码字符代表开口的类别,取其汉语拼音的字头,如,供水开口编蟹用“Si(”表示。后六位构成供求开口诵,由供永开口所在道路的路名码和同一邋路上开口的顺序码组成。 第鞠章供水管潮故障时饶亿关溺方案供隶餐两有瓣鑫蠢各种添因笈聋供求教簿,黜i藤管、阀门豢蟒、营懑羧岛搅坏、或卷人为造成的破坏。而且:i塞种情况发生的地点及时阅叉没霄任何规棒可寻。逶馨麓巡检A最发魂故障君,才能采取应急措施。而驽拽到事故点时,又必须依靠技术人员粪阅大量施工图纸,查找湖门的位罴,确定阀门的关闭。势照常常遇上润门无法蓑闭及关不严等阔颥,又需要重新制定关润方案,耽误了狳静聍蚓。针对这稚实赋情况,遴过计算机进行湖门螅优化调度融经非常必爱。本文礤究的供永瓣网故障辩阕门优亿褥赛方案,避建立在镶永管掰GIS基础之上避行的。该调度方纂在指如故障点时,能绘如所要关闭阀门的煨优集念解,同时可以知道停水酌瞀敷集合,旗丽褥稍受影确的用户范鼹。当脊的阀门不镌关闭对,可激给如灏的关阕方案,如果毒多个水源敬多个故障点时,也可以实现阀门的优化调度。4+1关阀管嗣建模供水错网是一类大规模且复杂多变的网络系统,为便于建立关阀管理系统,盛将篱稼敢糖象为便于薅鬻形帮数据表达及分辑裁蘸统,帮建立供承麓薅模型⋯。供水管网模型主要液达系统中各组成部分的拓扑,将管网简化和抽象为管段、节焱、蒺门、及嚣弱尼类元素,著赋予工程弱栏,婆便建蚕论罄数学分接理论等送行袭达和分析。关褥褥溺模型翡建立每拳力计算模羹不同,器鬟不要黎麓诧,{嚣是应渡辩实的反应实际的管网状况。臀网模型建立的愈详细,桐应的关阀方案与实际情况就愈凌合。浇舞誊臻次要爨篱段,辍是该警羧上骞润门,势曩这疆謦菠是连接管,那么相应的关阀方察就可自&不正确。所以成该比较慎重的去掉~些支管,当管线交叉熹缀近对,翔采它嚣j之阕覆奄澳门菸话,才可淡穗萁含若为丽一交叉煮。城市供水管网的管段节点的数摄通常}鲢大,若不按一定的原则米绘管段、节煮编号,在使罨过程孛查编号霹会蠢所逶麸。蔹管段露节煮编号嚣遵循驻下黧爨{j:1)管段和节点连续成片编号为好。2)警段编号为8往,箕中第一位为嚣菠类型,爨衣管液雳sG表示,接藩魏三位为所在的道黪编号,艨面的兰位是管段的编号,如管段编号SGl01100n3)节患编号为7谴,其串蓠西两经受第点类蘩,供求节患蒲黯表示,接着 阻三位为所在的道路编号,后面的两位是管段的编号,如管段编号sJlOllO。4.2关阀方案设计思想由图论中图的概念可知,管嘲中的节点集合对应于图的顶点集合,管网的管段集合楣辩应于黧瓣骞囱迭戆集会,投撵墅论知识霹潋把城蠢筷求繁鄹看成籍‘毒向连通图”。⋯。在供水管网中,由水源点到到管网中任意节点之间肖许多的“路径”。放藏簿焘位鬟邀发,经蓬广度徙先搜索我至l与敖障熹袋涯戆鼹门,关鬻疆痤阀门切断故障点与水源点之间的所有“路径”,就确定了初步的关阀方案。黯管瓣銎,曩不霹戆塞《集建立溪点数麓分,将农源熹强划分奁纛集¥角,鼓障点Vs划分在V。中。相当于用点溶合法将两个子阕的各节点溶合成两个点集V。及V;,—魏象疆拿熬矮点珏鞋。峦予警瓣孛弱一般节点¥。都有掰释虿戆瓣选择,繇在V。或v。中。若以qJ表示供水管网中管段流墩,以Qk袭示各节点流量,并对流出取轰号,流入取受号,裂逶懑一个予图0(鑫=瓣嶷麓分,是嚣蘩停水豹肇点集会)戆管段流量之和等于子图中节点流量之和(见公式(4.1)及图4.1)。薹‰⋯磊g式中np为进出子潮D的管段数;巾。为故障点槊合;x。,楚离散登变量,其谴为:fl管段j在集合R中,方向由V。指向V—x”{一l管蔽j在集含F;串,方向由V;指汀V。L0管段j不在集会R中R是任~可行解的集合。(4.1)翔4。l涟量孚镦示意瞽如果疆使关阀后停水范围最小,那么必须使得浅(4.2)成立,这样确定的关阀 方案就是髓终的优化方案㈣。rain∑绫(4.2)定蓐J本文溪用壹接寻捷方法,露营先扶教障点出发,确定携步錾关阉方案,孬放水源点出发,进行寻优,最终确定关阀的优化方案。其理论模型如下:1)饕先戬敷辍轰为中心,采越广疫优瓷遍历舅法确定影响医,影嚷区中戆管段所构成之集合为Gl。若鼓骧点掰蠢匏管段鼹铡均蠢翊门,烫l将距数簿焘最选瓣嚣令阀门关麓颦可。糟故障点所在管段上只有一侧有阀门,则荫先将有阀门一侧距离故障点最近的阀门关溺,然震对雯终一侧遴器广度饶走遍掰,接索掰骞与攀蔽警段笼阙门的鄂一侧相连的备个管段。若故障点所在管段上’泼有阀门,则对故障点两侧均进行搜索淤确定影响嚣。逸令搜索逑程是一令递癌_j篷程,一蹇接索至l全部与豢蔽纛糖豁懿阀门为止。2)凌1)遘纛臻定夔影响区孛靛关滔润门撬或熬集会为¥l。3)从水源点搜索V1中的阀门所在管段,当遇到任意的阀门IEVl,则跳过辩建管段瓣搜索,鑫我没寮攘素翔鹣营段捻残之煞合先G,剿61≤Ge4)设vl中的阀门对应的管段构成的榘合为G2,则G2≤G。5)设IEG2,警段{懿起始繁点戈I;,终盘繁庆戈I。,设与I;穗连懿掰蠢管段构成的榘合为Sl,与I。相连的所有管段构成的集合为s2,如果对任意的管段JESluS2,均有j∈s,聂l获集会龆孛去簿警段l。设最终褥裂羲集合G2黪对应关闭阀门集合为V,则VCVl。6)簸嚣,集会G孛戆警段楚菇须蒋承夔营段,集合V中涎酒门是应当关阙弱阀门。4.3关阀方案设计的实现4.3.1邻接表管嘲图的表示用图的链式存储结构邻接表来实现⋯。在邻接表中,对管网图中撼个顶点建立一个单链表,第i个单链表中的结点袭示依附予顶点Vt的边e每个鲻点由三个域组成,其中邻接点域(adjvex)指示与顶点V。邻接的点程图中的位鼍,iigt或(nextare){罄示下一条边的结点:数据域(info)存储和边相关的信息。每个链液上附设一个表头结点,设有链域(firstarc)指示链表中第一个结点,还设有存35 储顶点Vt的名字或其他有关信息的数据域(data),如图4.2所示。头结点褒继点臣[E垂习[巫正三圈圈4.2邻接表结构图//一~一一一一一一一一一一一一一一一图的辱g接表{享馕表豸i一一一一一一一#defineMAX_VERTE划嗽20typedefstructArcNode{intadjvex;//该弧所搬向的顶点的位疑structArcNode*nextarc;//指向下一条弧的指针InfoType*info;//该弧棚关信息的指针}ArcNode:typedefstructVNode{VertexTypedata;//顶点傣息ArcNode*firstarc;//指囱第一条依附该顶点的弧的拯针)Vnode,AdjList[MAX_VERTEK』嘲]:typedefstruct{Adjhistvertices:intvexnum,arcnum;//图的当躯顶点数和弧数intkind://图的秽类标悫)ALGraph:若图中袁n个顶点、e条边,则它的趣接表鬟r1个头结点靼2e个表终点。顶点¥;的发恰为第i个链袭中蛉续点数。农冬g接表上容易找至4经一顶点的第一个邻接点嚣下一个令§接点,如要判叛l壬意嚣个顶点心;翘V,)之闯是否鸯逮棚连,则嚣要搜索第i个或筹j令链袭。这些表头结点(可以键相接)遴豢以蹶痒缮麴鲍形式枣转,以便跨援谚溺经一该点戆链衰。例妻鞋蚕4。3蘑示结构可以用图4。4驰邻接轰表示:4.3.2队列队捌怒一稀先进先疆(FirstInFirstOut,缩写隽FIFO)酶线校表㈣。它允许在表的~湍送行插入,而在舅一鞴剿除元索。这释我稍目常生活串熬样敬跫一 致的。最早进入队列的元素最早离开。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front)。假设队列为q=(a。,铷,⋯,8t.),那么,at就是队头_元素,a.1则是队尾元素。队列中的元素是按照a。,a∥“,氛的顺序进入的,退出队列也只能按照这个次序依次退出,也就是说,只有狂a。a。,⋯,‰都离开队列之后,文才能退出队列图4.5是队列的示意图。圈4.3图的示例V1V2VjV4V5筒4.4邻接表示意图.堂型_F百—矛_弋■0塑烈卜—酉F1——————]i队惩。酞头—r—————————T‘队惩圈4.5队列的示意熙和线性表类似,队歹Ⅱ也可以有两种存储表示。一种怒链队列,另外一种是循环队列。考虑到图的广度优先搜索遍历算法和管网圈用链式存储结构邻接表采实现的,作者采用链队列。,一个链队列显然需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才自%唯一确定,作者在vB编程中分别用两个数组来表示。为了操作方便起见,给链队列添加一个头结点,并令头指针指向头缩点。由此,空的链队列的判37 决条件为头指针和尾指针均指向头绪点。链队列的操作即为单链寝的插入和删除操作的特殊情况,只是尚需修改尾指针或头攒针,下蕊给出链队列类型模块说明。//===一=一一⋯=一ADTQueue的表示与实现|}typedefstructQnode{QElemTypestructQNode}QNode,*QueuePtr:typedefstruct{QueuePtr;LinkQueue:|{data:*next队列的链式存储结构front://队头指针rear;//队尾指针基本操l乍的函数朦型说明StatusInitQueue(LinkQueue&Q)//构造一个空驮列QStatusDestroyQueue(LinkQueue&Q)//销毁队列Q,Q不羼存在StatusClearQueue(LinkQueue&∞//将Q渍为空队列StatusQueueEmpty(LinkQueueQ)//蓑队列Q为空队列,贝4返回TRUE,否则返回FALSEintQueueLength(LinkQueueQ)//返回Q的元豢个数,即为队列蛇长度StatusGetHead(LinkQueueQ,QElemType&e)//装默到不窆,则用e返回瑶的队头元素,菇返回。K;否煲4返鼹ERRORStatusEn秘eue(LinkQueue&Q,QElemTypee)//捶入元素e为Q的鞭魄队尾元素StatusDeQueue(LinkOueue&鼗簿lemType&e)//蓉敬列不窆,则剿除Q螅默头元豢,耀e返回其魃,势返网然//荦}墨l返隧ERRORStatusQueueTraverse(LinkOueue奄,visit0)//扶酞头到跌遂依次对敬列Q串每个元豢调爝爨数visit()a//一量visit失败,裂揉铭失黢。 ||基本操作的算法描述StatusInitQueue(LinkQueue&Q)f//构造一个空队列QQ.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));If(!Q.front)exit(OVERFLOW)://存储分配失败Q.front一>next=NULL:ReturnOK:lStatusDestroyQueue(LinkQueue&Q){//销毁队列Qwhile(Q。front){Q.rear=Q.front一>:next:Free(Q.front):Q.front=Q。rear;}returnOK;}StatusEnQueue(LinkQueue&Q,QElemTypee){//插入元素e为Q的新的队尾元素p=(QueuePtr)malloc(sizeof(QNode)):if(!p)exit(ovERFL0w)://存储分配失败p->date=e:p->next2NULL;Q.rear一>next=p;Q.rear=p:ReturnOK:lStatusDeQueue(LinkQueue&愈QElemType&e){//若队列不空,贝4删除Q蛇驮头元素,用e返回其僮,并返遐0K//否则返匣ERRORif(Q.front==Q。rear)returnERROR;萨Q。front一>next: e=p一>data:釜。front一>next=p->next:if(Q.rear==p)Q.rear=Q.front:free(p):returnOK:}在上述模块的算法描述中,滋意到删除队头元素算法的特殊情况,当队列中最惹一个元素被麟涂螽,酞稀滗攒钎遣丢失了,滚魏需对酞尾指针重薪斌傻。4.3.3递归算法递归是软件设计中一种重要的方法和技术。由于递归予程序是通过调用自身来完成与自身要求籀同的予闯蘧的求解,莠利矮系统内部功能鑫动实现调用过程中信息的保存与恢复,因而省略了程序设计中的许多细节操作,简化了程序设计_j篷程,侵程枣设计人员可姨集中浚意力予主要闯麓的求解。如果一个子过程(或予程序、函数)在究成之前又(直接或间接士呶)调用妇己,刘称之必递归过獠(子程垮或函数)“。为描述方便,本文中约定掰子程序代替过程或函数。若予程序体内宜接调用自己,则叫作直接递归;若子程序通邋调用麓它子程序著由精者反过来调用莉者,刚称之为阊接递归。含有一个递归调用的遇归过程的一般形式如下:procedureP(参数表):beginif数据为递鞠出日then简单操作。elsebegin简单操作;end递归调用的内部实现原理如-F;1)谯执行调用时,计算机瞻部至少执舒如下操作:(1)保存返阐地址,即将返阐地址入栈。(2)为被调子程序猴备数据:计算实际参数的僮,并赋给对虚的形参。(3)转入予程序执行。2)程执行返网操作时,计算机内部至少执行如下操{乍。(1)从栈顶取出返潮地址,并出栈。40 (2)拔返阐璁址返回。—F瑟黑实黼鳝予热戳诞鞠。fibnaeei痧列{R)定义蠡裁垂,3,酌涟翔函数。fOn=oR={1n;1毛Fo.1÷毪2n≥2缡篝求解R(4.3)递妇出口有两个,即n=O和n=l,相应操作语龆实现如下:ifn=OthenF:=0elseifn=lthenF:2l在数掇为j}递烟出蠲,鼯n≥2辩,弦设在n№‘YES<参‘N。l过程N2=N2—1I.1严s/输出结果/图4.6优化关阀方案流程图 备子过程流程胬如闺4.7~萄4.9所示。图4。7节点故障关阀予过稳流稷图 篷4。8管{瑟馥礴荚褥子过罄浚翟蒸 图4.9阀门故障关阀子过程流程图 第五章城市供水管网故障时水力分析5。1供水管网水力模型建立供水管网的水力模型在实际工作中具有较太蛇使用价篷。第一,遵过对现状管阏的模拟计算,可以对现状管网的运行状提作出正确评价,提出今瑶凡年的改造计划,便于公司决策层对供水工程投资的管理。第二,在供水系统发生重大事故时,利用管网水力模型模拟配水管网的运行状态,分柝故障射管网中存奁的供永问题,以便采取合理的调度策略,尽可能减少故障时的影响范围。第三,结合供水系统优化调度模型,可通过模拟计算,对水厂的出水量、出水压力进行合理调配。第四,在多水源供水对,通过对供水管网的分据计算,核定备个水厂的布局合理性,对水厂、加医泵站{乍出中送期煺划。5.1。1供水管网的麓化1)简化原则㈨姆供水管网麓他为管网模型,把工程实际转化为数学润题,最终结果还要应用到实际的系统中去。要保证最终应用县寄科学性和准确性,篱化必缓满足下列原则。(1)宏观等效原则即对供水管网某些局部麓他以后,要保持其功能,各元素之闽髂关系不变。宏戏等效原则也是援对的,要根据应用的要求与目的不同来灵活掌握。(2)小误差原则简化必然媸来模型与实际系统的误差,但是只要将误差控制在一定范围,就是允诲的。篱化的允许误差也应灵活掌握,一般应满足工稷上的要求。2)慧线简化方法(1)删除次要管段,比如管径较小的支管、配水管、出户管等;保留主干管段靼予管段。次要管段、二F管段器主干管段的确定也是相对的,当系统规模小或计算糟度要求离肘,霹以将较小管径的管段定为干管段。干管段定的越多,炎q计算量越大,计算结果越精确。(2)当管段交叉点缀逛时,可激将冀合并为同一交叉点。(3)道路弼侧的平行管段斑不予合并。 (4)熏蹲管段包含不同的管专|秘溉播,瘦采用水力等效原璺《将其等效为单~管兹鞠蔑穰。(5)弗联的管段可以简化为单一管段,其直径采用水力等效原则计算。5。{.2徽水管蕊的捆象经过简化的供水管网需耍进一步抽象,使之成为只由管段朔节点两类元素组成的管网模型㈣。在管阕模裂中,管段和节点相甄必联,即管段的聪端为节点,节蕊之凌遴遘蛰段连遴。1)镣段管段怒管线和泶站镲简化后的抽鼐形式,它只能输送水量,褥不允许改变水量,鄂譬段中阊不允谗蠢流量输入秘输爨,夔管段审W默改变窳的能爨,籀其蠢承头损失,阿数热压躐降压簿。管莰中闽静流蠹赢运矮永力等效鹊骧翼《辑冀至《管段的两端节点上,通常供水锴网将管殿沿线配水流撼一分为二分舄U转移到管段蹲端的节点上。当臀线串润窍较大酌集每浚鲎辩,纛逡滚毫袋滚,久,应在集中流囊熹凳鲻分管段,设鬣节点,因为大流量不能移位,否则会造成较大的水力计算误差。同璁,沿线出流戏入流的管线较长时,应将其分为粒于祭铃段,以避兔将沿线流量拼箨成繁点流爨时出蕊较大溪差。2)节点节点魑锗线交义点、端点或大流辍出入点的抽蒙形式。节点只能传递瞧熬,不§%改交永的能量,&F带点上的承的越it(水头馑势楚难一的,德繁点蘸2l窍漆嚣豹输入或输疆。泵站、减压阀及阀门等改变水流自&量或具有阻力的设旄不熊徽于节点上,因为它们不符台节点的属性,即使途臻设施的实际缱鬻珂自g就在节点上,或磐翳避苓煮,氇登矮试秀它{}j嬷在瞽鬏土。3)锗段和节点的属性管段和节点的特镬也括构造属饿、擒扑属性期水力属性兰个方面阳1。梅遗属洼蹩据}}嚣牲窝零力耩瞧麴蘩聂}}l,瘩宓震洼蹩鹫段辩苇轰在系统皆豹零力褥铤秘表现,辅扑腌性是管敬和节点之间的关联关系。约造属性通过羝绕设诗确定,据扑属性浆用数学图论畿达,水力属性贝4运用水力学理论进行分攒葶n计算。警段的穗造嚣性驽:管长,一般黻m是擎位;蛰径,一般双瓣或黼尧擎链;管段褪稳系数,表示蛰邀内糖糙程浚,警警遵瓣料有关。48 管段的拓羚属性窍;管段方向,髓一个设定蜓鼹定方向,不楚凌囱,也不是泵蛄豹壹H聪方翔,怒蠹西取豹一个方向;超溃节煮,簿称起点;终端节煮,簿称终点。管段的水力属饿各:管段流量,雁俊表示流向岛管段方向棚间,受僮表示流鑫与管教方囱稳反,攀经露霜≤l/s藏L/s;落羧流遮,瑟隶滚遴连管羧熬邃发,也是一个带符号值,其方向与管段流履相同,常尉盼盥m/s;管段扬程,即鸷段上泵站传递给水流的矬,正值表示泵站加压方向姆管段方向张同,负慎表示与警袋方舞撩反,摹袋鬻攥臻;管段薄隰,表零警袋瓣零滚熬阻力大小;营毅垂降,表示水流腻管段起点输送到终点蜃,其机械能的减少量,困为忽略了流速水头,所以成为压降。意为臁力水头的降低值,常用单位为Ill。节惑的构遗属性蠢:萤点离程,即节点所在地点雉遂的乎均娥面标蹇,肇僚为m:节点证置,茸掰警瑟挺标(X,y)袭示。节点的拓扑属性荫:与节点关联的篱段及其方向;节点的魔,即与节点关联的篱段数。节患豹汞力器疆鸯:节熹滚基,&#蕊节赢瀛入或滚凄系绫瓣滚鲎,委毽寝示流出,徽值表示流入节点,单位常用rays或Lls;节点水头,淡示流过节点的单位羹量的水流所具有的机械能,一般采用与节点离程相同的离稷体系,单位为m;鑫凌承受,搔繁煮东头亵凄遮嚣离糕懿蹇度,肇像魏m。5.{.3檄水管蠲§奄标恹供零管薅筵他昶攘袈先簪斑模篷后,应该辫蒺避譬亍避当黪栝识,以便戳麓的分耩和计算。标识静雨察包括渊:帮点与营段的愈名或编号;餐段方囊与繁赢流向设定簿。1)麓点和篱段编磅节点穗警鬏编号,裁莛綦绘警煮帮篱段爨名,命名懿毽瓣楚舞了方硬萼|鹤,所以,可以用任意祷母鼢名。为了计算机程序处理,通常采用磁熬数进行编姆,同时,编号时应尽餐谶续使用编号,以便于用程序顺序操作。2)蘩羧方爨懿後跫管段的一些属瞧照蠢方向性的,如流量、流遽、压隧等,它l}1的方向都楚根据管段的设定丽定的,只有当给出黪段设定方向鼷,砖1自%将镣段辑端节点分别定义轰起点移终煮,帮篱羧设定方两总是扶起点捂趣终点。从理论上谫,警缎穷囱鳃设定《疆镁意,毽必。歹不爨现太移的受疆,一般应 尽爨使臀段的设定方向逸滚向一致。3)聱赢流鬟静方囱设定节点流藿的方向,腺是假定流如节点为正,所以管网模掇中以一个离开节点的箭头橼示。如果节点流量实际上为、溆入节点,则认为节点流黛为负值。如供水管箍瓣承源珙拳繁纛。5.1.4餐黼图基本檄念对予供求喾耀摸鳖,当昭去其梭造鞍z&蹇黪校乏莲,稷援考惑繁焘纛管羧之间的关联燕系,称为管湖图蝴嘲。谯管喇图G(V,E)中,关联任意管段e产(vt,v0∈E的两个节点v。EV和vJ酋V是有序的,即ek=(Vi,vj)≠(vbv。),所以管网湖G为蠢囊豳。1)麓联矩阵设~肖M个节点,N条边的肖向图,令厂l若边j峰节点i霄关联,且i怒迭j的终点ajj=≮一i蕃遮j与节熹i餐关联,盈i楚逮j熬始患Lo若边j与节点i不关联则出ai,一(i=t,2,⋯,^l;j=1,2,⋯,N)构成的M行N列斑黪为有向图的究金关联矩簿,诞之恣&。滚捧气轻意一嚣螽,联褥委l戆短薛,称之必基零美联媛簿,记作A。2)咧鼹矩阵定义翻髓矩阵B一(b,。)。,其符数先基本固爨鹃个数L,刭数簿予遗的祭数N,其元素b;。确定黧下:.厂l第J条边处于回路i上,且方向骘回鼹i的方向~致b。=<一1第j条避处予回路i上,且方向与回路i的方向蝴反L0第j黎遮不楚子疆爨i上3)节点的度在镣网图G(V,E)中,与某节点v哭联的管段数躁猕为该节虑的度,记住d(V)。交予每祭謦段臻与嚣令蘩蠡褪关联,掰鞋营爨圈G巾各苇点废乏巍等予其警簸羧的两倍,即:孓d(v)m2N暇1)5,2拦常对管刚水力计算 供水管网正常时的水力计算方法,采用节点水压法侧嘲。可以归纳为解以下三个联立方程组:节点方程,回路方程和压降方程。1)节点方程节点方程就是通常所说的节点流量连续性方程,即连接于任何节点的所有管段流量,其代数和为零,如以矩阵表示则为A露=砭(5。2)式串A为管瓣餮捺基本美联簸阵;石=(QI,Q:,L,QN)T,0。为管段i的流蹙;乓=Q;,q。,L,Q。)T,q;为节点i的节点流量·2)霞黠方程瑙路方程就是邋常辑说静§‰璧方程箴环方程,帮每个环豹承头损失潮台蓑为零,惫括纛环褒肉,矩阵形式为:B石;0(5.3)式中B为管网图的基本网路矩阵:i=(h,,h:,L,h,)T,h,为管段i的水头损失;0隽0囱鬟,帮0----(0,0,⋯,0)‘。3)莲降方程警段流量§与零头损失h之闻豹关系霹黑下式袭示:h=S馨(S。4)式串,s憝与管奉孝、管长、辖径有关熬系数,瑶隽求力指数,暹常萨1.85’2,将(5.4)写戒矩箨形式;h。’h2MhN式中S=S。Q?S,避MS。Q:oS:SNoQ?Q;MQ::写Q-(5.5) Q。=(Q?,Q;,L,Q;)T4)水裂Q--H熬线的姆拆式垦魏,通磐采用如下近似鲻撰式:H一强一s:Q2(5.6)式中凡称之为水泵豹虚憨扬程,S;为承泵熬虚隰耗系数。5)节点水艇法豹水力计算步骤节点承匿法靛燕求解式(57)的关予节点永蘸蟊的菲线僚方程组。常用牛顿一拙斐逊速代法,其计算步骤如下。fi。荟媳螅⋯淤暇-EjSGN(E;-Ej阳;硼§·7’i=i,2,⋯,M。M为节点数,a=O.54(1)绘定胡值嚣=(E≯,E势L,E罂y,由戏(s。7)计算髻。}(i=1,2,⋯,蟛。若鼹有i均有i《。’i《e(e为所需精度,可取e=o.001m3/s),则露‘硝为所求;否贝叮,令k=O,进行下一步。(2)由式(5,8)计算(鸥,8墨)(k)(i,j=l,2,⋯,瓣,(0f;/0Ej尸为of,10Ej在嚣:茸畸她的值,按式(5.8)形成Jacobi矩阵J∽(式(5.9))。r署2a势陋|口-1江雅,⋯∞i一掘Of_.Li=-aRijlEi_Ej『‘(节点i与j相邻)(5.8)l。i监。o(节点i与j不相邻)(5+9)剽到刭生喊生避;‰一峨区限陵隅㈠睑限暑尝 (3)鹪下列线性方程组,求出AE!‘1(I=l,2,⋯,M)。J(k)AE,AE≥’矗E警《2’∥i培’f5.10)式中,AE:称为校燕水头或水头校藏值。(4)由式@∞计算铲。(译l,2,⋯,国,若新有i筠有陌“11f。)式中c。为节点i的需水量,也就是设计时的节点流照; Hi为实际配水时节点i的自由水压:fi为节点i的用户所需晟低自由水压,一般可取20m。式(5.11)可用图5.1的曲线表示。口5口⋯Ⅲ⋯压力捧#B豳5.1繁点配水繁与援力之闯瓣关蓑当瘸苓点承匿洼进行低水援状态下的管阚i,t,g时,当赐求解对,其骥可毙矩阵弘}为下式新示:J·(。):J(。)+^(5。12)式中,J”是由式(5.9)褥到的姥可比矩阵谚(5.13)氇可由下式求出——1-c;/(2,/H,4f1)o<甄