• 2.74 MB
  • 88页

基于gis的高速公路养护与路产管理系统研究

  • 88页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'摘要地理信息系统(GeographicInformationSystem,GIS)是信息技术的一个重要组成部分,同时GIS是一种决策支持系统,对空间数据的存储和分析能力是它的主要特征。本文将GIS应用于高速公路的养护与路产管理中,来解决其中与空间有关的问题。高速公路病害和路产,都具有空间特征,一般的管理信息系统是无法储存,描速和分析这些空间特性的,为解决这些问题,论文提出基于GIS的高速公路养护与路产管理系统(SuperwayMaintenanceandAssetsManagementSystem,简称SMAMS)。本文在综述GIS的来源、发展与应用的基础上,分析了高速公路养护和路产管理的现状,指出公路养护管理地理信息系统的开发是公路管理的基础性工作。从而明确了建立SMAMS的必要性和可行性。论文对系统进行了分析和设计,确立了“系统为客户端服务器模式”,“以移动道路测量系统采集数据”,“以SQLServer2000作为数据库工具”,等技术方案。并解决了空间数据和属性数据的组织和管理、远程数据库访问、数据格式转换、空间分析等关键问题。最后介绍了SMAMS的实现方法和主要界面。基于GIS的高速公路养护与路产管理系统能完成一般意义的管理信息系统的各种功能,并且可以利用它的空间数据管理能力,做到及时发现养护和路产管理中的问题,分析出养护的重点,也能对某些路产进行更优的布置或者其它的决策支持,从而在整体上提高管理的水平,促进我国高速公路事业的健康发展。关键词:高速公路养护;地理信息系统;移动道路测量系统;客户端服务器模式;路产 AbstractGeographicInformationSystem(GIS)isanimportantpartofInformationTechnologyanditisakindofdecisionsupportsystem.Itsmaincharacteristicisthesaveofspactialdataandspatialanalysis.BasedonthestudyofGIS,thispaperusesGISinthesuperwaymaintenanceandassetsmanagementforsolvingtheproblemofspace.Thediseaseandassetsofsuperwayallhavespactialcharacteristic.Generalmanagementinformationsystemiscan"tstore,visualize,analyzethesespatialcharacteristic.Sothepapergive“Thesuperwaymaintenanceandassetsmanagementsystembasedonthegeographicinformationsystem”First,thepaperdecribetheorigin,development,applicationofGIS.Theaculityofmaintenanceandassetsmanagement.TheconclusionisthemanagementbasedonGISisthefoundationofsuperwaymanagement.Sotheneedandfeasibilityisclear.Secondwithanalysisanddesign,thepapershowsaschemeof“client/sever”,“MobileMappingSystemasthemethodofrenewingdata”,”SQLSeverasdatabase”etc.Themainproblemasthespatialdataandattributedata’management,accesstoremotedatabase,thedataformulatransition,thespatialanalysis,aresolved.Last,theprogramofbuildingSMAMSispresented.Theapplicationofsystemissimplyintroduced.TheSMAMShavethefunctionofcommonManagementSystem.Andwithitsabilitymanagingspatialdata;thedetectioncanbeontimeandmaintenancecanbefinishedefficiently;theassetsareingoodorderetc.Sothehealthydevelopmentofourcountryispromoted.Keywords:maintenanceofsuperway;GIS;MobileMappingSyetem;thecustomerservermode;assetsofsuperway 目录1绪论11.1研究背景21.1.1GIS及其发展状况21.1.2国内外GIS在公路及其养护中的应用状况41.2研究的目的和意义61.3论文的结构82高速公路养护与路产管理概述92.1高速公路养护的概念92.2高速公路养护的工作内容分析92.3高速公路养护的工作特点分析102.4高速公路路产分析122.5小结133SMAMS系统总体设计153.1系统目标153.2技术路线153.3系统框架设计173.3.1数据输入183.3.2空间数据管理183.3.3属性数据管理183.3.4数据输出183.4数据采集方式设计193.5空间数据存储模式设计203.6系统的数据流程分析213.7小结234SMAMS的数据组织与管理244.1空间数据的组织与管理244.1.1空间数据模型的选择244.1.2图层设计254.2属性数据的组织与管理264.2.1系统数据的E-R模型27 4.3空间数据与属性数据的连接384.4小结395SMAMS系统中关键技术问题研究405.1远程数据库访问实现方法405.1.1数据库连接方法的分析405.1.2数据库连接方法的具体实现425.2数据格式转换435.2.1文件解析方法445.2.2基于Arcview的方法475.3地理空间分析在系统开发中的应用研究495.3.1空间聚类方法在高速公路病害密集区分析中的应用研究495.3.2缓冲区技术在路产及养护站点服务区域分析中的应用研究525.4高速公路的三维可视化方法研究565.5基于动态链接库的地物符号化方法研究575.6小结576SMAMS系统的实现596.1硬件配制和网络接入596.2实现系统的主要程序语句606.3界面介绍606.4小结667结论和展望677.1结论677.2展望68参考文献69致谢73附录74 1绪论进入20世纪90年代以来,计算机网络技术、信息通讯技术、空间信息获取技术与GIS技术的空前发展,改变了传统的经济运行方式,带动人类社会各方面的活动进入全球化的信息时代。现代信息技术不仅深刻地影响着现代科学技术、教育、工农业生产,以及经济建设的各个方面,而且影响着人们的生活和工作方式,信息技术应用水平已成为衡量一个国家现代化水平和综合国力的重要标志。美国、英国、加拿大、澳大利亚、欧洲等国家与地区经历了以社会信息化和信息社会化为标志的知识经济发展过程,带动了经济全球化,建立健全了国家信息基础设施,通过政府调控与市场相结合的政策导向和各种机制,使信息技术逐步实现了产业化,并因此获得了巨大的经济与社会效益。人们在进行处理、发布和查询信息时,发现大量的信息与地理空间位置有关,例如分析某矿区矿藏的储量,查询两城市之间的交通连接,查询旅游景点和路线,购房时选择价廉而又环境适宜的住宅,开采矿产资源时了解知道矿产的分布、位置、储量等都需要有地理空间参考。可见在众多信息中,地理信息尤其重要,它是信息化的一个基础和平台,为其他信息提供地理参考,使与地理和地球有关的空间信息能够准确地表达、描述和查询。地理信息(Geographicinformation)是指与所研究对象的空间地理分布有关的信息,是表征地理圈或地理环境内各种现象的数量、质量、分布特征、空间关系和规律等有联系的数字、文字、图形、图像等信息的总称(陈述彭,1999),它向人们(或系统)提供关于现实世界新的事实的知识,作为生产、管理、经营、分析和决策的依据。地理信息属于空间信息,其位置的识别是与数据联系在一起的,这是地理信息区别于其它类型信息的最显著的标志。地理信息具有描述现象本身,记录现象的空间位置和反映现象变化过程三个基本特征,地理信息的空间定位特征是通过公共的地理基础来体现的,即按照特定地区的经纬网或公里网建立的地理坐标来实现空间位置识别的,并可以按照指定的区域进行信息的并或分。地理信息还具有多维结构特征,即在二维或三维空间的基础上,实现多专题的信息结构。 地理信息处理技术的快速发展使得人们的活动方式发生了根本性变化。人们在地理信息处理方面的研究也取得了长足的进步,特别是随着计算机技术、遥感技术和全球定位技术的的飞速发展,地理信息的处理、分析手段日趋先进。作为地理信息理论和技术研究的集成者便是地理信息系统(GeographicInformationSystem或Geo-InformationSysterm,简称GIS)[36][43]。1.1研究背景1.1.1GIS及其发展状况地理信息系统是把地理学、测绘学、制图学、遥感学、图形图像学应用电子计算机技术后自然形成的一门新兴边缘学科,是一种特定而又十分重要的空间信息系统,它以计算机为手段,用于采集、贮存、管理、处理、分析和描述整个或部分地球表面(包括大气层在内)与空间和地理分布有关的数据的空间信息系统。它由计算机硬软件、空间数据库、数据输入、输出、显示、转换和通讯设备等组成,以地理空间数据库为基础,采用地理模型分析方法,实时提供各种空间的动态的地理信息,并为研究和决策服务,核心模块主要包括数据输入和编辑、空间数据管理、数据处理和分析、数据输出、用户界面以及系统二次开发能力。早期的地理信息系统主要是地理信息的分析、获取,地图的输出等较少的功能,针对的领域主要偏重于地理界和测量界。现阶段,地理信息系统的功能和应用领域没有限制,其应用已远远超出了它最初的范畴。要研究GIS,我们首先必须要了解GIS的发展历程、现状与趋势[58]。GIS从诞生到现在只不过30多年的时间,然而,现在它已经作为信息产业的重要组成部分进入信息社会,并成为一个新的学科。GIS由兴起到产业形成,再到学科的确立,这就是它30多年发展的历史轨迹。GIS的兴起得益于计算机辅助地图制图的研究和应用。人们由此而得到启示,试图构造一种工具来收集、存储和利用海量的空间数据,导致1956年澳地利首先利用计算机建立地籍数据库,并逐步发展为土地信息系统(LIS),用于地籍管理。1963年,加拿大测量学家R.F.Tomlinson首先提出“地理信息系统”这一术语,并建立了世界上第一个地理信息系统(CGIS),这可算作GIS的起步。尽管当时的GIS带有更多的机助制图色彩,查询功能非常简单,分析功能基本没有,但是GIS的兴起引起了社会的强烈反响,许多国家的政府部门和私人机关对此表现出了极大的兴趣,相继建立了不少与GIS有关的组织机构,如美国城市和区域信息系统协会(URISA)、国际地理联合会(IGU)、地理数据采集与处理委员会(CGDSP)等,这对传播GIS知识和发展GIS技术起了重要作用[56][57][62]。 进入70年代后,计算机硬件与软件水平的提高,促使GIS朝实用化方向迅速发展。一些经济发达国家先后建立了许多专题性的GIS,在自然资源的管理和规划方面发挥了重要作用。80年代兴起的计算机网络技术使地理信息系统的传输时效得到了极大的提高,它的应用从基础信息管理与规划转向更复杂的区域开发、预测预报,与卫星遥感技术相结合用于全球监测,为宏观决策提供信息服务,并成为一种新兴的产业。国内GIS应用在九十年代初开始发展,其主要领域也是在基础测绘、城市规划、土地管理、农业资源普查及生态环境监测等方面。GIS三十多年的发展已深入到测绘、规划、土地管理、交通、地质、矿山、环境保护、电力、通讯、商业、银行、公安、房地产、工农业生产布局、军事等诸多与国计民生密切相关的领域,并在其中发挥着越来越重大的作用。目前GIS在总体上呈现网络化、开放性、虚拟现实、集成化、空间多维性、社会化等发展趋势[61]。网络化指的是在分布计算环境下实现地理信息系统或者在Web上发布空间数据,即实现WebGIS。网络化是开放性的基础,开放性的地理信息系统OpenGIS的目标是,制定一个规范,使得应用系统开发者可以在单一的环境和单一的工作流中,使用分布于网上的任何地理数据和地理处理。OpenGIS的主要标准由美国OGC(OpenGIS协会,OpenGISConsortium)提出。OGC是一个非赢利性组织,目的是促进采用新的技术和商业方式来提高地理信息处理的互操作性(Interoperablity),OGC会员主要包括GIS相关的计算机硬件和软件制造商(包括ESRI,Intergraph,MapInfo等知名GIS软件开发商),数据生产商以及一些高等院校,政府部门等,其技术委员会负责具体标准的制定工作。地理信息区别于其它类型信息的显著的标志是多维结构特性,与此相关的多维数据模型、多维分析、地学多维图解等都是研究的热点。多维性的一个重要方面是地理信息虚拟现实技术,虚拟现实技术,是指运用计算机技术生成一个逼真的,具有视觉、听觉、触觉等效果的可交互、动态的“世界”,人们可以对该虚拟世界中的虚拟实体进行操纵和考察。目前,GIS、虚拟现实以及Web技术相结合的方式之一是VRML(VirtualRealityModelingLanguage,虚拟现实造型语言),通过用VRML描述GIS信息,可以在因特网上发布空间三维数据供用户浏览。在地理信息系统发展的初期,只是一门被少数科研人员所掌握的技术,那时的地理信息系统称为实验室的GIS。而目前,在汽车导航、野外探险和旅游、银行信用卡管理、商家经营分析、保险赔偿分析等等,人们生活的各个方面,GIS都在发挥作用,GIS的社会化水平已经初具规模,未来GIS的社会化程度会更高,以致达到“GIS发展的将来就是没有 GIS”的境界[59][60]。1.1.2国内外GIS在公路及其养护中的应用状况GIS在产生后不久就被应用到公路当中,1963年,加拿大建立了世界上第一个地理信息系统(CGIS),1964年在加拿大的多伦多市约1000个十字路口的信号灯实现了以道路网络为对象的控制,1966年日本东京都市中心实现了36个十字路口的信号灯控制。加拿大和日本的这两个信号灯控制系统中,已经初步应用了地理信息系统。地理信息系统在公路中应用的标志性事件是1968年美国开发了最早的电子导航系统(ERGS即ElectronicRouteGuidanceSystem),它没有考虑堵车情况,用路和车之间的通信形成的导航系统,该系统在美国首都华盛顿特区进行了小规模的试验[2][5]。上述信号灯控制系统和电子导航信息系统都是智能交通系统(IntelligentTransportationSystem,ITS)的分支,智能交通系统是在较完善的道路设施基础上,将先进的电子技术、信息技术、传感器技术和系统工程技术集成运用于地面运输的实际需求,建立起全方位、实时准确、高效的地面运输系统,实质上就是利用高新技术对传统的运输系统进行改造而形成的一种信息化、智能化、社会化的新型运输系统[8]。ITS的萌芽可以追溯到1939年美国纽约世界博览会,新泽西与曼哈顿之间的乔治华盛顿大桥上设置的基于道路和车辆之间通信的交通信息系统,由此可见,ITS的出现是早于地理信息系统的。但是,在地理信息系统出现以后,特别是在地理信息技术比较成熟的今天,地理信息系统技术几乎成为ITS不可或缺的技术保障。下面的几个实例就突出反映了地理信息系统在ITS中的必要性,90年代以前美国在数个城市进行了先进的交通信息系统(ATMS)和先进的旅行信息系统(ATIS)的综合实验,不仅向驾驶员提供道路信息,同时也提供旅馆和饭店等信息。日本在1996年7月由五家政府部门合作制定了《推进智能交通系统(ITS)整体构思》成为日本发展智能交通系统(ITS)的基本方案,其中提出的智能导航系统、交通管理系统、运输车辆管理系统、车辆紧急支援系统都是基于GIS研制的。1999年11月1日,意大利的卫星定位清雪除冰车辆及其管理系统首先在佛罗伦萨至博洛尼亚的高速公路上启用。该系统主要通过GPS和GIS实时对工作车辆进行监控、调度[64]。 但应该看到智能交通系统的主体部分是使用先进的监控、通讯技术和计算机系统,以及先进的交通工程和管理方法对道路上的车流进行引导,对道路交通进行管理,以便减少拥挤从而增进行车的安全性和舒适性。所以智能交通系统和下面论述的公路数据库系统是有一定区别的[8]。西方发达国家从60年代起开始利用管理信息系统技术开发建设公路数据库管理系统,在80年代,美国联邦公路总署用地理信息系统技术建立了全国公路数据库,并于1988年完成,同时,威斯康辛州和科罗拉多州建立了路面维护信息系统和交通安全管理信息系统。到90年代初,美国、德国、丹麦已基本实现公路信息网络化的数据库管理系统。数据采集方式也越来越先进,如加拿大Alberta省交通厅建立全省公路维护系统,利用GPS和路况摄影采集车进行路况数据的采集,对路况采集车所拍摄的公路图像进行计算机图像处理,达到实时共享和无纸化传输。美国伊利诺州芝加哥市的地方运输局建立了交通路产管理信息系统(TransitAssetManagementSystem),该系统的用户可以搜索浏览地区地交通资产和各种服务,如火车站、铁路、公交线路、服务设施等[63]。国内,80年代出现了路况管理数据库,但应用效果不理想。1993年陕西省交通厅推出国内第一个建立在GIS系统上的公路数据库。1997年,福建省高速公路建设总指挥部研制开发了“高速公路数据库系统”,采用ClientSever体系结构,运用SQLSever6.0数据库和PowerBuilder5.0等开发平台将空间属性数据与物理属性数据有机结合,能够实现图形、图像和统计数据的综合分析及处理。路面管理系统(ChinaPavementManagementSystem简称CPMS)和公路桥梁管理系统(ChinaExpress-WayBridgeManagementSystem简称CBMS)是国家“七五”重点科技攻关成果,“八五”重点新技术推广项目。路面管理系统由数据采集系统、图文数据库、模型数据库、养护决策系统、养护报告制作系统和前方图像管理系统6个基本系统组成,适用于高速公路和一般公路的沥青路面、水泥路面和砂石路面的养护管理。公路桥梁管理系统主要由桥梁数据库和桥梁评价系统两部分组成。其功能是存贮桥梁基本状况和对桥梁破损进行基本评价,确定桥梁破损等级[4]。1998年安徽省公路管理局参加了“九五”国家重点科技项目“GIS在公路设计中的应用研究与开发”课题,建立了“安徽省公路地理信息系统”。该系统基于ArcView3.1,利用其二次开发语言Avenue进行集成,SQL Sever6.5进行数据库管理。此系统分为路面管理系统和公路桥梁管理系统两个子系统,它拥有自己的电子地图,能生成各种专题地图,提供线路查询、条件查询和图上查询三种查询模式。1999年河北省高速公路管理局和交通部科学研究所共同开发了河北省高速公路路面管理系统,主要包括高速公路路面数据库管理系统,路面管理与决策系统,公路前方图像管理系统和公路地理信息系统一批子系统。其中地理信息系统运用Mapinfo平台,实现了以专题地图的形式显示分析决策结果的空间分布[5]。2000年陕西省高等级公路管理局和西安交远信息产业有限公司联合研制完成“陕西省高速公路养护管理数据库”。该系统采用MapinfoProfessional5.0完成电子地图的制作,以IBMDB6.10数据库存储数据,以MapX和Delphi作为前台开发工具。上述的系统中,陕西省交通厅推出的公路数据库没有基于计算机网络来考虑问题。这样的技术方案是不适应高速公路养护与管理的实际情况的。高速公路的管理中心在城市中心,而养护站点分布于近几百公里的公路周边,从而设计的系统,必须能把管理中心和养护站点紧密联系起来。交通部研制的路面管理系统和公路桥梁管理系统、安徽省公路管理局推出“安徽省公路地理信息系统”、河北省高速公路管理局开发的“河北省高速公路路面管理系统”等都是规模庞大的系统,用户局限于交通部、交通厅、高速公路管理局这些上级单位,对于近来大量涌现的中小养护企业是不适合的。另外可以看出国内获取路况和路产信息的途径是落后的,除了交通部的路面管理信息系统提出了“前方图象采集车”以外,其它的系统没有解决数据采集这个关键问题。但是“前方图象采集车”的定位是利用“计数器”,未采用全球定位系统GPS和惯性导航系统INS。从技术路线来看,这些系统全部采用了地理信息系统辅助高速公路的管理。高速公路涉及的路线长,整体分布在较大和较复杂的空间环境中。对高速公路进行管理,进行决策,离不开对空间因素的考虑。例如某段高速地区出现滑坡时,必须确定滑坡的位置、必须知道周围的地形、地貌、地质情况、水系、铁路等的详细情况,才能快速稳妥的处理。要准确获取这些信息是离不开地理信息系统的1.2研究的目的和意义 高速公路养护主要是保持和恢复原有的技术状况和技术标准,对原来达不到要求的设施进行完善和提高,提高公路的抗灾能力,延长公路的使用寿命,保证公路畅通,主要工作的内容包括对路基、路面、防护栏、紧急电话及各类通信、监护设施、交通标志、收费设施、休息区、服务区、绿化及各种服务于高速公路的设施的日常养护巡查、保洁、修缮等养护任务。目前我国的高速公路养护存在许多问题,信息技术应用水平较低,大多数养护单位对养护和路产的管理都是采用手工填写报表的方式,已经不能适应高速公路病害复杂,频繁发生的现状,使得高速公路得不到及时的养护,较严重地影响公路的运营能力和使用寿命。并且养护企业的人力,财力,和各种仪器设备得不到充分的利用;员工的责任心不强,工作效率低下;浪费公司财产,粗心大意损坏仪器的现象时常发生。这些问题引起了国家高度重视,交通部制定了《公路养护与管理发展纲要(2001-2010年)》、《2001-2010年公路水路交通行业政策及产业发展序列目录》和《公路水路交通科技“十五”发展计划》,提出要“把信息化放在行业发展的优先位置,以信息化带动交通运输现代化。”通过“着力引导公路养护工作向专业化、机械化、市场化方向发展,提高养护资金使用效益和公路养护质量。”,到2010年“公路养护技术进步主导作用显著增强,公路管理的信息化程度与发达国家的差距明显缩小。”其中信息化是基础,是高速公路养护在实行市场化和机械化过程中,对高速公路养护管理提出的必然要求。自从中国在2001年底正式加入世贸组织后,国内市场的开放程度不断加大,国外的企业和资本将进入各个领域,高速公路的养护也面临着同样的境况。首先入世后,国外高速公路开发商将以各种方式进入中国,或者独资开发、或者合资建设,开发商会在高速公路的建设、收费、养护等方面全方位参与我国的高速公路事业。世贸组织的最基本规则之一,就是给予国外的企业“国民待遇”。也就是说进入中国市场的高速公路开发商和运营商,在招标投标、税收、工商管理等方面享受与国内企业同样的待遇。欧美日各国企业的研发和管理水平,远远高于国内企业。单独就养护来说,发达国家采用各种路面管理信息系统,并且作业高度的机械化,目前国内的养护企业无法和这些先进的企业竞争。其次,我国的经济会以更快的速度增长,国与国之间、地区与地区之间的物流大幅度的增加,对高速公路会形成更大的压力。没有高质量的养护支持,高速公路不能畅通,经济的发展就会受到阻碍。鉴于上述情况,大力提高国内养护企业的信息化和管理水平,使国内养护企业有能力和国外企业竞争,加强养护和路产的管理水平,满足经济发展的需要,成为公路养护企业迫切需要解决的问题,为此,交通部设立了一个重点研究项目 “楚天高速公路养护及路产管理信息系统的研究”作为试点工程,其中“基于GIS的高速公路养护与路产管理系统”(theSuperwayMaitenanceandAssetsManagementSystermBasedonGIS,简称SMAMS)的研发就是就是该项目的重要组成部分。1.3论文的结构本文就SMAMS研发中的关键问题进行探讨。论文由以下几个部分组成:第一章,综述GIS的由来、发展、应用,分析国内外GIS在公路及其养护中的应用状况,指出研究的目的和意义。第二章,研究和分析高速公路养护与路产管理的工作内容,并对高速公路养护的工作特点进行分析。第三章,基于第二章的分析提出系统设计目的及技术路线,在此基础上提出SMAMS系统的整体框架设计方案,并对系统中的数据采集方案、空间数据存储方案进行详细设计,同时对SMAMS系统中的数据流程进行分析。第四章,从空间数据和属性数据两个方面对SMAMS系统中的数据组织和管理进行研究。第五章,对SMAMS系统建设中的所涉及的若干关键技术问题,如“数据格式转换”、“聚类分析”、“缓冲区分析”以及“高速公路三维可视化”等问题进行较为详细的分析和研究。第六章,对SMAMS系统的实现情况进行总结。第七章,总结全文,并对系统的进一步开发给出了建议。 2高速公路养护与路产管理概述2.1高速公路养护的概念高速公路的定义,按照交通部《公路设计规范》(JTJ011—94)的规定:高速公路,一般能适应各种汽车(包括摩托车)折合成小客车的年平均昼夜交通量为2500辆以上具有特别重要的政治、经济意义,专供汽车分道高速行驶并全部控制出入的公路[1]。高速公路的有效行车道至少在4条以上。高速公路养护指保持和恢复原有的技术状况和技术标准,对原来达不到要求的设施进行完善和提高,提高公路的抗灾能力,延长公路的使用寿命,保证公路畅通。高速公路是经济发展的产物,是一个国家现代化水平的重要标志之一。1988年10月沪嘉高速公路通车,我国大陆高速公路实现零的突破。1990年底,高速公路通车里程达到522公里;1995年底达到2141公里;2000年底高速公路通车里程已经达到16000公里。2001年末,高速公路达到1.9万公里,少于美国,居世界第二;2002年10月,达到2万公里。随着我国高速公路规模的日益扩大和路网的形成,我国的高速公路发展日益成熟,工作中心已从单纯的建设高速公路转向建、管、养的齐步发展。高速公路养护管理是高速公路管理的重要组成部分,养护工作的好坏,对高速公路的使用寿命、使用性能和运营有着直接的影响。养护管理好一条高速公路与建设好一条高速公路同样重要,甚至更重要。2.2高速公路养护的工作内容分析高速公路养护对象可以细分为四类:路面、路基边坡、沿线设施、桥涵,如表2-1所示。表2-1高速公路的养护对象和内容养护对象养护内容路面-沥青混凝土路面日常养护,针对如裂缝、坑槽、拱起等病害的修理和完善-水泥混凝土路面 路基边坡日常的平整、清洁、加固等工作针对路基坍塌、边坡坍塌、路肩损坏的维修沿线设施-收费站设施日常的检查、清洁针对不同的病害进行维修保养-防撞护栏-防眩设施-照明设施等桥涵-桥梁清除污泥、积雪、杂物对桥梁桥头跳车,面层断裂等病害进行维修,确保涵洞畅通-涵洞表2-1中的沿线设施是高速公路养护的重点内容,同时沿线设施又属于路产的范畴,所以高速公路的养护和路产管理之间是没有绝对的分界线的。高速公路的养护工作是围绕养护对象类进行的,根据高速公路的特点,养护工作分为维修保养、专项工程和大修工程三类,这三类共同形成养护工作类。(1)维修保养是为保持高速公路及其附属设施的正常使用功能,而安排的经常性保养和修补其轻微损坏部分的作业。(2)专项工程是对高速公路及其附属设施的一般性磨损和局部损坏,进行定期修理和完善的作业。(3)大修工程是对高速公路及其附属设施因已达到其服务周期和由于水毁、地震、交通事故、风暴、冰雪造成的重大损害,而进行的综合、全面的修理。2.3高速公路养护的工作特点分析高等级公路是一种快速的、大交通量的运输系统,快速、安全、舒适、畅通是其基本要求,所以高速公路管理部门应对高等级公路及其设施进行经常性、及时性、周期性和预防性的养护和维修,确保高等级公路的正常使用功能。(1) 预防性,预防性养护可以延缓由于交通和环境荷载的作用引起的路面性能恶化,延长路面的使用寿命,所以很受高速公路养护单位的重视和提倡。(1)经常性和周期性,高速公路的养护是一项长期的任务,每天、每月、每季都有不同的内容。比如:天天都有巡查、保洁、清扫、绿化、浇水等工作;春季,做好沥青路面的裂缝的灌治,防治坑槽、松散、翻浆等病害的出现;夏季,是路面养护施工的有利季节,及时处置各种病害,恢复路面性能等;秋季,抓紧完成养护工程年度任务,适时做好冬季病害的预防性保养和修理;冬季,做好防雪、防水、防滑及养护材料采备工作。(2)复原性,指经过养护维修后的路面应该完全恢复路面原有的使用性能,亦即其平整度、磨擦性能、承载能力、噪声等使用性能应满足高等级公路快速、安全、舒适的基本要求,而不能因养护维修作业而有所下降。(3)补强性,高速公路的养护维修作业往往还带有弥补原有路面强度不足的要求,这就是所谓的补强作用。补强不仅是增强原有路面的薄弱环节,而且还常常出于对延长路面的寿命以及满足日益增长的交通流量的考虑,因为原有路面的设计交通流量由于国民经济的迅速增长而很快被突破。有时在设计路面时为了减少初期投资而有意识地减弱路面地强度,这是因为高速公路建成使用地初期交通量一般不会太大,但会随着时间而增加,当交通量增加到一定程度时,再在原有路面上加铺第二层罩面。(4)时间效益性,指高速公路养护维修作业时交通扰乱持续时间对经济效益地影响。根据美国国家沥青协会地估算,一段平均日交通量达10万辆车次的交通若被扰乱,每天地直接经济损失就高达22万美元。因此尽可能减少对交通的干扰、缩短交通扰乱地时间是高速公路养护维修作业地一项重要要求。为此应尽量减少养护作业地时间,快速地准备好作业现场,在养护维修工作完成后快速撤离现场,恢复交通(5)安全性,高速公路地车流量大,车速高,在进行养护维修作业时通常只是封闭一个车道,在车辆继续运行地情况下必须确保养护操作人员以及往来车辆地安全,这是高速公路养护所必须考虑的因素。 上面所讲的6个特点,是高速公路养护的一般特点,我国由于特殊的国情,使得高速公路的养护有着自己的特点。我国人多地少,所以高速公路边坡取值偏陡,也就是说相对地增加了路侧的危险性;在经济比较发达的地区,高速公路沿线村镇密集,下穿通道很多,因此也要抬高路堤高度,从而业增加了路侧的危险性。这些设计上的特点使得我国高速公路路基边坡和防护栏的养护具有相对的重要性。除了路堤高度比较高,边坡比较陡以外,中央分隔带、路缘带、路肩等的宽度与国外标准相比也是偏向下限值,这些较窄的中央分隔带、路缘带、路肩都使得实地养护作业可以利用的空间减小,工作的难度变大。2.4高速公路路产分析从全局的角度来看,高速公路的路产是一大类事物——路产类,它可以分成两部分:沿线附属设施和养护所用的机械与车辆。沿线附属设施包括:交通安全设施、监控系统、收费系统、通信系统、供电照明系统和服务区等,如表2-2所示。表2-2沿线附属设施包括的建筑物、仪器、设备交通安全设施交通标志:道路编号、方位标志;交叉口方向、地点标志;收费站标志;交通指示标志等安全护栏:中央隔离带护栏、路侧护栏、防撞垫防眩设施、隔离设施、视线诱导标监控系统监控中心:紧急电话控制器、闭路电视控制器、大屏幕投影仪、大型地图版、计算机系统信息采集系统:车辆监测器、能见度监测器、路面冰冻监测器、光亮度监测器、摄像机、紧急电话信息提供系统:可变情报板收费系统收费中心 收费站收费车道设备:车道控制计算机收费员终端电动栏杆票据打印机等闭路电视设备对讲系统通信系统光缆、电缆、网络设备、电话等服务区加油站、维修站、餐厅旅社、停车场、厕所,供水设施、污水处理设备供电系统低压变电器、发电机组、整流器、架空线、电缆、接地体、避雷针等照明系统杆柱、高杆、悬索、照明器高速公路的养护机械和车辆主要有:背携式除草机、洒水车、路面清扫车、15-40吨大型沥青混合料摊铺机、多功能养护车、多用途压路机、沥青储罐、可移动式沥青混合料拌合机、发电机组、养护自卸车、装载机、油罐、油罐汽车、运输汽车等。2.5小结本章研究的内容是SMAMS系统设计的基础,它在系统功能模型与工作流程分析中具有十分重要的意义。本章的内容可概括为以下几点:(1)总结了高速公路养护的基本概念,并指出了支持高速公路养护在交通发展过程中的重要意义。(2)深入分析了高速公路养护及路产管理的工作内容,总结出高速公路养护和路产管理中所要面对的三类事物:即养护对象类、养护工作类、路产类,这三类事物的确定为下章SMAMS系统的设计奠定了基础。(3) 提出了高速公路养护的六大特点,即预防性,经常性和周期性,复原性,补强性,时间效益性以及安全性,对我国高速公路养护的特殊性进行探讨,这些特点的分析也为系统的具体设计提供了参考依据。 3SMAMS系统总体设计3.1系统目标本系统设计的目的是针对目前国内高速公路养护管理的现状基于GIS技术与网络技术开发一套适用于国内高速公路中小养护企业的管理信息系统。该系统的建成后,可使分散在几十,几百公里范围内的养护站点统一起来,接受管理中心的管理,使得单独的作业成为联合的行动,从而使设备、资金、人力得到更为充分的利用。同时系统在移动道路测量系统,特别是地理信息系统的支持下,能及时发现急需养护的地段,分析出养护的重点,也能对某些路产进行更优的布置或者其他的决策支持,从而在整体上提高管理的水平。除此之外,系统还将路产信息纳入系统的管理,从而可使路产的使用更加科学、合理,同时,也可确保减少公司资产的流失或使用不当所造成的破坏。3.2技术路线3.2.1客户机/服务器模式(Client/Sever,C/S)在一个应用程序系统中,包括数据存储层、业务处理层和界面表示层等三个层次。在数据存储层中,由数据库管理系统来完成对数据的各种维护操作。业务处理层就是数据库应用程序将要处理的与用户紧密相关的的各种业务操作,这一层通常使用相关程序设计语言编程来完成。界面表示层是数据库应用程序提供给用户的可视化操作界面,是用户提出请求和接受回应的地方。应用程序的架构模式就是指应用程序系统中数据存储层、业务处理层、界面表示层以及网络通信之间的布局和分布,一般可以分为四种模式:单用户模式、集中式模式、客户机/服务器模式、浏览器/服务器模式(Browser/Sever,B/S)。单用户模式一般采用MicrosoftAccess、VisualFoxPro等桌面型数据库管理系统,数据存储层、业务处理层和界面表示层都存在于一台计算机上,这种模式适合于未联网的用户。集中式模式是一种采用大型主机和终端结合的系统,数据存储层和业务处理层都放在主机内,只有界面表示层放在终端上。客户/服务器模式简称为C/S,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。C/S 模式中数据存储层在服务器上,业务处理层和界面表示层在客户机上。浏览器/服务器模式简称为B/S,客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或InternetExplorer,服务器安装Oracle、Sybase、Informix或SQLServer等数据库。浏览器通过WebServer同数据库进行数据交互。B/S模式是在C/S模式的基础上发展起来的,但是不能笼统的讲B/S模式优于C/S模式,它们各有优缺点。B/S模式数据和应用程序都存放在服务器上,客户端用户界面直观,易于使用,通用的浏览器对所有服务上的信息进行查询和共享,而且客户端仅需单一的浏览器,而不需要安装其它的应用软件。也就是说在客户端不存在改造和版本更新问题,这样就使得系统维护和管理费用降低。C/S主要的特点在于能够给服务器减轻压力,能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,从而客户端的响应速度较快。C/S一般面向相对固定的用户群,对信息安全的控制能力很强,系统的运行也较为稳定,B/S面向是不可知的用户群,对安全的控制能力相对弱。目前ERP(EnterpriseResourcePlanning的缩写,中文翻译为“企业资源计划”)等办公软件产品还是以C/S居多,还有微软的MCSE、印度NIIT等的远程考试系统都是基于C/S结构。由于养护公司的各个养护站点沿着高速公路分布在几十到几百公里的范围内,而公司的管理中心一般在大城市内。所以利用单用户模式设计的系统是不可能解决管理问题的,而集中式模式是基于局域网的,养护站点和管理中心相距最远有几百公里,因此集中式模式也是不适用的。在上述的四种模式中,只有C/S、B/S模式是可选的。考虑到C/S模式在减轻服务器压力、客户端响应速度快、安全性和稳定性等方面的优点,从而在C/S和B/S模式中选择C/S模式来构架SMAMS[13][16]。3.2.2组件技术的应用根据系统的设计目标,SMAMS系统应是一个典型的空间信息管理系统,而空间信息系统的开发有独立开发、宿主型二次开发以及组件式二次开发等三种模式,其中组件式二次开发具有以下特点:①开发高效无缝的系统集成,允许将专业模型、GIS控件、其它控件紧密地结合在统一的界面下[50][51]。②无需专门的GIS开发语言, 只要掌握基于Windows平面的通用环境(VB,VC++,Delphi,powerBuilder等),以及组件式GIS各控件的属性、方法和事件,就能完成应用系统的开发。③大众化的GIS,用户可以象使用ActiveX控件一样使用GIS的控件,使非专业的GIS用户也能胜任GIS应用开发工作。④开发成本低,非GIS功能可以利用非专业控件,降低了系统的成本。鉴于上述的分析,在SMAMS系统中组件式开发二次模式应是较好的选择,在本系统中采用的是ERSI公司的MapObjects2.0组件,开发环境为MicrosoftVisualBasic6.0。在此基础上,同时系统利用了ArcView的编辑、分析、输出功能[21][20]。3.3系统框架设计根据上章的分析以及系统设计目标,SMAMS系统的实现至少要对养护对象、路产、养护工作等三类事物进行管理,考虑到这三类事物都具有明显的空间特性,因此,系统的实现必须基于GIS技术。图3-1给出了系统的总体构架。该系统包含路况管理模块、路产管理模块、日常养护模块、系统管理模块以及地理信息系统模块等五个模块,系统管理模块负责管理系统使用者的权限、用户名和密码,在系统中处于相对独立的地位。系统从总体上可划分为数据输入功能,空间数据管理功能,属性数据管理功能以及数据输出功能等四部分。养护对象类路产类养护工作类路况管理模块路产管理模块日常养护管理模块系统地理信息系统模块系统管理模块图3-1系统的总体框架 3.3.1数据输入数据输入功能包括三方面内容,即移动道路测量系统采集和处理的数据以Shape文件的形式进入系统,用户通过设计的用户界面向系统输入数据,系统从Excel和Text的文件导入数据。3.3.2空间数据管理该模块主要完成空间数据库基本操作、图形管理、空间分析等功能。①数据库基本操作:在空间数据库中追加、删除、修改相应的记录,对空间数据作基于属性条件、空间条件的查询,如搜索距离某个位置最近的加油站。②图形管理功能:包括图形的缩放、漫游、符号设计、图形修整和装饰,增删、移动、拷贝图形、计算长度、面积、周长等。③空间分析功能:在本系统中设计有缓冲区分析、空间聚类分析以及地形3维可视化等功能。3.3.3属性数据管理属性数据管理是整个系统的重要组成部分,它具备数据库操作、数据输入功能。数据库结构操作包括以下三个部分:①建立新库,包括字段名称、类型及长度的定义,建好新库后可直接输入属性数据。②修改库结构,包括字段内容、类型及宽度,以及字段的插入、删除。③拷贝库结构,具有相同字段的库文件可拷贝库结构来建立一个新的库文件。数据库操作功能包括:对数据库中的表按字段或者记录联结;从其它形式的数据导入或导出其它形式的数据;对数据库文件排序,利用结构化语句SQL查询。3.3.4数据输出数据输出包括文档和图件输出两个方面。①文档输出:系统可将用户所需要的各种报表以Word、Excel以及Text文件形式进行输出[54][55]。②图件输出:图件输出前,用户可以根据需要添加符号、颜色、注记、图例,并对图廓进行整饰;同多种输出设备的类别(打印、笔式、喷墨、静电、制版等)和型号相兼容;能够向用户提供矢量图、栅格图、全要素图和各种专题图。 3.4数据采集方式设计在系统的总体框架图中可以看出,养护和路产管理所需的基础数据都是来自地理信息系统模块的。地理信息系统模块的建立的基础就是数据的采集,几乎对于任何地理信息系统的建立,数据采集和数据处理是最消耗人力、财力、时间的工作。目前,我国测绘界成图作业方式有两种[36]:一是传统的人工内外业结合的方式,该方式耗时费工,历时数十年,已明显不能适应快速成图的现代潮流。并且高速公路上车速快,车流量大,进行人工测量的难度大,且危险性很大。二是卫星遥感与航空摄影测量,适用于大面积测绘作业,但同时具有成本高,在某些应用下精度不足、判读难的缺点。从大的形势来看,目前制约我国ITS建设的关键就在于缺乏全面、准确的地理信息数据。我国现有1:1万等基本比例尺地形图大多是70年代、80年代生产出来的,在很多方面早已不能满足需要。近年来,各行各业对地理信息进行更新的要求日趋强烈。图3-3武汉立得移动道路测量系统的外观 然而,落后的数据采集方式一直是制约我国地理信息建设的瓶颈。所以此次研究中采用“移动道路测量系统”来采集数据。移动道路测量系统源于美国、加拿大等发达国家,美国的俄亥俄州在1989年就已经开发出功能较强的移动道路测量系统GPSVan[37]。武汉大学立得公司的研究人员在学习美国和加拿大的系统的基础上,创建了国产的移动道路测量系统,如图3-3。“移动道路测量系统”中的原理方法不在本课题的研究范围之内,但它是SMAMS不可缺少的重要组成部分,所以在此进行必要的介绍。“移动道路测量系统”是专指以汽车为运载工具的移动式测图系统,代表着未来道路电子地图测制领域的发展主流。它是在机动车上装配GPS(全球定位系统)、CCD(视频系统)、INS(惯性导航系统)或航位推算系统等先进的传感器和设备,在车辆的高速行进之中,快速采集道路及道路两旁地物的空间位置数据和属性数据,如:道路中心线或边线位置坐标、目标地物的位置坐标、路(车道)宽、桥(隧道)高、交通标志、道路设施等。数据同步存储在车载计算机系统中,经事后编辑处理,形成各种有用的专题数据成果,如导航电子地图等等[38][39][40]。3.5空间数据存储模式设计高速公路的养护与路产管理所涉及的养护对象类、路产类、养护工作类都有空间特性,同时又有着丰富的属性数据。要实现对这些数据的合理存储,必然要使用地理空间数据库。一个大的空间数据库通常将空间数据与属性数据分别存储,空间数据通常由各GIS软件提供的数据模型方式存储,而属性数据则使用RDBMS存储,两者通过关键项进行连结。在GIS中常用的关系数据库管理信息系统有DBASE,Oracle,SQLSever,Informix,INGRES,INS,INFO等。其中SQLServer是典型的关系型数据库产品,SQLServer诞生于1988年,由Sybase和Microsoft公司合资开发。1993年,SQLServer4.2forWindowsNTAdvancedServer3.1发布,1995年微软发布了SQLSever6.0,1996年发布了SQLSever6.5,1999年发布了SQLSever7.0[17]。SQLServer是一个客户/服务器关系型数据库系统。它使企业可以设计出能够满足不断改变的信息需求的分布式数据库系统。客户端通过网络向服务器发送SQL语句,服务器返回客户端结果集。在客户机/服务器软件的概念中,SQLServer是后端部分,而客户端是前端部分[14][15][16]。SQLServer 支持多种客户端(如:PowerBuilder、VB、Delphi、VC等开发的应用程序)[18]。通过这些客户端,用户可以插入、更新、删除和查询存储在SQLServer数据库中的数据。SQLServer本身包含许多客户端工具,例如,SQLEnterpriseManager(SQL企业管理器)、MS-Query、QueryAnalyzer和OSQL。SQLServer还可以和微软的Excel、Access和CrystalReports协作运行,它们都是可以访问ODBC兼容的数据库中数据的应用程序。SQLServer提供一个灵活的功能强大的平台,这个平台可用于大字节(TB)尺寸的数据库,并能同现有的应用程序无缝结合。微软SQLServer和它的竞争者相比都具有较低的总体费用,硬件费用、服务器和客户端的许可费用、开发费用和运作中的管理费用都较低。虽然微软SQLServer必须运行于NT服务器环境或windows95/98下,但它是独立于网络协议的。它可以和任何使用符合工业标准的网络协议操作系统下的客户端通信。鉴于SQLServer的上述优点,选择SQLServer2000来完成空间数据库中的对属性数据的存储。空间数据采用Shape文件存储,shape文件的格式是ESRI(EnvironmentalSystemsResearchInstituteInc.)定制的。对空间数据的管理采用ArcView和MapObjects完成。MapObjects2.0是使用面向对象技术设计的,把数据结构和数据结构上的操作算法都封装在一个对象里,使得用户在开发时不必对深层次的数据结构和算法作过多的考虑。ArcView已经有20多年的历史,有着较丰富的空间数据可视化、查询、编辑、分析功能。所以研究中,在利用MapObjects2.0和VB6.0进行二次开发的基础上,又使用了ArcView的编辑分析功能[21]。3.6系统的数据流程分析图3-5描述了系统内数据流动的情况。路况与路产信息是系统要储存和管理的核心内容,它的来源有两个:一是移动道路测量系统所采集和处理的,另外就是养护站点的工作人员所观察到的。这些信息又存储在两个部位,一是以空间数据的格式(shape文件)存储在地理信息系统中,二是存储在服务器的数据库内。从流程图中可以看出管理人员和养护站点的人员都是通过客户端工具与系统的数据库沟通的。客户端工具指为路产信息管理模块、路况信息管理模块、日常养护管理模块、系统管理模块所编写的程序和界面,对于系统的管理员来说他还可以使用SQL Server提供的客户端工具查询分析器、服务管理器、企业管理器等。管理人员移动道路测量系统养护站点GIS软件(以shape文件形式存储)数据库服务器路况路产信息必要的人工处理提供信息(通过客户端工具)接受指令(通过客户端工具)提取信息提取信息(通过客户端工具)发出指令(通过客户端工具)下载图3-5系统的数据流程在图3-5中表明,在服务器和养护站点的微机上都安装了地理信息系统,服务器上的地理信息系统接受移动道路测量系统提供的路况和路产数据,而各个养护站点从服务器上下载地理信息系统的软件和更新的空间数据。这样服务器上的工作人员和养护站点的工作人员都可以从空间尺度上来掌握路况和路产信息。数据库中的数据来源于地理信息系统和养护站点工作人员, 管理人员为了正确的养护决策,从地理信息系统和数据库中提取所需的信息,进行思考,然后通过网络将指令传达。统观全图,地理信息系统模块在其中处于枢纽地位,很明显数据库中的相当一部分数据是来自地理信息系统的。管理人员在地理信息系统的帮助下,可以把握宏观,作出科学决策。养护站点的人员在地理信息系统的辅助下才能很好的贯彻执行管理者的决策,也能更快的发现问题,向上级汇报。比如管理人员通过移动道路测量系统发现了某处路面的损坏,就可以通过地理信息系统判断向哪几个养护站点发出命令,并且分析周边的地理环境,作出初步的养护方案。接到命令的养护站点人员,在地理信息系统的辅助下,就能很快找到需养护的地点,从而完成任务。3.7小结本章在系统设计目的及技术路线的基础上,提出了SMAMS系统的整体框架,并进一步分析出SMAMS总体技术方案,具体包含以下几方面的内容:(1)根据对高速公路养护与路产管理内容的分析,提出了系统的总体设计目标以及系统设计的技术路线;(2)在确定系统的总体设计目标以及系统设计的技术路线下,进行了系统总体框架的设计,着重对系统的功能模块进行了分析。(3)对于SMAMS系统中空间数据的采集问题,分析了现有的两种数据采集方法,即传统的人工内外业结合法和卫星遥感与航空摄影测量法,指出了这两种方法在SMAMS系统应用中的不足,在此基础上提出了利用“移动道路测量系统”进行数据采集的方案,并对该方案进行了剖析。(4)分析了SMAMS系统中的空间数据存储模式,提出了采用MicrosoftSQLServer2000和ESRIShape文件进行属性数据和空间数据的存储模式。(5)分析了SMAMS系统中的数据流程,为系统的实施提供了保障。 4SMAMS的数据组织与管理4.1空间数据的组织与管理4.1.1空间数据模型的选择地理空间数据模型是用数据对现实世界地理现象的抽象表达,是地理空间数据库中用于提供信息表示和操作手段的形式构架,是研究地理空间数据表达、管理和进行空间分析的基础。一个空间数据模型可以被定义为一组有相关关系联系在一起的实体集。一个实体是存在的和可区别的,如人、汽车、河流等都是实体。空间数据模型是在实体的概念上发展起来的,它包含两个基本内容:专门的实体组和它们之间的相关关系。实体及相关关系可以通过属性和性质来说明,存贮在实体的属性集中[42]。GIS中空间数据模型主要分为以下三种类型:(1)矢量模型。在矢量模型中,现实世界的要素位置和范围可以采用点、线或面表达,与它们在地图上表示相似,每一个实体的位置是用它们在坐标参考系统中的空间位置(坐标)定义。地图空间中的每一位置都有唯一的坐标值。点、线和多边形用于表达不规则的地理实体在现实世界的状态(多边形是由若干直线围成的封闭区域的边界)。一条线可能表达一条道路,一个多边形可能表达一块林地等。矢量模型中的空间实体与要表达的现实世界中的空间实体具有一定的对应关系[44]。(2)栅格模型在栅格模型中,空间被规则地划分为栅格(通常为正方形)。地理实体的位置和状态是用它们占据的栅格的行、列来定义的。每个栅格的大小代表了定义的空间分辨率。由于位置是由栅格行列号定义的,所以特定的位置由距它最近的栅格记录决定。栅格的值表达了这个位置上物体的类型或状态。采用栅格方法,空间被划分成大量规则格网,而且每个栅格取值可能不一样。空间单元是栅格,每一个栅格对应于一个特定的空间位置,如地表的一个区域,栅格的值表达了这个位置的状态[56]。(3)矢量栅格混合模型最简单的混合模型是把矢量栅格数据不做任何特殊处理,分别以它们各自的结构存储,需要时将它们调入内存,进行统一的显示、查询和分析。Peuauet于1981年发明了vasterdata model,模型的基本逻辑单元是条带,每个条带包含有栅格成分,也有矢量成分。龚健雅于1993年提出了矢量栅格合一数据模型。在这种模型中具有矢量实体的概念,又具有栅格覆盖的思想。该模型的理论基础是多级格网方法、线形四叉树编码和自定义的约定[43]。上述的三种的基本数据模型中,矢量栅格数据模型尚处在理论研究阶段。矢量和栅格数据模型各有优缺点,但矢量数据模型的明显优点在于:通过唯一的目标标识使每个地物具有良好的个性化特性,并能根据名称和各种复合的条件使每一个地物具有良好的可选取性,便于空间查询和空间分析。同时矢量数据模型具有精度高,数据结构严密,数据量小等优点,所以目前大部分GIS软件都采用矢量数据模型。在高速公路养护与管理中主要的空间数据有点——报警电话、加油站,线——车道线,面——(服务区),鉴于矢量模型的种种优点,采用矢量数据模型管理高速公路养护与管理的空间数据。4.1.2图层设计高速公路的空间数据采用矢量模型,存储在shape文件中。在ArcView和MapObjects中以图层来组织和管理空间数据。为了提高地图中各个要素的检索速度,便于数据的灵活调用、更新及管理,在空间数据库中,往往将不同类、不同级的图元要素进行分层存放,每一层存放一种专题或一类信息。按照用户一定的需要或标准把某些相关图元要素组合在一起成为图层,它表示地理特征以及描述这些特征的属性集合。在同一层信息中,数据都具有相同的几何特征和相同的属性特征[57]。对地图进行分层管理,是计算机对图形管理的重要内容,以层的管理形式效率最高。分层便于数据的二次开发与综合利用,实现资源共享,也是满足多用户不同需要的有效手段,各用户可以根据自己需要,将不同内容的图层进行分离、组合和叠加形成自己需要的专题图件,甚至派生出满足各种专题图幅要求的不同底图。数据分层可以按照专题、时间、垂直高度等方式来划分。另外不是图层分得越细越好,分得过细不便于操作人员记忆,不利于管理,不利于考虑要素间相互关系的处理;反之分得过稀,编辑时要素间互相干扰,不利于某些特殊要求的分析与查询。 路面病害路基边坡病害沿线设施病害报警电话桥涵病害加油站路产(点)政区基础地物(线、面)………………………………………………..病害(点)………………………养护站点高速公路图4-1图层设计对于高速公路的空间数据按照专题分层的方式,划分成如图4-1所示的层次结构。4.2属性数据的组织与管理高速公路的属性数据的组织和管理是在SQLSever数据库中完成的。在需求分析阶段,高速公路养护公司人员的应用需求,要在Sever库中实现,就要将用户需求抽象为信息结构。这一步是通过利用实体-关系模型实现的。实体-关系模型,其英文为Entity-RelationModel,即E—R模型,是用实体关系来表示数据关系的模型。如图4-2,展示了在分析高速公路养护和路产管理需求基础上生成的E-R图。 4.2.1系统数据的E-R模型养护对象类路产类养护工作类系统管理类路面类路基边坡类技术标准类养护人员类桥涵类沿线设施类路产类工作统计类系统管理类水泥路面技术参数类沥青路面技术参数类路面养护工作类路基边坡工作类沿线设施工作类桥涵工作类图4-2高速公路养护与路产管理的E—R图生成E-R图,主要应用面向对象的方法进行抽象、概括和分类。从养护公司的实际工作中概括出三类事物,养护对象类、路产类、养护工作类。再加上由于系统管理需要产生的系统管理类,对这四类再作仔细的划分和描述,就可知道数据库中应该有多少张表以及表的内容。分类越是向下进行,难度就越大,原因很简单,越是往事物的内部分析,联系就越紧密,实现分类的难度就更大。如图4-2,养护工作类可以划分为养护人员类、技术标准类和工作统计类。养护人员类负责对养护工人进行分组管理,技术标准类为养护人员的工作提供规范和标准,而工作统计类是对养护人员按照技术标准所作的养护工作的汇总。所以在设计数据库时,就考虑以某些字段来建立它们之间的联系。 工作统计类可以根据养护时针对的病害不同,进而划分为路面养护工作类、路基边坡工作类、沿线设施工作类、桥涵工作类,当然这四类的划分在局部看来是十分明确的。但是与更高层次中养护对象类的划分对比可以看出,这四类与养护对象类中路面类、路基边坡类、沿线设施类、桥涵类存在着一一对应的关系,是同一事物在不同场景中的两种表现。所以在数据库中用一张表来描述如路面养护工作类和路面类这些有着对应关系的类别。当然在技术标准类可以再划分出路基边坡技术参数类、沿线设施技术参数类、桥涵技术参数类,但是养护技术参数的制定是基于力学、材料科学和工程科学的,与作者的学科相差较远,所以作者只是提供了路面技术标准,其余的标准有待专业人才进行完善[27][28][29]。表4-1数据库中的表与相应的类的映射关系编号表的中文名表所指向的类1用户表系统管理类2路基边坡调查表路基边坡类、路基边坡工作类3路面调查表路面类、路面养护工作类4桥涵调查表桥涵类、桥涵工作类5沿线设施调查表沿线设施类、沿线设施工作类6路产表路产类7养护班组表养护人员类8水泥路面养护技术参数表水泥路面技术参数类9沥青路面养护技术参数表沥青路面技术参数类最终可以分析得到数据库中应包含九张表,与相应的十三个类存在映射关系,如表4-1所示。上述的表中,除用户表和养护班组表中的属性项较少以外,其余各表的属性都在30余项,4.2.2数据表的逻辑设计在关系数据库中,数据库的文件单元是属性表,属性表是属性值的二维表格表示形式,一般属性表中的行表示实体目标,列表示属性值,而表与表之间维持着某种关系,即以相互关联的两个表中均存在某一公共项维持,这项叫做关键项(Primary Key)。使用关系表对一个数据库的设计是很关键的,因为它影响到整个数据库运作的行为和效果。地理空间数据库中的空间和属性数据之间的关系就是靠关键项来维持的。养护和路产属性数据库中的表除了用户表以外,其余的表都是有联系的,图4-3展示了它们之间的联系。每张表都有一个主键约束,以确保每行数据的唯一性,如路基边坡调查表中的字段BaseID,养护班组表中的字段RcyhId。选择主键项时,被选择的字段必须就有以下特征:唯一性,在每个表中,每个记录的关键项必须是唯一的不变性,从来不会被更改。纯粹性,不包含其它方面的信息不重复性,不会被重复使用,即某一个值被删除后,不会再被使用。水泥路面养护技术参数表沥青路面养护技术参数表字段技术组编号路面调查表桥涵调查表沿线设施调查表路产表养护人员表字段代表病害类型的ID字段CADID图4-3数据库中表的联系外部关键项相对于主关键项而言,主关键项存在与母表中,而外部关键项则存在于子表中。它是主关键项在子表中的一个副本,不要求它具有唯一性[14][17]。如字段RcyhId在班组表中是主关键项,而在路基边坡表中成为外部关键项,相应的养护班组表成为母表,路基边坡表是子表。字段CADID是为了实现SQLSever数据库中的属性数据和地理信息系统中的空间数据相连而设定的字段。 各表的具体设计情况如下[23][24][25]:(1)路面调查表ConcreteDisease[25][22]表4-4路面调查表ConcreteDisease的内容字段名称说明数据类型大小RoadID主键Char20CADID和空间数据连接Char20RcyhId技术组编号(外键)Char10MainId外键Char10LiqingId外键Char10RoadName路线名称Char20RoadLength路线长度Char20BeginPegNum起点桩号Char20EndPegNum讫点桩号Char20Weather天气状况Char8InvestigationWay询查方式(日常、定期、特殊)Char8Orientation检测方向Char8DiseasePos病害位置Char8InvestigationDate调查日期datetime8InputDate录入日期datetime8Investigator调查者Char8Importer录入者Char8GPS_LatGPS坐标-纬度Float8GPS_Lon-经度Float8GPS_Alt-高程Float8RoadBand路面等级Char8M_Zcrack面层裂缝-纵向裂缝float8M_Hcrack-横向裂缝float8M_Xcrack-斜向裂缝float8M_CornerCrack-角隅断裂float8M_AcrossCrack-交叉断裂float8 M_Chap-龟裂网裂float8M_Block-破碎板float8B_SinkH表面-沉陷高差float8B_SinkA面积float8B_UpheavalH-拱起高差float8B_UpheavalA面积float8B_Peel-表面剥落float8B_Pollute-路面污染float8B_Repair-修补损坏float8B_Hole-坑槽坑洞float8J_Filling接缝-接缝填料损坏float8J_Stretch-接缝张开float8J_Smash-接缝碎裂float8J_Mud-翻浆唧泥float8J_CuoTai-错台高差float8T_GnowSide特殊路面-啃边float8T_Track-车辙float8T_FloatOil-泛油float8T_Polish-磨光float8T_MaLoose-麻面松散float8T_WashBoard-搓板波浪float8PicPath病害图象路径char20Remark备注char100(2)桥涵调查表BridgeDisease[27][28]表4—5桥涵调查表BridgeDisease字段名称说明数据类型大小BridgeID主键Char20CADID和空间数据连接Char20RcyhId技术组编号(外键)Char10 RoadName路线名称char20BridgeName桥涵名称char20BridgeLength桥涵长度float8BeginPegNum起点桩号char20EndPegNum讫点桩号Char20DiseasePos病害位置Char20GPS_LatGPS坐标纬度Float8GPS_Lon经度Float8GPS_Alt高程Float8TechnoStatus桥梁技术等级Char8SurfLenNum面层断裂处数Int8SurfLen长度Float8SurfAreaNum面层损坏处数Int8SurfArea面积Float8JumpVehicleLen桥头跳车长度Float8JumpVehicleNum处数Int8Drainlen排水系损坏(堵塞)长度Float8DrainNum处数Int8FlexCrackLen伸缩缝损坏长度float8FlexCrackNum处数Int8HandRailLen栏杆防撞墙长度Float8HandRailNum处数Int8WallSlopeArea翼墙锥坡损坏面积Float8WallSlopeNum处数Int8PrevMeshArea上跨天桥防落网面积Float8PrevMeshNum处数8GirderArea上部结构(面积)梁体损坏Float8ArchArea主拱圈坏float8 TransectArea横向联系Float8PedestalArea下部结构支座面积Float8PedestalNum处数Int8FrustaArea墩台面积Float8FrustaNum处数Int8BaseArea基础面积Float8BaseNum处数Int8HoleNum涵洞与隧道洞体损坏处数Int8HoleArea面积Float8LeakageNum渗漏积水排水不良处数Int8LeakageArea面积Float8WatchSysNum通风监视系统故障(处)Int8LightNum照明设施损坏处数Int8PicPath病害图象路径Char20Remark备注Char100(3)路基、边坡调查表BaseDisease[29][30]表4-6路基、边坡调查表BaseDisease字段名称说明数据类型大小BaseID主键Char20CADID和空间数据连接Char20RcyhId技术组编号(外键)Char10RoadName路线名称char20BeginPegNum起点桩号char20EndPegNum讫点桩号char20DiseasePos病害位置char20BaseType地质类型Char20GPS_LatGPS坐标—纬度float8GPS_Lon-经度float8GPS_Alt-高程float8 RoadBedLen路基坍滑-长度Float8RoadBedRake-斜长Float8RoadBedDeep-深度Float8RoadStoneArea路缘石缺省-面积float8-处数Int8RoadShoudLen路肩沉陷、损坏-长度Float8RoadShoudRake-斜长float8RoadShoudDeep-深度Float8SlopeGullyLen边坡冲沟-长度float8-深度Float8SideSlopeLen边坡坍塌-长度Float8SideSlopeRake-斜长Float8SideSlopeDeep-深度Float8SlopePileArea边坡堆积(面积)Float8DrainLen排水系损坏(堵塞)-长度Float8DrainNum-处数Int8FenseLen防护工程-长度Float8FenseNum-处数Int8PicPath病害图象路径Char20Remark备注Char100(4)沿线设施调查表FacilityDisease[12][31]表4-7沿线设施调查表FacilityDisease字段名称说明数据类型大小FacilityID主键Char20CADID和空间数据连接Char20RcyhId技术组编号(外键)Char10RoadName路线名称char20RoadLength路线长度char20BeginPegNum起点桩号char20 EndPegNum讫点桩号char20Weather天气状况char20InvestigationWay询查方式char20Orientation检测方向char20DiseasePos病害位置char20InvestigationDate调查日期datetime8InputDate录入日期datetime8Investigator调查者char10Importer录入者char10GPS_LatGPS坐标-纬度float8GPS_Lon-经度float8GPS_Alt-高程float8TollStationNum收费站设施缺损(处)int8CounterfortNum防撞护栏缺损(处)int8PartionNum隔离栅缺损(处)int8CounterSwimNum防眩设施缺损(处)int8BaffleWallNum隔音墙缺损(处)int8PhoneNum紧急电话缺损(处)int8LightNum照明设施(缺损)int8SighLineLen标线缺损(米)float8GreenLen绿化空白路段(米)float8GreenManLen绿化管护不善(米)float8LMJSum龙门架式标志牌(处)Int8XGSNum悬臂式标志牌(处)int8LZSNum立柱式标志牌(处)int8RoadSteleNum公路牌、碑(处)int8G_TollStation收费站设施缺损程度char4G_Counterfort防撞护栏缺损程度char4G_Partion隔离栅缺损程度char4G_CounterSwim防眩设施缺损程度char4G_BaffleWall隔音墙缺损程度char4 C_Phone紧急电话缺损程度char4G_Light照明设施损坏程度char4G_SighLine标线缺损程度char4G_Green绿化空白路程度char4G_GreenMan绿化管护不善程度char4G_LMJS龙门架式标志牌损坏程度char4G_XGS悬臂式标志牌损坏程度char4G_LZS立柱式标志牌损坏程度char4G_RoadStele公路牌、碑损坏程度char4PicPath病害图像保存路径varchar20Remark备注varchar100(5)路产表Asset表4-8资产表Asset字段名称说明数据类型大小AssetID资产编号(主键)Char20Asset_Name资产名称Char20CADID和空间数据连接Char20RcyhId技术组编号(外键)Char10Spec_Type规格型号Char20Unit计量单位Char20Number数量Int8Y_Value原值Float8Y_Position原存放地点Char20Y_Administrator原责任人Char8X_Position现存放地点Char20X_Administrator现责任人Char8Use_Thing使用情况Char20Use_Date使用日期datetime8 Check_Num验收单号Char20Description备注Char100(6)养护班组表Daoban表4-9养护班组表Daoban字段名称说明数据类型大小RcyhId技术组编号(主键)Char10Maintainers养护技术员Varchar8Leader技术负责人Varchar8Groups技术组Varchar20(7)水泥路面养护技术参数表MaintainTecDB[11][32]表4-10水泥路面养护技术参数表MaintainTecDB字段名称说明数据类型大小MainId编号(主键)Char10HighwaySort路面类型Char10DiseaseSort病害类型Varchar20SortCharacter病害特征Varchar50Degree破损程度Char4DiseaseDetail相应等级病害的细节Varchar200Dispose病害处理方法Varchar500(8)沥青路面养护技术参数表LiqingTecTable[11]表4—11沥青路面养护技术参数表LiqingTecTable字段名称说明数据类型大小LiqingId编号(主键)Char10HighwaySort路面类型Char10DiseaseSort病害类型Varchar20DiseaseCauseAndDetail病害特征及其细节Varchar200 Dispose病害处理方法Varchar5004.3空间数据与属性数据的连接高速公路的空间数据存储在Shape文件中,属性数据存储在SQLSever库中,两者必须通过一定的机制联结起来,才能完成真正意义上的对空间数据和属性数据的统一管理。Shape文件中也存储着一部分属性数据,属性数据和矢量的空间数据是分开存储的。Shape文件由三个文件构成:主文件型如*.shp,索引文件型如*.idx,数据库文件型如*.dbf。主文件中存储空间数据,数据库文件存储属性数据,索引文件将两者联系起来[46]。在Shape文件中,每个地物都有一个唯一标识码(地物ID),而在关系数据表结构中,也有一个标识码属性,这样每条记录可以通过该标识码确定与对应地物的连接关系(图4-4)。采用该管理方式的缺点在于经常进行根据地物ID的查找(既包括从给定的地物查找其对应地记录,又包括根据给定地记录检索相应的地物),使查询、模型运算等一些操作的速度变慢。地物ID坐标X1,Y1,X2,Y2…X1,Y1,X2,Y2…X1,Y1,X2,Y2……ID1ID2ID3…地物ID属性1属性值属性值属性值…ID1ID2ID3…属性2属性值属性值属性值………………(a)通过文件管理空间数据(b)通过关系数据库管理属性数据图4-4同时使用文件和关系数据库管理GIS数据,其中利用地物ID建立记录之间的连接关系shape文件的属性表中有一个字段“shape”,但是该字段在整张表中的值是相同的,其内容是point、line或者polygon。Shape字段中记录的内容肯定是地物的ID,但是被隐藏起来,对用户是不可见的。本次在采集空间数据时,对每个地物都记录了一个CADID,它对于各个地物是不相同的,利用这个CADID字段,可以完成SQLSever库中的属性数据与空间数据的连接。连接方法如图4-5:CADIDCADID地物ID地物ID(shape)字段Sever库中某张表的字段属性表中的字段属性表中的字段空间数据文件中 图4-5SQLSever库中的属性数据和空间数据连接的方法SQLSever库中某张表以字段CADID和属性表中的字段CADID相连,属性表中的字段CADID和shape字段(地物ID)自然相连,最后和空间数据文件中的地物ID相连。4.4小结数据组织与管理对SMAMS系统的构建至关重要,本章就该问题从空间数据和属性数据两个方面进行了探讨。(1)分析和总结了现有的空间数据模型,即矢量数据模型,栅格数据模型以及混合数据模型,针对高速公路养护与管理信息的特点分析出了满足SMAMS系统的空间数据模型。(2)对于属性数据,采用面向对象的分析方法抽象出了与高速公路养护与路产业务相关的四类对象,即养护对象类、路产类、养护工作类以及系统管理类,在此基础上提出了高速公路养护与路产管理的E-R模型,并将该模型映射为9个逻辑表,即用户表、路基边坡调查表、路面调查表、桥涵调查表、沿线设施调查表、路产表、养护班组表、水泥路面养护技术参数表以及沥青路面养护技术参数表。(3)探讨了空间数据与属性数据连接的方式,并给出了SMAMS中空间数据与属性数据连接的具体方法。5SMAMS系统中关键技术问题研究 在确定SMAMS的总体框架,技术方案,数据组织管理方案后,便需要着手实现系统。在建设系统的过程中,远程数据库的访问、数据格式的转换、空间数据的分析方法、三维可视化等成为关键技术问题。5.1远程数据库访问实现方法在SMAMS中为了实现养护站点(客户端)和管理中心(服务器端)的远程通信,除了需要硬件、操作系统、网络协议的支持外,还需要在“软件”上,用VB实现和远程SQLServer库联结。VB6.0提供了多种与SQLServer2000接口的方法:DAO数据访问对象;RDO远程数据对象;ODBCAPI编程;ADO数据对象等。5.1.1数据库连接方法的分析如图5-1,给出四种方法访问SQLSever库的途径。DAO(DataAccessObjects)访问SQLServer数据库有两种不同的对象模型可供选择,一种对象模型是通过jet引擎来访问数据,另一种是通过ODBCDirect来访问数据,这两种对象模型都是层次结构的。使用DAO的程序编码非常简单,其模型是设计关系数据库系统结构对象类的集合,它们提供了完成管理一个系统所需全部操作的属性和方法,包括创建数据库、定义表及字段和索引、建立表间的关系、定位和查询数据库等的工具。DAO方法虽然不是性能最好的管理客户机服务器之间的对话方式,但它有许多优点。DAO除了易学以外,最大的特点是只读性能高,即在以只读方式打开数据库时,查询结果集的返回和处理都非常快,甚至比RDO和ADO还快。因此用DAO对象模型进行SQLServer数据库的编程至今仍为很多应用程序所采用[34][35]。ODBC(OpenDatabaseConnectivity)API(ApplicationProgramInterface应用程序编程接口)是一套复杂的函数集,可提供一些通用的接口,以便访问各种后台数据库。与数据资源对话的公用函数组装在一个称为驱动程序管理器的动态连接库(ODBC.DLL)中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器通过驱动程序(SQLSRVR.DLL)把它们送到服务器中。虽然ODBCAPI的使用非常复杂,但ODBC访问数据库的速度非常快,能提供最佳的性能。而RDO只实现了ODBC的一部分功能。RDO(RemoteDataObjects)是从DAO派生出未的,是微软针对SQL Server和Oracle这两种大型数据库而特别设计的,目的是为了提高存取速度。RDO是一种位于ODBCDriverManager之上的很薄的代码层,它提供了一系列的对象,用JETODBCDirectSQLSever驱动ODBC驱动管理器SQLSeverDAOODBCAPIRDOADOOlEDB图5-1DAO、RDO、ODBCAPI、ADO与SQLSever的连接途径来满足远程数据访问的特殊要求。RDO很好地包装了ODBCAPI的大部分功能,在它的属性和方法中,包含了对单个的ODBCAPI函数以及一连串的API函数的调用。与DAO相比,RDO提供了前所未有的连接和查询速度。但它对SQLServer和Oracle以外的数据库的存取性能没有保证,微软己经推荐使用ADO替换RDO。ActiveX数据对象ADO(ActiveXDataObjects)封装并实现了OLEDB的所有功能,是一种高层次的、独立于编程语言的数据访问接口,可访问各种类型的数据源。OLEDB是一种低层接口,可对邮件、文本文件、数据表等各种数据通过统一的接口进行存取。但OLEDB结构非常复杂,不适宜在VB中直接访问。ADO既适合于SQLServer、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO对象模型简单,包含7个对象,4个集合。7个对象是:用来与数据源建立连接的Connection对象、执行数据库操作命令的Command对象、提供参数信息的Parameter对象、用来操作查询返回结果集的Recordset对象、用来访问记录集列信息的Field对象,用来操作其他对象详细属性的Property对象,获取错误信息的Error对象。4个集合是Fields集合,Properties集合,Parameters集合和Errors集合。 以上几种VB访问SQLServer的方法,各有各的特点。从主要用途来看,DAO主要用于访问本地数据库,如MicrosoftFoxpro、Access,也可以访问ODBC数据库,适用于应用系统规模较小,数据处理量不大的情形。RDO能很好地支持大型关系型数据库系统如SQLSever、Oracle和Sybase等,它还可以处理复杂的存储过程和结果集。ADO可以访问任何类型的数据源,只要数据是以表格形式提供的,就能对其访问包括关系型、非关系型、结构的、非结构的数据源。从性能和编程效率来看,DAO是VB最早提供的一种数据访问对象模型,是从VB访问SQLServer的最慢方式。DAO不仅没有提供对事件的支持,而且没有专门的设计器,编程工作量大。ODBC是一种通用数据库接口,用ODBCAPI允许对数据库进行任何操作,可以完成非常复杂的功能,而且访问速度非常快。但ODBCAPI函数众多,使用复杂,需要增加大量代码,因此,在实际应用系统开发中,直接使用ODBCAPI的并不多。RDO是位于ODBCAPI之上的对象模型,所需的程序短小、快速,但其应用因ADO模型的出现正逐渐减少。ADO是应用层的编程接口,通过OLEDB提供的COM接口访问数据,适合于客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是ADO的主要优势。ADO比DAO、RDO具有更好的灵活性,具有更少的对象和更多的属性方法和事件,简化了编程,访问数据的效率更高,而且其应用程序占用内存少。ADO是开发数据库应用程序功能强大的对象方法。综合以上分析,在使用VB6.0访问SQLServer2000时,ADO易使用、性能好、编程简单,而且提供了良好的互联网数据存取接口,是编写数据库应用程序的首选方法,也是趋势。因此,研究中大部分选择ADO方法,来完成对SQLSever2000的访问,而鉴于ODBCAPI访问远程数据库的速度快,部分采用了ODBCAPI方法。5.1.2数据库连接方法的具体实现无论是使用ADO方法,还是ODBCAPI方法,都离不开ODBC数据源和DSN,“开放式数据库连接”(OpenDatabaseConnectivity简称ODBC)是一个编程接口,它允许程序使用结构化查询语言(SQL)访问数据库。数据库驱动程序使用DataSourceName(DSN)定位和标识特定的ODBC兼容数据库,将信息从应用程序传递给数据库。典型情况下,DSN包含数据库配置、用户安全性和定位信息,且可以获取WindowsNT注册表项中或文本文件的表格。 通过控制面板中ODBC数据源,可以选择希望创建的DSN的类型:用户、系统或文件。用户和系统DSN存储在WindowsNT注册表中。系统DSN允许所有的用户登录到特定的服务器上去访问数据库,而用户DSN使用适当的安全身份证明限制数据库到特定用户的连接。文件DSN用于从文本文件中获取表格,提供了对多用户的访问,并且通过复制DSN文件,可以轻易地从一个服务器转移到另一个服务器。①ADO方法ADO方法有两种方式:使用ADO对象编程模型和ADOData控件,前者要在工程的引用中添加“MicrosoftActiveXObjectsLibrary”,后者要在工程的部件中添加“MicrosoftADODataControl”。②ODBCAPI的使用ODBCAPI在使用时,首先在标准模块中以ODBCAPI函数为基础声明全局过程,然后在类模块中再以标准模块中的过程为基础定义属于相应类的过程。在应用ODBCAPI的过程中充分体现了面向对象程序设计的优越性。以往面向过程的程序设计使得编程人员的思想过分沉溺到具体的代码中,使得代码的重用性不强,也不利于从整体上把握程序。面向对象的方法利用类来创建对象,就使上述的问题得到了较好的解决。例如在本次研究中要实现对数据库中某一张表的读写,就不是先声明ODBCAPI函数,再利用这些函数编写一大段程序,并且在每次读写的时候都去重复的作这些工作。而是声明一个对象,再利用对象的delete、update、insert等方法来完成对数据库表的操作,只需要两三行代码。5.2数据格式转换以移动道路测量系统采集数据和预处理以后,对于每一种地物得到两种类型的数据*.mdb和*.dwg(包括车道线,车道线上的点都记录在Accesss数据库中)。*.mdb是MicrosoftAccess的数据存储格式,*.dwg是CAD的数据存储格式。利用MapObject和ArcView,需要用shape文件格式存储的数据,所以要把*.mdb和*.dwg转换为shape文件,可采用两种方式可以完成相应转换:文件解析法和基于Arcview的方法。5.2.1文件解析方法 基于文件解析的方法,首先要对dwg文件和shape文件的数据结构进行分析,然后利用某种语言读取*.dwg,再写成shape文件,本次研究中用的是C++语言[45]。CAD在图形数据的采集和编辑方面有很强的功能;一大批数字地图生产者已经熟练地掌握了CAD技术;并且相对于GIS软件来说价格便宜,所以在很多工程应用中,都以CAD来进行地图的数字化生产,然后以各种方式将CAD数据向GIS数据转换,来进行下一步的开发[42]。但是CAD和GIS的图形数据格式各异,没有统一支持的标准,这给信息共享带来了极大的不便。解决多格式数据共享一直是近年来GIS应用系统开发中需要解决的重要问题[43]。①drawing文件的结构*.dwg中的dwg是drawing的缩写,图形文件*.dwg文件为二进制格式文件,共有5种数据形式:字符型、字节型、整型(双字节)、长整型(4字节)、IEEE标准的浮点数(即双精度浮点数)。由于AntoCAD在DWG文件中采用了以上5种标准数据类型,因此能较方便地对这些数据进行直接存取和处理,如用C++中的char实现字符型数据;用byte实现字节型数据;用int实现整型数据;用long实现长整型数据;用double实现双精度浮点型数据等[45]。从AutoCAD的资料中可知,*.dxf文件共由4个部分组成,它们分别是头部、表部、块部和实体部。而*.dwg文件的结构与*.dxf文件基本相同,它由5部分组成,分别是:头部(HEADER)、实体部(ENTITIES)、表部(TABLES)、块实体部(BLOCKS)和应急头部(CONTINGENCYHEADER)。DWG文件的头部存放着DWG文件的一些重要信息,如DWG文件标志、版本信息、各种索引用的地址以及AutoCAD软件中的一部分系统变量。头部的信息对于AutoCAD来讲是至关重要的,因为AutoCAD对DWG文件的所有寻址操作的地址均从头部的有关参数计算而来,而且头部还保存着与该文件中所保存图形密切相关的系统变量的值。实体部保存着该图形中的全部实体。所谓实体(Objects)是指AutoCAD中的基本图形单元。如:点(Point)、线(Line,Ray,Xline,Mline,Pline,Spine等)、圆(Circle)、弧(Arc)、块(Block)、尺寸标注(Dimision)等等,均为AutoCAD的实体。为了识别实体,AutoCAD将实体进行编码,如点实体的编码为02H,直线实体的编码为01H等等。对于每一个实体,其数据结构都可以分成两个部分:实体头部和实体尾部。实体头部的长度固定,且其意义对每一个实体基本相同。它包含有实体类型编码、实体性质、实体长度等等。对于实体尾部, AutoCAD采用了极为紧凑的格式以节省占用资源。对于不同实体,其尾部数据结构不同,即使在同一类型的绘图命令中,根据复杂程度不同尾部数据的格式不同。因此,它的格式种类较多,在某些倩况下实体尾部长度可以为零。例如:在直线实体尾部中,仅保存了直线两端点的坐标值。表是AutoCAD为方便索引而引入的数据结构。在DWG文件中所有的表均按一定顺序集中存放在表部。这些表包括块表(Blockdefinitiontable)、层表(Layertable)、字型表(Textfontandshapetable)、线型表(Linetypetable)等等。每一种表的格式、长度均固定。如:对于层表,它包含了该层的全部信息:层名、该层实体的颜色、线型以及该层的状态(如是否可见、是否冻结)等,而每一种表的长度、个数和起始地址保存在头部的索引信息段。块是用AutoCAD进行绘图时经常遇到的一个概念。它是为了减少图形文件的长度和方便操作而引入的。AutoCAD将用户所做的块集中存在一起,这就是块实体部。每生成一个块时,AutoCAD同时自动地生成一个相应的块表,以便检索。对于每一个块,其两端均为块起始实体和结束实体,中间为该块所包含的各种实体元素。对块的寻址操作是通过块表中的信息和块实体部的起始地址来完成的。为了防止由于头部的重要索引信息的损坏而使整个DWG文件中的信息丢失,AutoCAD将一些重要索引信息的副本保存在DWG文件的尾部,称为应急头部(Contigencyheader)。它包含了恢复受损图形文件的重要信息。②Shape文件的结构Shape文件的数据结构在ESRI公司公布的技术文档中有着较为详细的说明[46]。Shape文件由三个文件构成:主文件型如*.shp,索引文件型如*.idx,数据库文件型如*.dbf。shape文件中有两种数据类型:长整形和双精度浮点型。主文件结构如图5-2。 图5-2shape文件的主文件结构文件头(FileHeader)的长度固定为100字节,存储着如shp文件标志、版本信息、文件长度,各种索引用的地址,系统常量等。记录头(RecordHeader)的长度固定为8字节,存储记录数和记录长度。记录内容(RecordContents)存放点、线、面等要素,长度不固定。如图5-3反映了点要素在RecordContents中的存贮情况。图5-3点要素的RecordContents的内容索引文件的结构如图5-4:图5-4索引文件的结构索引文件头的结构与主文件头是一样的,索引文件的记录存储主文件中记录的映射和内容长度。映射是一个数字,该数字以16 bit为单位来计算由主文件的开始到某记录的记录头的第一个字节。根据对shape文件数据结构的分析,利用C++语言完成了读dwg文件写shape文件,但是利用上述方式得到的shape文件的属性数据不丰富,对以后的编写程序,如实现查询功能都极为不利。例如利用上述方法得到的“报警电话”的shape文件的属性表如图5-5,图5-5“报警电话”的shape文件的属性表在该张表中几乎得不到任何有意义的数据,无法编写程序实现地理信息系统的基本功能。5.2.2基于Arcview的方法ArcView提供的工具将从“移动道路测量系统”得来的*.dwg和*.mdb转换成shape文件。特别是*.mdb转换成shape文件,不会造成属性数据得丢失。在此特别对*.mdb转换成shape文件的方法进行说明[47][48]。外业数据经过内业处理以后,得到许多Access数据库的*.mdb文件,文件中储存丰富的属性数据。如报警Access数据库中报警电话的表alertstation,如图5-6:图5-6Access数据库中报警电话的表alertstation上述数据对于实现地理信息系统中的查询和分析功能有着重要的意义。在ArcView中可以利用它提供的SQL connection来实现对外部数据库的连接,可以使用SQL语句在数据库中查询相应的记录,并且储存在Arcview的表中。Arcview只存储用户定义的SQL查询语句,并不存储所获得的记录本身。当表在使用时,记录被保存在临时文件中,当表被删除或者被关闭或者ArcView退出以后,临时文件就被删除了。当用户再次打开保存的工程时,ArcView会自动链接相应的数据库并且将相应的数据存贮到ArcView的表中,数据库的任何变化也将反映到ArcView的表中。ArcView提供了AddEventTheme可以将一张与事件相联系的表转换为主题,利用这一功能可将以非空间数据格式存贮,但与空间位置相连的数据转化为地图数据。利用ArcView提供的SQLConnnection,AddEventTheme,Converttoshapefile的三项功能,即可以将Access数据库文件转换为有丰富属性数据的shape文件。具体步骤如下:(1)激活ProjectWindow窗体,在Project菜单中选择SQLConnect项,则出现SQLConnect对话框。(2)选择Connect按钮,则出现“选择数据库”对话框,选择相应的数据库,选择相应的表,再选择相应的字段。(3)选择Query按钮,则得到一张ArcView表。(4)激活View窗体,在View菜单中选择AddEventTheme项,则出现AddEventTheme对话框,其中的Table项即为新生成的ArcView表,选择Xfield项为Coordx,选择Yfield项为Coordx,选择OK按钮。则生成相应的事件主题。(5)选择Theme菜单中的Converttoshapefile选项,出现Convert对话框,选择相应的文件名和路径后,则生成了shape文件。图5-7报警电话的shape文件的属性表此时得到的属性表(图5-7)中,有了地物的坐标和高程等信息。 5.3地理空间分析在系统开发中的应用研究地理信息系统的目的不仅是为了绘图,而主要是为了分析空间数据,去发现隐藏在数据背后的关系、规则和发展趋势等知识,为管理决策提供有力的支持。一般认为,空间分析是地理信息系统的主要功能,是灵魂,是核心[26]。空间分析是建立在对空间数据的有效管理之上的,它的研究一直滞后于空间数据结构与空间数据库以及地图数字化和自动绘图技术的研究。空间分析就字面解释,可以是“空间数据的分析”和“数据的空间分析”,前者着重于空间物体和现象的非空间特性的分析,这与一般的数据分析并无本质的差别,主要工具就是一系列的统计方法,但是对空间数据分析的结果的解释则必然要依托于地理空间进行,所以这种分析揭示的也是空间规律。后者“数据的空间分析”则是直接从空间物体的空间位置、联系方面去研究空间事物,所用的方法主要是空间统计学、图论、拓扑学、计算几何等。5.3.1空间聚类方法在高速公路病害密集区分析中的应用研究高速公路路面的病害总是在某些地段较为密集,在某些地段较为疏散。找出病害密集的区域,对于养护决策有着重要的意义。因为很多时候,某段高速公路由于地质条件和初期修建的问题,其质量低于其它路段,使得养护人员总是在该路段上修修补补,浪费的人力、物力和财力已经超过重修该路面的费用。当高速公路路面上的病害较少时,通过地理信息系统,肉眼可以观察出哪一段的病害较多,这就自然的完成了聚类分析。但是当高速公路上的病害较多时,用肉眼就无法完成判断。图5-8以小比例尺观察高速公路的路面病害如图5-8,在较小的比例尺观察时,高速公路的路面病害已经完全将高速公路的车道线遮挡,凭借直观的感觉无法判断哪一段的病害最多,有必要进行空间聚类分析。空间聚类的目的是对空间物体的集群性进行分析,将其分为几个不同的子群(类),由此来揭示某种空间机制。 对于离散的点群Pi=(i=1,2,3,………,n),可以得到一组描述点群位置的几何数据(Xi,Yi),也可有一组统计变量的属性数据Zi=(Zi1,Zi2,……,Zim),空间聚类是基于几何数据(Xi,Yi)的聚类。同样对于Zi可以采用相同的算法,但这种聚类属于非空间分析。空间聚类可以采用不同的算法过程:系统聚类、分解聚类和判别聚类。系统聚类在分析之前假定n个点自成n个类,然后逐步合并,聚类过程中,分类将越来越少,直至一个适当的数目。分解聚类在聚类之初假设n个点合为一类,然后逐步分解,在这样的聚类过程中,分类越来越多,直至一个适当的数目。判别聚类是先确定若干个聚类中心,然后逐点比较以确定离散点的归宿。对于平面上的一组点群,将其分为若干子群,必须有一定的准则,一般的认为点与点之间的空间距离是决定点群聚集特性的最主要统计量,只有距离较近的点才可以归为同一子群。也就是空间聚类的结果应保证归于同一子群的点尽可能地集中,不同的点群尽可能地分离,从统计上来讲子群内方差尽可能小,子群间方差尽可能大。在空间聚类中通常采用的是欧式距离,两个空间点Pi(Xi,Yi),Pj(Xj,Yj)之间的欧式距离为:但是在高速公路这样的场合中,高速公路大体上平行于坐标系的X轴,也就是Yi-Yj≈0,所以:对于两个空间点群,它们分别含有若干点,则需要定义S和T之间的距离dst,也有以下定义方法:dst=Min(dij|Pi∈S,Pj∈T)dst图5-9空间点群的最短距离最短距离以S和T之间最接近点的距离作为两点群S和T之间的距离,如图5-9。另外有以最大距离和重心距离来定义点群距离的方法。 设有三个点群R,S,T,其所包含点数分别为nr,ns,nt,三者之间的距离分别为drs,drt,dst,如果将S与T合并,记为U,则R,U之间的的距离为Min(drs,drt,dst)。利用系统聚类的方法解决高速公路病害的聚类时,具体算法如下:首先将n个病害点看作n个子群,计算n个子群之间的的距离(上述的最短距离),n个空间点共要计算n(n-1)∕2个计算值。这些计算值可以用矩阵表示为:S0=[S0ij]i,j=1,2,……………,n这里S0ij=S0ji,S0ii=0。接着选择距离最近的两个子群(点)归为一个新的子群,这样就得到n-1个子群,再计算n-1个子群的聚类统计量。设在k次子群合并中,将Q与T合并为子群U,则Sk可以根据Sk-1经过计算而来,不需要按子群内点的座标值计算聚类统计量,但这是有条件的:1)当i≠q,i≠t,j≠q,j≠t,时,Skij=Sk-1ij2)对U子群与其余子群之间的关系最短距离:Skiu=Skui=Min(Sk-1iq,Sk-1it)在经过上述的反复多次计算以后,一般以聚类统计量Min[Skij]=500米时停止计算,完成聚类分析,从而可以了解高速公路上那些地段病害密集。当然还可以使用判别聚类算法。1)计算点群的平均中心(认为):2)计算所有点到平均中心的距离di,选取距中心最远的一个点Xs为聚类的中心,则ds=Max(di)。3)计算其余点与点Xs的距离dis,取dis+di中的最大者,将其作为第二聚类点,据此法可选出第三聚类点,乃至更多,一般的,如果拟将点群分为m个子群,设已经选定p个聚类点Gk(k=1,2,3,…,l),则第p+1个聚类点的确定需要计算:di+(i=1,2,3………n,i≠Gk)设Max(di+)=dj+ ,则点j为第p+1个聚类点,如此重复。直至选出全部m个聚类点。4)将空间点归入最近的聚类点所代表的子群。上述的两种算法各有各的优点,系统聚类法可以控制分类后,点群之间的距离,而判别聚类法可以控制最终划分为多少个点群。作者对于系统聚类算法,用VB编写了程序实现了聚类分析,具体程序参见附录。但是两种算法必须有一定的编程,工作量较大。作者根据实际情况,对系统聚类方法进行了一定的简化。设高速公路上有n个病害点,大体平行于X轴分布,1)首先对这n个点进行排序,使得Xi""Then"//打开连接cnn.OpenConnectStringElseExitFunctionEndIfIfInStr("INSERT,DELETE,UPDATE",UCase$(sTokens(0)))Thencnn.ExecuteSQLMsgString=sTokens(0)&"Successful!"ElseSetrst=NewADODB.Recordsetrst.OpenTrim$(SQL),cnn,adOpenKeyset,adLockOptimisticSetExecuteSQL=rstMsgString="查询到"&rst.RecordCount&"条记录!"EndIfExecuteSQL_Exit:Setrst=NothingSetcnn=NothingExitFunctionExecuteSQL_Error:MsgString="查询错误:"&Err.DescriptionResumeExecuteSQL_ExitEndFunction该函数反映了使用ADO对象访问数据库的一般过程:(1)访问数据库信息的第一步是和数据库源建立连接。ADO提供Connection对象,可以使用该对象建立和管理应用程序和ODBC数据库之间的连接。Connection 对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。要建立数据库连接,首先应创建Connection对象的实例。如函数中的:"//定义连接DimcnnAsADODB.Connection"//创建连接setcnn=NewADODB.Connection"//打开连接cnn.OpenConnectString(2)用Connection对象的Execute方法,发出结构化查询语言(SQL)查询数据库源并检索结果。如函数中的:cnn.ExecuteSQL(3)使用Recordset对象处理结果尽管Connection对象简化了连接数据库和查询任务,但Connection对象仍有许多不足。确切地说,检索和显示数据库信息的Connection对象不能用于创建脚本;使用者必须确切知道要对数据库作出的更改,然后才能使用查询实现更改。对于检索数据、检查结果、更改数据库,ADO提供了Recordset对象。正如它的名称所暗示的那样,Recordset对象有许多可以使用的特性,根据查询限制,检索并且显示一组数据库行,即“记录”。Recordset对象保持查询返回的记录的位置,允许一次一项逐步扫描结果。如函数中的:DimrstAsADODB.RecordsetSetrst=NewADODB.Recordsetrst.OpenTrim$(SQL),cnn,adOpenKeyset,adLockOptimisticSetExecuteSQL=rst使用Connection对象建立链接并使用Recordset对象处理返回的数据,通过“协调”两个对象的特定功能,使用者可以开发出几乎可以执行任何数据处理任务的数据库应用程序。3创建动态链接库,实现自定义符号描绘地物的语句①创建ActiveXDLL的过程:新建以VB的工程,在“新建工程”对话框中选择创建一个ActiveXDLL文件,“工程”菜单中选择“引用”,打开“引用”对话框,浏览寻找文件名为 AfCust20.tlb的类型库,并且添加。该类型库是MapObjects为用户实现自定义的标注符号而编写的,提供了一系列的对象、属性、方法。因为MapObjects是单线程的控件,所以在工程的“属性”对话框中将“线程模型”选择为单线程。在工程的“属性”对话框中选择或输入相应的工程类型和工程名称,本程序中工程的名称为“mypointsymbol”。创建工程的同时,系统自动添加了一个类模块,改变已有类模块的属性:Instancing为5-Multi-Use,name为pic。对与每一种符号,必须添加如下的三个过程,SetupDC,Draw,和ResetDC,这些过程都是AFCustom类型库提供的。因在本实例中创建的为点符号,所以添加的过程为ICustomMarker_SetupDC,ICustomMarker_Draw,ICustomMarker_ResetDC。②创建ActiveXDLL中的关键代码(1)声明部分OptionExplicit‘//下语句指定在类模块中实现的类型库的接口ImplementsAFCustom.ICustomMarker‘//定义三个数据成员Publicm_picAsPicturePrivatem_dpiAsDoublePrivatem_pictureAsIpicture(2)Draw方法为任何自定义的符号使用PrivateSubICustomMarker_Draw(ByValhDCAsLong,ByValxAsLong,ByValyAsLong)DimpixWidthAsDouble,pixHeightAsDouble‘//Picture对象是以HiMetric为单位的图片的高度和宽度,以下语句将图片尺寸转化为以pixel为单位的pixWidth=m_picture.Width*m_dpi/2540pixHeight=m_picture.Height*m_dpi/2540‘//在使用位图以前,检查数据是否存在IfNotm_pictureIsNothingThenm_picture.RenderhDC,x-pixWidth/2,y+pixWidth/2,pixWidth,-pixHeight,_0,0,m_picture.Width,m_picture.Height,NullEndIf EndSub(3)Reste方法在标注以后调用,清空图片对象,释放所有的资源PrivateSubICustomMarker_ResetDC(ByValhDCAsLong)Setm_picture=NothingEndSub(4)Setup方法在标注以前调用PrivateSubICustomMarker_SetupDC(ByValhDCAsLong,ByValdpiAsDouble,ByValpBaseSymAsObject)m_dpi=dpiSetm_picture=m_picEndSub4聚类分析实现程序Option Explicit "General Declaration"the scale of the Distance-Matrix Const N_unit = 9"FSO DeclarationDim mFSO As New FileSystemObjectDim mFile As FileDim mTxtStream(1 To 2) As TextStream"以二维数组代表距离矩阵Dim Dist(1 To N_unit, 1 To N_unit) As SingleDim Methold As Integer "Methold = 1表示最短距离法,Methold = 2 是中线法"表示第I类和第J类是否已经合并的逻辑矩阵Dim Clustered(1 To N_unit, 1 To N_unit) As BooleanPrivate Sub UpdateClustered(N1 As Integer, N2 As Integer)Dim i As IntegerDim j As Integer      "identify N1,N2      If Clustered(N1, N2) = False Or Clustered(N2, N1) = False Then                    Clustered(N1, N2) = True: Clustered(N2, N1) = True          End If      "update the n1 and n2 that has already been clustered indirectly            For i = 1 To N_unit                If Clustered(N1, i) = True Then                          Clustered(i, N2) = True: Clustered(N2, i) = True                    For j = 1 To N_unit                              If Clustered(N2, j) = True Then                                  Clustered(i, j) = True: Clustered(j, i) = True                               End If                          Next j                   End If                    If Clustered(N2, i) = True Then                         Clustered(i, N1) = True: Clustered(N1, i) = True                                      For j = 1 To N_unit                              If Clustered(N1, j) = True Then                                  Clustered(i, j) = True: Clustered(j, i) = True                               End If                           Next j                             End If           Next iEnd SubPrivate Sub UpdateDist(Num1 As Integer, Num2 As Integer) "合并Dist(Num1)和Dist(Num2)            Dim D_Temp1(1 To N_unit) As Single, D_Temp2(1 To N_unit) As Single                Dim k As Integer                For k = 1 To N_unit             D_Temp1(k) = Dist(Num1, k): D_Temp2(k) = Dist(Num2, k)         Next k                "合并D_Temp1()和D_Temp2(),并将结果返回给D_Temp1(),D_Temp2()全为0         Call NewUnit(D_Temp1(), D_Temp2(), Methold)                For k = 1 To N_unit                    "由于   距离矩阵 同一个 距离是由  Dist(i,j) 和  Dist(j,i) 两个元素表示的             "所以       对Dist(Num1, k)和Dist(k, Num1)都要更新:                         Dist(Num1, k) = D_Temp1(k): Dist(k, Num1) = D_Temp1(k)                          Dist(k, Num2) = D_Temp2(k): Dist(Num2, k) = D_Temp2(k)             Next k  End SubPrivate Sub Command1_Click()Dim i As Integer ClusterAnalysis  Command1.Enabled = False End SubPrivate Sub Form_Load()Form1.AutoRedraw = TrueCall InitialVariablesMethold = 2: Option2.value = TrueEnd SubPrivate Sub InitialFiles()    "Create a text flie of the matrix  original_distancesRem    Call mFSO.CreateTextFile(App.Path & "" & "original_distances.dat")             "Create a text flie for output   " Call mFSO.CreateTextFile(App.Path & "" & "result.dat")              "once the file is created ,reference the file          Set mFile = mFSO.GetFile(App.Path & "" & "result.dat")          "open a text stream for output the result          Set mTxtStream(2) = mFile.OpenAsTextStream(ForWriting)    End SubPrivate Sub InitialVariables()Dim i As Integer, j As IntegerFor i = 1 To N_unit       For j = 1 To N_unit           Dist(i, j) = 0                Clustered(i, j) = False                If i = j Then Clustered(i, j) = True             Next jNext iEnd SubPrivate Sub ReadData()Dim s As StringDim i As Integer, j As Integer    "once the file is created ,reference the file    Set mFile = mFSO.GetFile(App.Path & "" & "original_distances.dat")    "open a text stream for reading the original_distances    Set mTxtStream(1) = mFile.OpenAsTextStream(ForReading)    For i = 1 To N_unit        s = mTxtStream(1).ReadLine        Dim Mark1 As Integer, Mark2 As Integer                 For j = 1 To N_unit                             If j = 1 Then                                     Mark2 = InStr(1, s, ";", vbTextCompare)                    Dist(i, j) = Val(Trim$(Mid$(s, 1, Mark2 - 1)))                                        GoTo continue                                     Else                    Mark1 = Mark2                 End If                             Mark2 = InStr(Mark1 + 1, s, ";", vbTextCompare)                 If Mark2 = 0 Then                    Dist(i, j) = Val(Trim$(Mid$(s, Mark1 + 1, Len(s) - Mark1)))                 Else                    Dist(i, j) = Val(Trim$(Mid$(s, Mark1 + 1, Mark2 - Mark1 - 1)))                 End If                 continue:    Next j            Next imTxtStream(1).Close "将下三角矩阵转换成其完整形式For i = 1 To N_unit              For j = 1 To N_unit                      If Dist(i, j) = 0 Then                         Dist(i, j) = Dist(j, i)                                       End If                     Print Dist(i, j);                 Next j              Print   Next iEnd Sub"合并D1()和D2(),并将结果返回给D1(),D2()全为0Private Sub NewUnit(D1() As Single, D2() As Single, Mathold As Integer)Dim i, j As IntegerDim Temp(1 To N_unit) As Single    For j = 1 To N_unit           If Mathold = 1 Then "Mathold = 1表示最短距离法,Mathold = 2 是中线法             Temp(j) = IIf(D1(j) < D2(j), D1(j), D2(j))       Else: Temp(j) = Sqr(0.5 * D1(j) * D1(j) + 0.5 * D2(j) * D2(j))       End If          Next j       For j = 1 To N_unit       D1(j) = Temp(j) "将合并结果返回给D1()             D2(j) = 0       "D2()清为0          Next j    End SubPrivate Sub ClusterAnalysis()Call ReadDataCall InitialFilesDim n_clustered As Integer: n_clustered = 0Dim Num1 As Integer, Num2 As IntegerDim AllClustered As Boolean: AllClustered = FalseDim Dist_min As SingleDo While AllClustered = False          "搜索应合并的两类的代号:Num1, Num2(search the no. of  two unit that should be united)                    Call SearchTwoUnit(Num1, Num2, Dist_min)                      Print Num1; Num2                    mTxtStream(2).WriteLine ("Unite " & Num1 & " and " & Num2 & " by  Distance of " & Dist_min)                Call UpdateDist(Num1, Num2)                  AllClustered = All_Clustered()   Loop        mTxtStream(2).CloseEnd  SubPrivate Sub SearchTwoUnit(No1 As Integer, No2 As Integer, D_min As Single)Dim i, j As Integer       D_min = 1000      For i = 1 To N_unit          For j = 1 To N_unit                  If Dist(i, j) <> 0 And Dist(i, j) <= D_min And Clustered(i, j) = False Then                         D_min = Dist(i, j)                            No1 = i: No2 = j                     End If                     Next j   Next i    Call UpdateClustered(No1, No2)   End SubPrivate Sub Option1_Click()             Call InitialVariables       Cls            Option1.value = True: Methold = 1              Command1.Enabled = True           End SubPrivate Sub Option2_Click()       Call InitialVariables              Cls          Methold = 2       Option2.value = True       Command1.Enabled = True    End Sub"判断是否已经全部归为一类Private Function All_Clustered() As BooleanDim i%, j%             For i = 1 To N_unit                 For j = 1 To N_unit                     If Clustered(1, i) = False Then                               All_Clustered = False: Exit Function                                  End If                       Next j        Next i         All_Clustered = TrueEnd Function'