组件GIS_All.doc_第1页
组件GIS_All.doc_第2页
组件GIS_All.doc_第3页
组件GIS_All.doc_第4页
组件GIS_All.doc_第5页
免费预览已结束,剩余42页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录第三章 组件GIS13-1 组件GIS概述13.1.1 GIS组件化趋势13.1.2 GIS应用系统开发方式23-2 组件技术43.2.1 组件技术规范53.2.2 COM技术63.2.3 Microsoft .NET技术123-3 组件GIS133.3.1 组件GIS的概念133.3.2 组件GIS特点143.3.3 组件GIS软件设计153-4 组件GIS框架结构163.4.1功能函数层173.4.2数据操纵层173.4.3框架层213.4.4表现层233.4.5数据处理与分析层273.4.6控件层323.4.7应用层333-5 组件GIS开发应用333.5.1基于控件的二次开发343.5.2基于组件的二次开发363.5.3基于组件GIS的扩展二次开发40第三章 组件GIS 用户的需求和计算机技术的进步促进了GIS技术和应用的快速发展,GIS广泛应用于测绘、土地、农业、电讯、电力、交通、石油、地质矿产、水利、海洋运输、灾害防治、公安、国防等领域。随着应用的深入,各个领域对GIS提出了更具体、更复杂和专业化的需求。这就要求GIS有很好的开放性、扩展性和二次开发的能力。但在传统的GIS软件开发模式中,软件开发和维护成本高,效率低,重复劳动多,周期长,适应性差,其根本原因是软件的重用率低。组件技术的飞速发展,使GIS软件开发模式发生了革命性变化,并注入了新的活力。3-1 组件GIS概述3.1.1 GIS组件化趋势地理信息系统(GIS)经过近40年的发展,在空间数据的获取能力、储存与管理能力、处理与分析能力以及显示与输出能力等方面都取得了长足的进步。随着GIS在各个领域应用的深入开展,GIS的组件化趋势日益明显,已经成为GIS的重要发展方向之一。从GIS软件模块开发和集成的技术发展历程,GIS可以划分为图3-1-1所示的几个发展阶段。互操作GIS组件式GIS核心式GIS模块化GIS集成式GISGIS模块WebGIS图3-1-1 GIS发展历程1. GIS模块在GIS发展的早期阶段,由于受到技术的限制,GIS软件往往是只能满足于某些功能要求的一些模块,没有形成完整的系统,而各个模块之间不具备协同工作的能力。2. 集成式GIS随着理论和技术的发展,各种GIS模块走向集成,逐步形成大型GIS软件包(GIS Package),称之为集成式GIS(IntegratedGIS)。它集成了GIS各项功能,形成独立完整的系统。但系统复杂、庞大,从而导致成本高、难于与其它应用或系统集成。3. 模块化GIS随后出现的模块化GIS(Modular GIS),它把GIS按照功能划分为一系列模块,运行于统一的集成环境之上。模块化GIS具有较大的工程针对性,便于开发、维护和应用,用户可以根据需求选择所需模块。但无论是集成式GIS或是模块化GIS,都很难与管理信息系统(MIS)以及专业应用模型集成高效、无缝的GIS应用。4. 核心式GIS为解决集成式GIS与模块化GIS的缺点,提出了核心式GIS(Core GIS)的概念。核心式GIS被设计为操作系统的基本扩展。Windows系列操作系统上的核心式GIS提供了一系列动态连接库(DLL),开发GIS应用系统时可以采用现有的高级编程语言,通过应用程序接口(API)访问内核所提供的GIS功能。对数据库管理要求较多的用户甚至可以选择MIS开发工具来构造GIS应用,为GIS与MIS的无缝集成提供了全新的解决思路。但是,由于核心式GIS提供的组件过于底层,给应用开发者带来一定难度,也不适应可视化程序设计的潮流。5. 组件GIS随着计算机软件技术的发展,GIS组件化发展到了一个全新的阶段,出现了组件式GIS(Components GIS,缩写为ComGIS)。组件式GIS基于标准的组件式平台,各个组件之间不仅可以进行自由、灵活的重组,而且具有可视化的界面和使用方便的标准接口。6. WebGIS因特网的发展为GIS发展带来了另一个领域的发展。Web技术和GIS技术相结合的产物就是WebGIS。WebGIS的应用可以分为以下几个层面:空间数据发布、空间查询检索、空间模型服务、Web资源的组织等。WebGIS的体系结构和应用系统的二次开发也逐渐采用组件技术。7. 互操作GIS互操作GIS是指在计算机网络环境下,遵循一个公共的接口标准,能够实现空间数据和数据处理功能共享和相互操作的GIS系统。目前互操作GIS还是比较前沿性的研究课题。但互操作GIS的前提是GIS组件化。从GIS模块发到集成式GIS是从分散到集中的过程,这是GIS发展历程中的一个重大进步。从集成式GIS发展到模块化GIS,这是GIS组件化的开始,随后发展到核心式GIS,GIS组件化趋势越来越明显,并形成组件化的标准形式组件式GIS和WebGIS。3.1.2 GIS应用系统开发方式 由于各个行业需求不同,各个行业各个单位所用的GIS应用系统的界面和功能也不尽相同。GIS应用系统一般要进行二次开发。GIS应用系统的开发方法有:从底层开发、利用宏语言开发、利用API函数开发、利用控件开发及利用组件开发。下面通过分析GIS应用系统开发方式的发展来说明组件GIS的发展趋势。1从底层开发所谓从底层开发的GIS应用系统是指不基于某个GIS平台软件,自己开发GIS的空间数据的操纵、表现、分析处理及应用等功能。这在GIS发展的初期和在一些特殊行业一般GIS软件又达不到要求的应用系统中运用得比较多。从底层开发的优点是开发者有完全的主动权,开发出满足自己行业需求的系统。但缺点很明显,GIS平台层开发工作量大,技术难度高,开发周期长,维护工作艰难,没有足够的资金和技术力量很难开发出成功的应用系统。2二次开发宏语言有的GIS平台提供了可供用户进行二次开发的宏语言,它是一种专门用于该GIS平台的一种开发语言,如ArcInfo提供的ArcInfo的Arc Macro Language(AML)语言、ArcView提供的Avenue语言和MapInfo提供的MapBasic语言。(1)AML是ArcInfo的ARC环境下的一种编程语言。AML提供了完整的编程能力和具有以下功能的一组工具集:1)方便处理经常执行的动作;2)创建自己的界面;3)为新用户或无经验的用户提供启动实用程序;4)开发一个菜单驱动用户界面来满足最终用户的要求;有两类AML文件即宏命令文件和菜单文件。宏命令文件将ARC/INFO命令组建起来,从而使许多复杂的地理操作更容易执行。菜单文件提供了一种易于使用的图形界面,用户只要学会简单的鼠标操作,就可以方便地选取和执行需要的操作。但AML是ArcInfo自定义的一种二次开发语言,它的语言风格和开发方式自成一体,一般用户难以掌握。(2)MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚较多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦。MapBasic比较适合用于扩展Mapinfo功能。3API函数API就是“应用程序接口”(ApplicationProgramingInterface),是一些用C语言编写,由系统自身调用的函数。API函数由许多“动态链接库”DLL组成。下面以GeoStar NT版本为例说明API函数的二次开发方式。GeoStar NT 版本将空间几何数据分为:点、线、面等类,并对其特性和行为进行了封装。同时,为了满足对空间数据管理的需要,GeoStar NT 还提供了许多其它基本类以及对空间数据管理的一系列基本函数。在基本类库和基本函数的基础上,GeoStar NT 开发了多个应用模块,如空间查询、空间分析、普通地图制图、专题地图制图等。在这些应用模块开发过程中又将其中的一些独立的的功能分离出来,并以动态连接库的形式提供给上一层使用。如空间分析的基本函数、基本的图形处理函数、数据交换函数等。在GeoStar NT上利用应用程序开发函数(API )来进行二次开发就是利用GeoStar NT 提供的基本函数库来开发用户自己的应用程序。API函数的二次开发必须在C语言的环境下进行,并且开发难度大、复杂、周期长。4控件控件或称为OLE控件、ActiveX控件,控件是一种实现若干标准接口的COM对象。二十世纪九十年代末各个GIS厂商也相应开发出了各自的GIS控件,如ESRI的MapObjects,武汉吉奥公司的GeoMap等,它们是一个功能复杂的控件和自动化对象的集合体。下面以GeoMap为例说明控件的二次开发方式。GeoStar NT 借助微软的ActiveX控件技术,在GeoStar 空间数据管理模块的基础上,开发了一套GIS 控件,即GeoMap ,包括了GIS 图形的基本操作、空间查询、数据交换、空间分析、地图制图和图形编辑功能等功能。GeoMap控件可以用Visual Basic、Delphi、Visual C+、Borland C+、PowerBuilder、FoxPro 等作为容器。利用GeoMap进行二次开发,用户可以根据开发的需要,选择一种自己熟悉的二次开发语言来进行开发,开发周期短、难度小。但控件一般封装得比较简单,开放性和可扩展性有所欠缺,不适于大型的工程应用开发。5组件利用组件进行二次开发是目前最主流的GIS二次开发方式,代表性软件有ArcObjects、GeoSar4.0等。通过把GIS功能分别封装成一个个组件,使得系统有很好的灵活性、开放性和可扩展性。这是下面几节要介绍的主要内容。3-2 组件技术对于软件开发者来说,软件重用和开发效率始终是一个核心问题。在早期,人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,或者称为类库,通过应用程序接口让其他软件开发人员调用。它为应用开发者提供了方便,但是它的粒度太小,往往一个函数就是一个单一的功能,它相当于机械制造中的零件,利用零件组装一辆汽车太费时间。因而,人们提出了将若干零件包装成一个部件的设想,这个部件完成一个大的功能,如汽车的发动机,它对外提供标准接口,内部自适应工作。软件设计借助于这一思想,提出了组件技术。基于组件的软件开发降低了软件开发和维护的成本。然而组件没有一个一致认可的定义。组件这个概念曾被解释成各种意义,如模块、类、对象、标准类库、封装软件包等。但现在被广大用户接受的概念是:组件是一个软件包,它能够提供一定的功能。它被封装起来,只能通过接口被访问,组件之间能够如搭积木一样组建一个系统,并且组件是可被替换的。3.2.1 组件技术规范目前有三种主要的组件技术规范:CORBA、COM/DCOM/COM+、 (Enterprise) JavaBeans。1CORBA体系结构OMG ( Object Management Group )对象管理集团在1988年成立,是一个由840多个公司联合组成的协会。CORBA ( Common Object Request Broker Architecture), 公共对象请求代理结构,是OMG定义的一个开放的面向对象的分布式结构系统的规范。其目的是为了解决异构的分布式计算问题,以便能够将现有的硬件和软件与新的桌面环境进行集成,最终解决互操作性的问题。CORBA被设计和架构为服务于用不同程序语言书写、运行于不同平台上的对象系统。CORBA依赖于ORB中间件在服务器和客户之间进行通信。如图3-2-1。ORB扮演一个透明地连接远程对象的角色。每个CORBA对象提供一个界面,并且有一系列的方法与之相联。ORB负责为请求发现相应的实现,并且把请求传递给CORBA服务器。ORB为客户提供透明服务,客户不需要知道远程对象的位置以及用何种语言实现的。ClientObjectImplementationDynamic Invocation InterfaceIDL StubsORBInterfaceObject AdapterIDL SkeletonObject Request Broker图3-2-1 CORBA的ORB体系结构2(Enterprise)JavaBeansJava1995年问世不久,JavaBeans组件及其分布式应用被Sun公司推出。微软推出了MTS(后来的COM+)技术后,Sun公司又推出了Enterprise JavaBeans (EJB)。JavaBeans是一个可重复使用和可移植的,与平台无关的Java组件模型,它通过内部的接口访问,而不是通过IDL语言实现。适用于客户机或服务器机器上运行的Java程序。3COM/DCOM/COM+COM(Component Object Model),即组件对象模型,是微软于1993年提出的一个软件开发方法,是一个关于如何建立组件以及如何通过组件构建应用程序的规范。它所定义的是将一个软件组件或模块与其它组件和模块相连的二进制标准。通过这个标准,就可以构造一个分布式系统,并设计出可动态交换和可重用的软件组件,其开发语言、结构和实现细节都完全依赖于程序编写者。4技术比较CORBA、EJB提供跨平台支持,COM/DCOM则局限于微软操作系统。CORBA 和COM都支持用不同的程序设计语言书写的组件,而EJB建立在Java语言之上。CORBA对象基于1991年颁布的一个标准规范;COM规范和代码则是处于一个不停地变化的过程中,它的文档也只是一个草案。COM最初被设计运行于单一的机器上,而不是大规模的网络上,当然DCOM/COM+被设计成分布式应用。而CORBA和EJB从一开始就是被设计成用于大规模的分布式应用的。提供CORBA、EJB产品的开发商很多,而COM/DCOM只能从微软公司获得。CORBA规范是由OMG定义的,它的成员很多,能够比较好地反映行业的需求,但从另一方面每个成员都想销售自己的产品,都想突出自己的特点,从而造成规范庞大、复杂,难以操作。而COM/DCOM不仅是微软独家所拥有,而且具有许多优点。三种组件技术规范,COM/DCOM/COM+、CORBA以及JavaBeans/EJB,由于针对的软件生产中的问题是一致的,因而在内在实质上是一致的。三者都是在二进制代码层次上实现软件重用的规范,并且具有各自不同的优势。鉴于它们内在的区别,它们分别适用于具有不同规模和类型的应用。CORBA、EJB适用于异构的、大规模的分布式系统。如果系统主要运行微软操作系统,并且其地域分布上不是很广,那么,COM/DCOM或许是比较合适的。目前GIS产品主要运行在微软操作系统上,并且空间数据量非常大,系统对效率要求比较高,一般的GIS应用不会是大规模的分布式系统,所以大多数GIS厂商采用COM/DCOM技术进行组件GIS的开发,下面重点介绍COM技术。3.2.2 COM技术1. 概述组件对象模型(COM)是微软公司为了促进软件交互使用而设计的,也就是允许两个或多个应用程序或组件方便地进行合作,这些组件可以是不同厂家在不同时期,用不同的程序语言开发的,也可以运行在不同操作系统的机器上,为此COM定义和实现了一系列的机制来允许应用程序作为软件对象而相互联系在一起。组件对象模型定义了一种提供和享用通用的软件服务的方法,从而大大简化了软件开发。传统上,软件服务的提供有各种各样的途径,常见的有库程序(包括动态链接库DLL),其他独立的本地过程,系统调用,以及远程过程。COM统一了这些服务方式,从而改变了软件的生产方式。在COM之下,软件组件通过一个或多个COM对象来实现其服务功能。但是对象不是组件之间的直接联系,组件通过对象支持的接口来使用对象的功能,通常一个COM对象支持一个或多个接口,而每个接口又支持或实现若干个方法,一个方法是完成某个特定任务的函数或过程,COM对象之间的接触都必须通过接口来进行,一个接口之下的方法通常都是相互关联的。COM是基于面向对象的模型,在一定程度上,它与面向对象编程(如C+)有相似之处,同时也有很大的差别,每个COM对象是一个类的实例。虽然人们对面向对象技术有各种各样的理解,但是有三点是大家公认的:抽象、多态、和继承。COM对象支持这三者。抽象是指一个对象的数据对外界是“隐藏的”,对象的使用者(我们称之为客户)不可以直接存取对象的数据,而必须通过对象的方法。按照COM的规定,COM对象通过接口来合作,因而其数据显然是被“隐藏”了,接口是COM对象支持抽象的方法。所谓多态,就是一个客户可以以同样的方式去处理若干不同的对象,然而这些对象却能正常表现,这是因为这些对象以不同的方式去实现同样的方法,客户使用对象时,对象知道什么样的方法被调用,COM允许不同类的两个对象具有相同的接口(或许只定义一个共同的方法),但是每个对象实现这些方法的具体手段可以不同。面向对象技术的最后一个特点是继承。继承意味着给定一个对象,我们可以构造另一个对象以自动包含原有对象的部分或全部特征。继承可以分为实现继承和接口继承。C+通常所用的是实现继承-一个对象从其“双亲”对象那里继承其程序。当客户调用该对象时所执行的却是其双亲的方法。对接口继承,对象所继承的是其双亲的方法定义,对象自己必须实现这些方法。因此,接口继承使用的是一种抽象的定义,而不是实际的程序。C+是通过虚拟方法定义来实现接口继承的。COM对象只支持接口继承。由于COM具有非常普遍的适用性,支持实现继承是不适当的,甚至可能是危险的,虽然COM对象不支持实现继承,因而不能实现直接的程序再使用。但是COM对象可以通过包含和聚合的方式来实现程序再使用。COM定义了一套完整的用以生成对象以及如何保证对象与与其客户之间通讯的标准机制。该机制与传统的规范(如程序语言)不同的是,COM制定的规范是基于二进制的标准而不是基于语言的规范。这是为了能使由不同程序语言开发的对象和在不同计算系统上运行的对象能够交互作用。COM代表着一种变革性质的软件技术,使用它将大大简化软件开发,并增强应用程序的功能,因为我们不再需要开发大而全的软件,而且可以把若干个软件组件组装在一起。具体来说,使用COM有这样四个好处,首先是面向对象的好处,程序开发者将要实现的任务分成若干个COM对象,然后对每个对象进行接口数据,只要对象和接口按COM规范实现的,COM软件服务都是以一种共同的方式实现的。再次,COM是语言独立的,COM对象可以用任何语言去实现,只要所用的语言能够支持COM所要求的二进制接口,COM对象的客户也可以用任何语言去实现,只要所用的语言能够通过这种二进制接口去调用接口之方法。最后,COM的另一个最大的优点是简化软件版本更新。COM是通过支持多个接口来实现这一点的。所有COM对象之间的交互作用都是通过接口来实现的,如果要增加或修改功能,只要增加新的接口。2. 对象与接口COM是建立在对象的基础上的,而对象之间的相互作用又是通过对象支持的接口来进行的。COM规定了定义对象的接口的规则,并提供了若干重要的库程序来支持对象之间的相互作用。从前面的概述中,我们可以看出接口对COM来说是最核心的内容。一般面向对象编程中的对象只支持一个接口,即对象所包含的所有公开方法,而COM对象则通常支持多个接口,并且接口必须满足COM的二进制标准。COM对象的服务功能是靠调用它支持的接口所含方法来实现的,然而这种接口方法的调用并不是直接的,而是通过一个指向接口的指针来实现的,而接口又是一个指向一个指针数组的指针,这个指针数组包含了该接口所支持的所有方法,这个数组也被称为Vtable,Vtable的概念来自面向对象编程如C+抽象函数表。接口的Vtable结构可以用下图来描述。lpvtble对象数据方法一指标方法二指标方法三指标接口方法之实现对象接口指标接口Vtable 图3-2-2接口的Vtable结构这种Vtable结构即是COM所定义的二进制标准。这种结构完全决定于所使用的接口以及接口被调用的平台,而与实现接口的语言无关。C+自动生成这样的结构。同时我们也可以用C来产生这样的结构。甚至用汇编语言也能实现,这就意味着几乎所有程序语言都可以实现这样的结构,只要语言的编译程序程序支持产生这样的结构。一个COM对象所支持的接口代表着对象与客户之间的一种合同,对象保证按照接口的定义来实现其方法,而其客户也必须实现该接口的所有方法,客户一旦得到该接口的指针,它就可以调用接口的任何一个方法。即使某个方法并不做任何有意义的事,也必须可以被调用。除此之外,接口还具有下列四个主要特点:(1)接口不是类。一个接口是一个抽象基类,所以不可以实例化,也就是说不能由类而产生对象,接口的主要作用是提供方法及其参数(函数签名),不同的对象类可以以不同的方法来实现同一类接口。(2)接口也不是对象,而是对象之间通讯的手段。因为接口是以方法调用来工作的,所以对象只能通过方法来展示其内部状态。(3)接口是严格类型化的,每个接口都有自己的唯一标识码,从而避免接口之间的冲突,对象与其用户必须通过接口标识码来使用接口。(4)接口具有“免疫”力,接口不带任何版本,接口一旦公布,即不能作任何修改。若要增加或删除接口的方法,或改变参数类型,或改变语义等等,都意味着要定义一个新的接口,赋予新的接口标识码。采用这种限制,并支持多个接口是COM解决版本更新的有效手段。由于只增加新接口,而此接口依然存在,这样就不会影响对象更新前的客户。COM对象和接口是以图3-2-3所示方式来表示的。接口是一个小圈圈加一短线与对象相连,图中向上的接口是一个十分特别的接口,称为IUnknown,是每个对象和接口都必须支持的最基本的接口,后面将对它作详细介绍。对象接口A接口IUnknown接口B图3-2-3 对象与接口的表示3. 接口定义与标识每个接口都有两个“名字”。一个是供人用的,一个是供软件用的。供人用的名称是一串字符,必须保证在一个程序内唯一,而供软件用的名字是一个相当大的整数,它必须保证全球的唯一性,也就是说,在任何情况下,两个不同的接口有不同的标识码,称之为全球唯一标识码(Global Unique Identifier,简称为GUID)。按照惯例,供人用的名称总是以I开头如IUnknown,ISomeInterface。接口可以用不同的方式定义,一般是用接口描述语言(IDL)去描述4. 全球唯一标识码(GUID)前面简要提供GUID的作用,GUID是用来确保接口的全球唯一性。除了接口之外,COM对象类也必须用GUID来标识,以保证其唯一性。GUID来源于OSF为分布式计算环境(DCE)而定义的“宇宙唯一标识码”(UUID),GUID可以看成是UUID一个别名。GUID是一个128比特(16字节)的“巨大”整数。生成GUID的方法相当独特,可以确保GUID在时间上和空间上的唯一性,并且在可以预见的将来不会被用尽,生成GUID的基本算法是:使用当时的时间时钟次序及其相关的持久状态严格增值的计数器来避免重复用真正的全球唯一的机器标识码(来自计算机的网络卡,如果没有装网络卡,则算法将根据复杂的方法产生标识码,以保证空间上的唯一性)5. IUknown接口IUnknown 是COM中最重要也是最基本的接口,任何一个COM对象都必须支持IUnknown接口,并且每一个其他接口都必须继承于IUnknown,IUnknown并不复杂,只有三个方法:QueryInterface,AddRef,和Release。这些方法可以通过对象的任何一个接口指针来调用,IUnknown有自己的唯一标识码(IID)。如果用图示来描述一个接口则IUnknown是唯一一个向上的接口。IUnknown的方法是为解决COM对象使用的两个关键问题而设计的。一是接口查询,二是对象生命周期控制。如前所述,一个COM对象可以支持多个接口,对象的客户在产生该对象时通常得到对象的第一指针,在有了一个指针后,客户可以通过IUnknown:QuerInterface来询问对象是否支持某一接口。客户给QueryInterface指明要的接口IID,如果对象支持该接口,则客户得到该接口的指针,否则客户得到一个无效指针(NULL)。在我们介绍对象实例时,我们将说明QueryInterface是怎样实现的。IUnknown要解决的另一个关键问题是一旦对象开始运行,何时可以结束呢。按照传统的软件运行机制,这个任务应该由启用该对象的客户来完成,然而在COM机制下,这样的方法是行不通的,因为一个对象可以被若干个客户使用,首先启用该对象的客户无法知道其它客户使用该对象的情况,所有不能决定何时结束对象的运行。解决这个问题的方法是由对象自身控制自己的生命周期,也就是说对象自己追踪有多少客户使用它,当没有用户使用它时,它便可以结束自己的运行。对象追踪自己用户的机制称为参考记数。IUnknown的其他两个方法即是为支持对象参考记数而设计的,每一个运行中的对象保持一个记数器。当对象送出一个接口指针,该记数器加1调用AddRef方法。当一个客户完成使用一个接口指针时,它必须调用Release方法。该方法做两件事,一是将记数减1;二是当记数器为0时,停止对象的运行。当对象客户把一个接口指针交给另一个客户时,该客户必须给对象的记数器加1仍用AddRef方法。由于客户调用对象的状况可以是相当复杂的,因而对象的记数器有可能被弄乱。必须相当小心,否则会使对象无限地运行或是提前结束。6. 组件、OLE自动化和控件(1) 组件(COM)基于上述COM模型开发的部件我们通称为组件(COM)。组件的开发者和使用者都有很好的灵活性,但相应的开发比较复杂。(2) OLE自动化所谓自动化就是使一个应用程序可编程化,或者说是让其它软件以编程的方式来使用该程序所提供的各种服务。如果能以一种标准的方式来提供可编程化的能力,则可实现多种软件同时编程化,COM规定了一种软件对象之间交互作用的标准方式(接口),所以,以COM为基础来实现通用的可编程化便是一件很自然的事,这就是OLE自动化。自动化对象是一种COM对象。使自动化对象区别于一般COM对象的主要标志是它必须支持IDispatch接口,原因使最常用的自动化控制者是Visual Basic。通过Vtable接口公布的方法难以在Visual Basic中调用,通过IDispatch接口即可使一个程序的各种方法可编程化。IDispatch接口其实也就是一般的COM接口,其特殊之处在于它支持一个称为Invoke的方法。这种方法可以用来调用其它方法。(3) 控件控件或称为OLE控件、ActiveX控件,是目前应用广泛的组件,成百上千的控件在市场上流通,各个GIS厂商也开发出了GIS控件,如ESRI的MapObjects,武汉吉奥公司的GeoMap等,它们是一个功能相当复杂的控件和自动化对象的集合体。控件是一种实现若干标准接口的COM对象,ActiveX控件规范不仅对控件作了规定,而且也对控件的使用者(称为控件容器)作了相应的规定,并且比控件本身更为严格。控件实现的功能可以分成四个主要方面:1)提供一个用户界面,如一个窗体或一个命令按钮;2)允许容器启用控件的方法;3)给容器发送事件,比如按钮被击;4)了解容器环境属性并允许自己的属性被容器查阅和修改显然实现这些功能的手段就是实现相应的接口。控件与用户或客户程序之间则主要通过属性、方法和事件进行交互。属性(properties)是描述控件或对象的性质(attributes)的数据,是控件拥有的重要特征。方法(methods)指控件或对象的动作(actions),通常对应于函数(functions)。通过调用方法,可以让控件执行需要完成的动作,如在GIS控件中Open Work Space(打开工作区)、Close Work Sapce(关闭工作区)等。控件的方法是靠发送接口dispinterface来定义的,而用IDispatch:Invoke来调用的,这与自动化很类似。事实上,ActiveX控件包括自动化对象的所有功能。控件不支持Vtable接口,只靠Idispatch接口来让控件容器使用其方法。事件(events)指对象的响应(responses),是控件与其容器进行交流的重要手段。当用户对控件进行某种动作时,控件可以向容器发送相关的事件,容器可以作出相应的反映,控件就是一组适合其功能的事件。用户界面和事件是控件和自动化对象的最主要差别。3.2.3 Microsoft .NET技术Microsoft于2000年7月揭开了.NET的大幕。.NET平台是一个全新的开发框架,它具有与Windows服务和API合作的全新编程接口,集成了Microsoft 20世纪90年代后期的许多技术。.NET中融合的元素包括:COM组件服务,ASP Web开发框架,XML和面向对象设计,对新的Web服务协议(如SOAP、WSDL和UDDI)的支持,以及以Internet为中心的理念。.NET顺应了当今软件工业的以下趋势:分布式计算:以简化健壮的客户/服务应用程序的开发。当前的分布式技术往往受具体厂商的局限,而且与Web的互操作性较差。.NET提供的远程体系结构应用了许多开发的Internet协议,包括HTTP、XML和SOAP(Simple Object Access Protocol,简单对象访问协议)。组件化:以简化对不同厂商开发的软件组件的集成过程。COM模型使软件的即插即用成为现实,但COM组件的开发和部署比较复杂。.NET提供了创建和部署组件更简单的方式。企业级服务:可以开发伸缩自如的企业级程序,从而无需编写代码即可管理事务、安全或池化。Microsoft .NET提供的企业级服务可以极大地减少开发大型程序所需地时间和人力。Web范型转移:代表了Web技术的最新变化,可以简化Web程序的开发。最近几年,Web程序开发中心已经从连接(TCP/IP),向呈现(HTML)和可编程性(XML和SOAP)转移。.NET的关键目的就是使软件以服务的形式销售和发行。服务器、桌面和各种设备之上的操作系统.NET企业级服务器.NET服务构件.NET框架Visual Studio .NET图3-2-4 MicroSoft .NET平台MicroSoft .NET平台由5个主要组件组成,如图3-2-4所示。最底层是操作系统,可以是任何一种Windows平台,包括Windows XP、2000、Me和CE。在操作系统之上是一系列.NET企业级服务器产品,可以用于简化大型商务系统的开发和管理,包括Application Center 2000,BizTalk Server2000,Commerce Server2000,Exchange Server2000和SQL Server2000等。因为Web服务很容易跨Web重用,Microsoft计划为开发人员提供大量付费的服务构件。例如,使用Microsoft Passport,用户可以在支持Passport认证的所有网站中使用同一个用户名和密码。第三方厂商也可以自己创建新的Web服务。在.NET体系的顶层是全新的开发工具Visual Studio.NET,用于进行Web服务及其他程序的开发。作为Visual Studio6.0的换代产品,Visual Studio.NET是支持一组语言(如C和VB.NET)和跨语言调试、XML Schema编辑器等功能的集成开发环境。.NET的中心是Microsoft .NET框架,它是一个新的开发和运行期基础环境,将极大地改变Windows平台上商务程序的开发模式。.NET框架包括CLR(Common Language Runtime,公用语言运行期环境)和一个所有.NET语言都可以使用的公用类框架。CLR管理和执行各种.NET语言编写的代码,是.NET体系结构的基础,与Java虚拟机相似。.NET框架能更好地支持组件、语言的集成,应用程序跨网络的互操作,开发和部署的简化,更高的可靠性和安全性。基于组件的编程方法是目前主要的方法。但.NET所提供的功能将使我们达到软件开发的新水平。这是一种向着Web服务转变的新模式将软件视为一种服务,这种服务是非连接的、无状态的,并且符合国际的开放式标准。这也是GIS的发展方向之一。3-3 组件GIS3.3.1 组件GIS的概念组件GIS就是基于组件技术开发的GIS系统。组件GIS将GIS的各大功能分解为若干组件或控件,每个组件完成不同的功能,这些组件可以是来自不同厂家和不同时期的产品,可以用任何语言开发,开发的环境也无特别的限制。各个组件之间可以根据应用要求,通过可视界面和使用方便的接口可靠而有效的组合在一起,形成最终的应用系统。因此组件式GIS是传统GIS技术与组件式软件设计技术相结合的产物,可以说是以传统的GIS技术作为内容,而组件式软件设计技术作为形式,为最终的GIS软件产品提供有效的接口,使软件产品能够方便二次开发用户的开发工作。所有组件GIS的核心内容是接口。组件如同一堆各式各样的具有不同功能的“零件”,根据需要把它们组装起来,就构成了一个应用系统。组件可以重复使用,这样,就大大提高了软件的安全性和重用性,提高软件生产率。这里以微软COM组件技术为例介绍组件GIS的特点与设计方法。3.3.2 组件GIS特点组件GIS符合当今软件技术的发展潮流,极大地方便了系统集成和应用。同传统GIS技术比较,它有着明显的优势和特点。1. 与语言无关性首先,组件GIS不需要专门的二次开发语言,只要按照一定的标准(如Microsoft的ActiveX控件标准)开发接口,提供一套实现GIS基本功能函数的构件。也就是说GIS应用开发者,不必掌握专门的GIS开发语言,只需熟悉基于Windows平台的通用集成开发语言(如Visual C+、Visual Basic、Visual Foxpro、Borland C+等),及ComGIS各个构件的属性、方法和事件,即可完成应用系统的开发和集成;2. 二次开发能力强一个完全组件化了的组件GIS其二次开发能力非常强大。因为GIS的每一个功能模块都组件化了,其功能模块组件既提供给二次开发用户,同时也是组件GIS的内部调用的接口。为了实现一个完整的GIS功能,各个功能模块组件及接口必须定义得完备、详细。3. 开放性和可扩展性由于ComGIS 不依赖于某一种开发语言,可以嵌入通用的开发环境中实现GIS功能。专业模型则不仅可以使用这些通用开发环境来实现,也可以插入专业模型的分析控件,有效克服了传统GIS软件在系统集成上存在的低效、“有缝”等缺陷,实现高效、无缝的系统集成;4. 大众化由于组件式技术已经成为行业标准,即“组件”标准化,用户可以像使用其他ActiveX控件一样使用ComGIS控件,这样,非专业的普通用户也能够开发和集成所需要的GIS应用系统,使GIS从专家们的实验室走向社会,有力地促进GIS的普及与大众化的进程;5. 低成本由于ComGIS本身可以分解为若干个完成不同功能的构件,用户可根据实际需要选择构件,同时,由于ComGIS只提供GIS的通用功能构件,其它非GIS的专业功能可使用专业厂商提供的专门功能的构件,这样,就可以大大减轻用户的经纪负担,降低GIS软件的开发成本。6. 分布式多数据源集成组件化使得在应用中可较易实现分布式多数据源的集成。7. 互操作性互操作GIS还处在研究的阶段,但组件化是互操作GIS基础。只有GIS的功能模块化、标准化,各个GIS厂商按照标准以组件的方式实现各个功能模块,不同厂商的功能模块相互之间才可协同工作达到互操作的目的。3.3.3 组件GIS软件设计1. 组件GIS和人的关系组件GIS从技术的角度会涉及到三个层次的人员:组件GIS软件平台的开发者、组件GIS二次开发用户和GIS应用系统的使用者(最终用户)。我们可以看出,在一个GIS的具体应用中,上述三个层次的人员,对GIS技术的理解和对具体应用的理解都会存在差异。组件GIS软件平台的开发者必须全面了解GIS技术的各个细节,例如空间对象的组织方式、存储方式、空间分析算法的细节、各个组件接口的相互关系、系统运行的效率等等。正因为如此,组件GIS软件提供者往往是其产品的最好的二次开发者,他们熟悉软件产品的特点,规定了二次开发的基本过程。同时他们对GIS行业的各个领域应该有比较全面的了解,毕竟组件GIS产品是为各个领域的最终用户服务的。组件GIS二次开发用户必须了解他们所选用的组件GIS平台的功能特点和各个功能的使用方法、效果,对各种第三方的工具组件也要充分掌握,通过集成各种组件的功能,完成最终GIS应用的开发。他们不需要了解组件GIS中各个功能的实现细节,但是必须了解其最终GIS应用产品用户的需求。最终用户必须能够理解GIS系统能够对他们的工作提供哪些帮助,帮助二次开发者理解其行业领域内的特殊工作流程、特殊的数据形式、数学模型等,和二次开发者共同确定最终GIS应用系统的需求分析。2. GIS功能的相似相关性是组件GIS接口功能划分的依据GIS软件中接口划分时,需要寻找功能中相似的环节,进行一定的抽象和综合,发现原子功能,从而规划组件式GIS的功能接口形式,这个过程是组件式GIS软件的设计过程。适合二次开发使用的组件式GIS的原子化的功能,事实上可以有多种渠道来获得:各种数据本身的逻辑结构和物理结构支持的操纵方式;某个功能、技术使用的数据结构或数学模型支持的运算。组件GIS中功能接口的划分粒度,会直接影响应用系统二次开发时的灵活性。3. 组件GIS软件接口功能划分粒度是应用开发中灵活性与方便性的折衷组件GIS软件功能模块在划分时,除了要依据功能分解与功能相似相关性的原则外,还必须考虑功能模块划分的粒度。划分的粒度大,使灵活性降低,个性化选择的机会少,但是二次开发用户使用简单,可以满足一定层次的用户需求。开发难度小,与传统的GIS风格接近;划分的粒度小,灵活性高,二次开发者可以充分发挥创造性,组建出界面、功能灵活的应用系统。对二次开发用户的要求较高,开发难度较大。综合上述两个方面考虑,在实现小粒度划分的基础上,适当进行功能的集成,提供多层次的划分粒度,可以使二次开发用户可以根据自身的开发能力,以及需要开发的系统的复杂性,选择合适层次的功能粒度。在小粒度的基础上,通过提供利用这些组件实现的功能示例,使用户可以参照示例完成特定的GIS功能。在进行GIS功能划分时,应该对具体功能具体对待:有些功能是需要整合的,终端用户对这部分功能的个性化要求不高,例如,符号库的管理设计,影像库的管理等。有些功能必须进行划分,因为不同的用户需要不同的表现形式,例如,空间查询、空间分析等。4. 组件GIS软件接口设计必须考虑系统开放性的要求GIS在各个行业和领域的深入应用对GIS的开放性提出了很高的要求。GIS不可能通过大而全的功能适用于所有行业,必须以开放性来解决不同领域对GIS千变万化的要求。例如一个组件GIS平台有其固定的几种空间数据的表现方式,但有的领域对空间数据的表现有其特殊的要求,例如海图中水深注记的表现是和注记本身的文本相关联的,如注记“9”要求显示成红色,“10”则显示成绿色。因此必须对表现模块进行扩展。3-4 组件GIS框架结构笔者根据开发Geostar4.0的经验,从GIS软件功能和模块化的角度把组件GIS划分为七个层次:功能函数层、数据操纵层、框架层、表现层、数据处理和分析层、控件层和应用层,如图3-4-1所示:功能函数层数据操纵层框 架 层表 现 层数据处理与分析层控 件 层应 用 层图3-4-1 组件GIS层的划分功能函数层提供对空间数据进行数据处理、几何对象模型描述、空间参考变换等二次开发功能;数据操纵层提供对空间数据的组织、数据库读、写、查询及并发控制等功能;框架层通过层(layer)、地图(Map)等概念把GIS的业务功能,如查询、表现、编辑等管理起来;表现层提供对空间数据的表现,如颜色、符号、专题图等;数据处理和分析层提供GIS对空间数据的分析处理,如编辑、空间分析等;一般情况下通过前面几个层,就可进行复杂的GIS开发应用。为了满足某些开发用户的需要,一般组件GIS平台会提供控件。控件层则对前面几个层进行概括、提取,以控件的方式提供一个简单的GIS二次开发包,以便于进行小型工程应用开发;应用层则是在上述几个层的基础之上进行各种开发应用,可采用组件、控件或组件结合控件三种灵活的开发方式。下面对每个层进行相应的描述。3.4.1功能函数层功能函数层提供了对空间数据进行数据处理、几何对象模型描述、空间参考变换等二次开发功能。空间数据处理:系统提供了一系列数学函数,以API的方式(因为数据量和效率的原因,此模块以API的方式提供二次开发,以下所有其它模块均以组件的形式提供二次开发,因此不再另外说明开发方式),实现对空间数据的处理功能,包括空间数据的打断、构面、求并、求交、切割、叠置等。几何对象模型描述:定义了基于OpenGIS的几何对象模型,包括点、点群、线、线群、面等基本的几何对象,每个对象支持ISpatialRelation和ISpatialOperator两个接口,ISpatialRelation接口实现了几何对象的空间关系操作方法,ISpatialOperator接口定义了几何空间关系、拓扑和集合等操作。且每个几何对象支持ISpatialReference接口,用来实现对象的空间参考变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论