基于设计模式的面向对象制图综合软件.pdf
1994-2009 China Academic Journal Electronic Publishing House.All rights reserved.http:/3国家测绘局.国家三角测量和精密导线测量规范S.北京:测绘出版社,1975.4国家测绘局.国家水准测量规范S.北京:测绘出版社,1974.5清宏计算机工作室.V isual C+编程技巧M.北京:机械工业出版社,2001.收稿日期:2001210230.?修回日期:2002201221.作者简介:艾松涛,硕士研究生,现从事中国南极测绘数据库及相关信息系统研究。E-mail:DES IGNI NG AND I MPLEMENTATI ON O F TRAVERS ENETWORK ADJUS TMENT PROGRAMAISongtao1LI ZhanrongZHANG Pe i(1Chinese Anta rctic Cente r of Surveying&Mapping,W uhan Unive rsity,129Luoyu Road,W uhan430079,China)ABSTRACTThis paper fully introduces the adjustment of lead net,presents the disposalprogram according to this idea,and gives an example.KEYWORDStraverse network;adjustment;program文章编号:100723817(2002)0620010204中图分类号:P283.7文献标识码:B基于设计模式的面向对象制图综合软件史佳顺朱斌贝倪成凤(上海师范大学数理信息学院,上海市桂林路100号,200234)摘要介绍了面向对象的技术以及设计模式思想在制图综合软件设计中的应用,在设计上使用工厂类的技术思想隐蔽地图数据的实现细节,使用算法类模板抽象了综合流程,使用函数类策略隐蔽地图综合步骤的实现细节,降低了地图数据处理与制图综合的具体算法之间的耦合度,使该系统对于综合过程具有较高层次的抽象,具有高度的易扩充性和安全性。关键词设计模式;制图综合;综合算法;算法类制图综合是一个高度智能化的和具有创造性的作业过程,它是一个整体任务,包含了一系列不同性质的操作,可以分解为若干个子过程来实现。由于这些子过程之间缺少明确的内在或逻辑联系,使得这些子过程是以某种混合形式来组合应用。采用几何方法的自动制图综合过程大致概括为:内容的取舍、形状化简和矛盾解决。内容的取舍就是从大量的客观事物中选出最重要的事物制图,而舍去次要的事物。形状化简用于呈线状和面状分布的事物,去掉轮廓形状零碎部分,以突出事物的总体特征。比如在线状要素的自动综合方法中,有nth点算法、Douglas2Peucker算法、垂距算法、角度算法等1。对某种事物进行形状简化时,要考虑到与其他事物的关系,使彼此之间能协调一致。如果对房屋进行化简时,夸大了原有面积,造成了与公路、河流等物的交叉,则必须恢复原来的位置关系。这时就需要有解决矛盾的算法去处理。GIS制图综合发展至今,发展了很多种线状要素的自动综合方法以及面状要素的自动综合方法2,但是往往针对某一类特定的地图有较好的综合效果。对于一个完善的制图系统,就不得不包括这些典型的算法模块,根据地图特征自动调用。随着技术的发展,制图综合的方法还会不断增加,从而导致原有的GIS制图综合系统发生大量的程序修改3。为了适应这种现状,期望有一个高安全性,易于扩充的系统开发平台。概括地说,这样的开发平台应满足的条件有。易扩充性:当某一自动综合过程的方法发生变化时,重编译模块仅限于发生变化的过程算法模块,即需要实现处理算法相对于应用程序的透明。高抽象度描述:系统处理流程的变更也不应影响各自动综合过程算法模块。系统安全性:通过较高抽象层次的处理对象描述和隐蔽详细的对象生成以及管理方法等,减少应用程序编制过程中的错误因素。为此,开发了一个制图综合平台。该平台的软件结构基于面向对象的设计思想,广泛采用设计模式理论,具有易扩展与维护的特点,具体体现在:一个模块的修改不会牵涉到其他模块,修改是局域性的;新功能的加入不是通过修改已有代码,而是通过增加新代码实现;代码依赖界面类,不依赖具体的实现,使得新旧代码无缝衔接;界面及设计模式的广泛使用,使得制图综合平台的几个模块可以并行开发,缩短了软件的研制周期。整个系统由地图元素描述模块和地图综合处理模块两部分组成。地图元素描述模块定义了地图数据元素,及其基本操作和存储方法;地图综合处理模块则定义了各种地图综合处理的流程和算法。01测绘信息与工程Journal of Geomatics2002Dec.;27(6)1994-2009 China Academic Journal Electronic Publishing House.All rights reserved.http:/1地图元素描述模块通用的矢量地图文件包括地图元素的层次及其属性、地图元素的点列坐标等等信息,以及一些地图上的注释。各种格式的地图文件的组织方式不尽相同,这样就首先要包装这些地图文件。图1是 对 矢 量 地 图 文 件 数 据 的 模 块 表 示,其 中M apElementBase是地图元素的基类,包含了管理元素点列的M array,又定义了元素的旋转、移动等基本操作函数。M EPoly是道路、房屋等所有用多边形表示的地图元素,继承了M apElementBase基类。然而在地图综合中,必须将道路、房屋等元素分割出来,独立成两个数据系列进行处理,所以必须进一步细化数据层次。地图的综合过程需要综合使用多种综合方法,每一种综合方法又仅作用于某些地图元素。作为一个实用的综合系统,必须使不同形式的地图元素具有统一的描述,提供统一的处理服务,这样才能简化地图元素的变更对程序造成的不良影响。图2描述了如何将数据进一步包装成可供综合算法过程使用的数据形式。接口类IFM E包含了前述的M EPoly类,并通过它派生出M EPolygon和M EPolyline两个类,分别对应地图中的道路和房屋。如果要增加新的地图元素,只要修改IFM E继承之即可。通过接口类IFM ESet实现了地图元素的有序表示,同时又隐蔽了采用M EA rray来形成道路和房屋序列的内部实现细节。而CM apGenR stFactory接口通过其子类M apGenData模板类封装了两套地图数据,分别代表处理前的数据和处理后的数据,可以通过它派生出具有相同输入输出接口的综合步骤处理类,使处理流程更加合理清晰。2综合算法的组织制图自动综合系统将综合过程抽象为内容的取舍、形状化简和矛盾解决3个步骤,每个步骤都有各自的若干种实现方法,具体生成何种方法,取决于CM apGenR stFactory子类M apGenData中的地图特征,其中用到了工厂类的设计模式;每个综合处理步骤都利用函数类技术进行抽象,提高了系统的易扩充性;整个综合流程又通过模板类技术得以抽象,提高了系统的安全性,如图3所示。在这里首先介绍一下设计模式中的工厂类技术4。图3综合算法模块Factory M ethod模式是为了分离客户与服务而采用的一种模式。在一个Factory类中定义一个用于创建对象的接口Factory M ethod模式方法,让子类决定实例化哪一个类。FactoryM ethod使一个类的实例化延迟到其子类,如图4所11测绘信息与工程Journal of Geomatics2002Dec.;27(6)1994-2009 China Academic Journal Electronic Publishing House.All rights reserved.http:/示。一般工厂类的设计思想用于下列几种情况:当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。在本制图综合系统中,由于使用何种综合方法,对于每一种地图都是不确定的,大部分是由程序根据地图的特性,比如城市还是乡村地图来自动选用,所以最顶层的父类不知道它所必须创建的综合处理流程对象的类,真正的决定权在于CM apGenR stFactory子类M apGenData中的地图特征,或者用户的综合方法选择。图3中的IFM apGen是一个Factory类的接口,图2中的CM apGenR stFactory由 其 派 生,类 中 的Generalize(IFA lgGeneralization):Boolean就是一个Factory M ethod。采用这种结构,一方面满足了处理流程的需要,另一方面使得数据和处理的耦合度降低。一个实用的地图综合平台根据地图种类以及用户的需求,采用不同的综合处理流程和算法。常规的实现方法是在一个算法流程类中提供各种算法所对应的方法函数,但是将这些算法硬编进使用它们的类中是不可取的,其原因如下5:这种做法一方面增加了类的方法数,另一方面当增加方法函数后需要对库函数进行重新编译和链接,如果库函数需要提供给很多用户的话,这就使得版本的管理会比较麻烦。而且当不同的流程使用相同的处理步骤时,造成大量的代码冗余,程序庞大复杂并且难以维护。每个用户的需求不同,所以在不同的情况需要提供不同的算法,不须提供用户并不使用的算法。当算法是程序的一个难以分割的成分时,增加新的算法或改变现有算法将十分困难。虽然在C语言中,可以通过传递函数指针来实现传递算法函数,但是传递函数指针存在安全性低的问题。为了提高系统的安全性,即将综合算法函数包含在一个独立的算法函数类当中,且每个算法函数类仅包含一种综合算法。这种函数类的技术思想,在设计模式中对应对象行为型的策略(Strategy)模式4,如图5所示。策略模式定义一系列的算法,把它们一个个封装起来,并且使其相互替换。本模式使得算法可独立于使用它的客户而变化。一般策略模式的思想用于下列几种情况:许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。需要使用一个算法的不同图5Strategy策略模式变体。例如,可能会定义一些反映不同的空间?时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句,这样就可以在综合过程中对每一个处理步骤选择最合适的方法。比如道路的自动综合方法有nth点算法、Douglas2Peucker算法等可选择;房屋的合并有T I N凸包的方法,也有基于栅格的方法;矛盾处理可以使用位移方法或者切割的方法。此外采用函数类,还可以增加系统的灵活性,同时也可免去多用户版本管理的麻烦。算法函数类也由其各自的接口类派生,目的是将其统一化,便于程序调用。进行地图综合时,根据地图以及需求的不同,把相应的算法函数类传入综合处理类CA lgGeneralization,即可进行所需的综合,其形式见图3。综合处理类从模板类IFCA lgGeneralization派生,该“模板算法类”体现了另一种类行为型设计模式TemplateM ethod(模板方法)4,如图6所示。图6TemplateM ethod模板方法模板方法定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。通过使用抽象操作定义一个算法中的一些步骤,模板方法确定了它们的先后顺序,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法应用于下列情况:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。控制子类扩展。这样使得在自动综合的流程与具体算法的选择分离,将流程以模板的形式直接抽象出来,统一了用户接口6。用户只需给出地图元素数据,调用综合处理类提供的综合处理接口即可完成制图综合功能,综合过21测绘信息与工程Journal of Geomatics2002Dec.;27(6)1994-2009 China Academic Journal Electronic Publishing House.All rights reserved.http:/程的每一步具体算法可以根据所用的题图数据来具体确定,而用户本身并不需要知道系统内部所实施的算法具体细节。3系统的特性评价采用这样的设计方法,满足了在易扩充性、高抽象度、系统安全性等方面的设计要求。地图元素描述模块通过接口IFM apGen和综合算法处理模块相关联。地图元素描述模块的任何变更,即各种地图元素集合结构IFM E发生变化,以及地图元素列IFM ESet进行扩充时,都不会影响综合算法处理模块。各种地图元素结构也通过接口IFM E相互独立,使其内部变更和扩充不会影响其他的地图元素结构。为了实现综合的高速化,将所有地图文件中的相同元素组织在一起,构成地图元素列IFM ESet。使杂乱无章的数据文件转变成为可以高速处理的内存队列。而且包含了处理前后的两套数据,便于撤销操作以及对综合算法的评价。综合算法处理模块通过接口IFM apGen和地图元素描述模块相关联。处理模块的任何变更,即CA lgGeneralization发生变化,实现算法的扩充时,都不会影响地图元素描述模块。处理模块由综合处理类构成,各种综合处理流程之间通过接口CA lgGeneralization相互独立,单个综合处理模块的变更和扩充不会影响其他的综合处理模块。使用了函数类的思想,不同的算法函数被分别包含在不同的函数类中。在C+中,系统编译的时候可以对这些函数类进行合法性检查,这就提高了系统的安全性。当需要把算法函数提供给不同需求的用户时,只需要将相应的函数类提供给用户即可,用户需求的更改也只仅仅涉及到其中某一个函数类,方便了版本的管理。4结束语本地图综合平台作为一个实用项目已经开发完成,并在国外某航测企业投入使用,评价良好。该平台使用C+程序设计语言开发,按照设计模式的思想进行软件的体系结构设计,在综合运用如多级抽象类形定义、实体生成类(Factoryclass)、指针隐蔽等基于C+的程序设计的基本技法的基础上,在不依存于具体程序设计语言的更高抽象层次上,对对象进行抽象描述,使用工厂类的技术思想隐蔽地图数据的实现细节,使用函数类技术隐蔽地图综合过程的实现细节,降低了类之间耦合度。制图综合系统同时也简化了应用程序的操作,应用程序只需调用接口工厂类提供的接口,由工厂类根据地图的特征建立完善的综合处理算法类,使得程序结构易于用户扩充。例如当地图增加了新的元素河流,我们只需在图2中修改继承IFM E,在图3中增加专门处理河流的算法类即可,不必对源程序做大量的改动。参考文献1郭庆胜.线状要素图形综合的渐进方法研究J.武汉测绘科技大学学报,1998,23(1):52562王桥,毋河海.地图信息的分形描述与自动综合研究M.武汉:武汉测绘科技大学出版社,1998.3盛业华,郭达志.GIS环境下空间要素的制图综合方法J.测绘通报,1995(3):26304周海燕,华一新.GIS中定量专题制图模板的研究与实践J.测绘通报,2000(10):9115Gamma,Helm,Johnson,et al.Design Patterns:Elements ofReusable Object2O riented Software M.Addison2W esley,1995.6张世琨,王立福,杨芙清.基于体系结构的软件开发模式J.世界科技研究与发展,1999(3):11147孙亚夫,杜道生,周勇前.基于模板技术的专题制图J.武汉测绘科技大学学报,1998,23(2):171174收稿日期:2002201224.?修回日期:2002209212.作者简介:史佳顺,硕士研究生,现主要从事GIS图形图像处理以及计算机信息自动化技术研究。E-mail:OBJ ECT2ORIENTED AUTO2GENERALIZATI ON SO FTWAREBAS ED ON DES IGNI NG PATTERNSHIJ iashunZHU YunNIChengfeng(Ma thema tics and Science College,of Shangha i Teache rsUnive rsity,100Guilin Road,Shangha i200234,China)ABSTRACTThis paper introduces object2oriented technology and designing pattern in designingautomated generalization software,use object2oriented function technique to hide the details of thewhole generalization process and use factory class in design pattern to insulate the relationshipsbetween map data.KEYWORDSdesigning pattern;automated generalization;generalization algorithm;algorithmclass31测绘信息与工程Journal of Geomatics2002Dec.;27(6)