简介
GIS的二次开发通常有三种方法1:
独立二次开发
单纯二次开发
集成二次开发
开发方法独立二次开发独立二次开发是指不依赖任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++,Delphi,C++ Builder,VJ++等,在一定的操作系统平台上编辑实现。
这种方式的好处在于无需依赖任何商业GIS工具软件,减少了开发成本,同时程序员可以对程序的各个方面进行总体控制。因此,系统各个组成部分之间的联系最为紧密,综合程度和操作效率最高。但由于地理信息系统的复杂性,开发的工作量是十分庞大的,开发周期长。对于大多数开发者来说,能力、时间、财力方面的限制使其开发处理的产品很难在功能上与商业化GIS工具软件相比。
单纯二次开发单纯二次开发指完全借助于地理信息系统工具软件提供的二次开发语言进行应用系统开发。目前,商业化的地理信息系统工具已经相当成熟,它们大多提供了可供用户进行二次开发的宏语言,如ESRI的Arcview提供了Avenue语言,MapInfo公司研制的MapInfo Professional提供了MapBasic语言等。用户可以利用这些语言,以原GIS工具软件为开发平台,针对不同应用对象,开发出自己的应用程序。
具体开发时,可首先采用可视化开发平台开发动态链接库(DLL),以实现地理信息系统工具软件未提供或难以实现的功能,然后在二次开发宏语言中调用此动态链接库,从而充分利用二次开发语言操纵地图对象的强大功能,又避免了二次开发语言功能上的不足。这种开发方式省时省心,但进行二次开发的宏语言作为编程语言只能算是二流,功能极弱,用来开发应用程序仍然不尽如人意。早期的商用GIS软件是以解释语言方式执行的,基本上提供了自己的二次开发方法和语言,它们的二次开发环境有明显的不足:
语言千差万别,不易学习和掌握。每种GIS软件,都按照自己的习惯和自定义的语法规则提供二次开发环境,对于已熟悉一种开发环境的人来说,要重新学习新的开发环境的困难较大。
解释执行,程序运行速度慢。早期的GIS开发环境着眼于交互操作,对于速度并无太多的要求。随着GIS应用的提高,要求提高软件处理的自动化程度,这就要求GIS下的应用程序能处理较大的数据量。集成化要求的发展,要求GIS下的应用程序不仅要能处理交互任务,同时也要能处理相关的设计与计算。
功能单一,综合处理功能差。随着GIS应用层次的提高,不仅要求应用程序能进行图形交互,同时也应具备与操作系统交互的能力,甚至要求GIS的应用程序可以访问处于分布环境的数据。
集成二次开发集成二次开发是指利用专业GIS工具软件或其提供的组件来实现GIS的基本功能,同时,采用通用软件开发工具,尤其是可视化开发工具,如Delphi,VisualC++ ,Visual Basic,Power Builder等作为开发平台,进行二者的集成开发。集成二次开发目前主要有OLE DDE方式和组件式开发两种开发方式。
OLE DDE开发方式
DDE起初是作为一种基于消息的协议在Windows(3.X)中实现的,用于在不同的Windows应用程序之间交换信息。随着Window3.0的发布,DDE在很大程度上得到了简化,组合到应用程序的工作也变得较为容易。对象链接与嵌入(ObjectLinking Embedding,OLE)相比DDE出现得较晚,它是一个服务可控制、结构可扩展、基于对象集成的、统一的服务环境,是应用程序共享对象的工业标准,其实质是在应用程序中嵌入其它程序提供的对象和数据,从而获得特定功能的程序设计方法。
采用OLE自动化技术或利用DDE技术进行GIS集成二次开发的思路是:用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调技术动态取其返回信息,实现应用程序中的地理信息处理功能。采用这种方法能够充分利用GIS工具软件强大的地理空间数据和属性数据管理能力以及可视化开发平台,实现地理信息开发。
组件式GIS开发方式
组件式GIS(Components GIS,以下简称ComGIS)是指基于组件对象平台,具有标准的接口,允许跨语言应用,因而使GIS软件的可配置性、可扩展性和开放性更强,使用更灵活,二次开发更方便。其基本思想是把GIS的各主要功能模块划分为几个组件,每个组件完成不同的功能。各个GIS组件之间,以及GIS组件与其它非GIS组件之间,可以方便地通过可视化的软件开发工具集成起来,以形成最终的GIS应用。目前的ComGIS基本上是采用ActiveX组件或者其前身OLE组件。
组件式GIS(ComGIS)1、组件技术:
组件技术的兴起:
目前,在软件开发领域,一场新的革命正在悄悄兴起,这是由日趋成熟的组件技术引发的。几年以前,当微软公司首先使用 OLE 的时候,其初衷是为了增强软件的互操作性。然而在使用过程中,人们逐渐认识到这一技术背后的实质性内容和它在软件开发中所扮演的重要角色。组件技术以前所未有的方式提高了软件产业的生产效率,这一点已逐步成为软件开发人员的共识。传统的C/S 结构、群件、中间件等大型软件系统的构成形式,都将在组件的基础上重新构造。组件技术使近二十年来兴起的面向对象技术进入到成熟的实用化阶段。在组件技术的概念模式下,软件系统可以被视为相互协同工作的对象集合,其中每个对象都会提供特定的服务,发出特定的消息,并且以标准形式公布出来,以便其他对象了解和调用。组件间的接口通过一种与平台无关的语言IDL(InterfaceDefineLanguage)来定义,而且是二进制兼容的,使用者可以直接调用执行模块来获得对象提供的服务。早期的类库,提供的是原代码级的重用,只适用于比较小规模的开发形式;而组件则封装得更加彻底,更易于使用,并且不限于C++之类的语言,可以在各种开发语言和开发环境中使用。由于组件技术的出现,软件产业的形式也随之发生了很大的变化。大量组件生产商涌现出来,并推出各具特色的组件产品;软件集成商则利用适当的组件快速生产出用户需要的某些应用系统;大而全的通用产品逐步减少;很多相对较为专业,但用途广泛的软件,如GIS、语音识别系统等,都以组件的形式组装和扩散到一般的软件产品中2。
COM与DCOM:
COM是组件式对象模型(Component Object Model)的英文缩写,是组件之间相互接口的规范,是OLE(Object Linking & Embedding)和ActiveX 共同的基础,其作用是使各种软件构件和应用软件能够用一种统一的标准方式进行交互。COM 不是一种面向对象的语言,而是一种与源代码无关的二进制标准。COM 所建立的是一个软件模块与另一个软件模块之间的链接,当这种链接建立之后,模块之间就可以通过称之为 “ 接口 ” 的机制来进行通信。 COM 标准增加了保障系统和组件完整的安全机制,并扩展到分布式环境。它定义了软件组件的接口。
COM本质上仍然是客户/服务器模式。客户(通常是应用程序)请求创建COM 对象并通过COM 对象的接口操纵COM 对象。服务器根据客户的请求创建并管理COM 对象。客户和服务器这两种角色并不是绝对的。
基于分布式环境下的 COM 被称作DCOM(Distribute COM,分布式构件对象模型)。
DCOM是ActiveX 的基础,它实现了COM 对象与远程计算机上的另一个对象之间直接进行交互。DCOM 规范定义了分散对象创建和对象间通信的机制,规范本身并不依赖于任何特定的编程语言和操作系统,但目前该标准只在Microsoft Windows 平台实现,这就意味着其它的操作系统平台(如UNIX)目前还不支持ActiveX。
DCOM的实现采用了DCOM 库的形式,当DCOM 客户对象需要DCOM 服务器对象的服务时, DCOM 库负责生成DCOM 服务器对象并在客户对象和服务器对象之间建立初始连接,一旦返回服务器对象指针,DCOM 库就不再参与客户对象与服务器对象之间的工作,两个对象之间可以自由地进行通信。
DCOM接口实际上时逻辑上和语义上相关联的函数集。服务器对象通过DCOM 接口为客户对象提供服务,客户对象不需了解服务器对象的内部数据表示。接口可以看成两个软件构件之间的一种协议,协议表明服务器对象为客户对象提供一种且仅此一种服务。接口采用全局唯一标识符(GUID)来保证服务的唯一性。通常的DCOM 构件提供多种服务,那么服务器对象为每一种服务实现一个接口。当客户对象指针指向相应的服务器对象时,它就激活服务器对象接口的相应函数。具体过程是:客户对象通过DCOM 对象必须支持的IunKnown 接口获得其它接口的指针。客户对象也许并不知道服务器对象的每个接口,但这并不妨碍客户对象对服务器对象的使用,它只用它知道的接口。当客户对象用完服务器对象的服务时,它会通知服务器对象,服务器对象就释放它所占有的内存。
DCOM的好处是显而易见的。由于接口的定义和功能保持不变,DCOM 构件开发者可以改变接口功能、为对象增加新功能、用更好的对象来代替原有对象,而建立在构件基础上的应用程序几乎不用修改,大大提高了代码的重用性。
ActiveX与ActiveX 控件:
ActiveX:
( 1)ActiveX 是Microsoft 提出的一组基于COM(Component Object Model,部件对象模型)规范使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX 被广泛应用于WEB 服务器以及客户端的各个方面。同时,ActiveX技术也被 用于方便地创建普通的桌面应用程序
( 2)ActiveX 的内容:
· ActiveX 控制(ActiveX Control):用于向WEB 页面、Microsoft Word 等支持ActiveX的容器(Container)中插入COM 对象;
· ActiveX 文档(ActiveX Document):用于在Web Browser 或者其它支持ActiveX的容器中浏览复合文档(非HTML 文档),例如Microsoft Word 文档、Microsoft Excel文档或者用户自定义的文档等;
· ActiveX 脚本描述(ActiveX Scripting):用于从客户端或者服务器端操纵ActiveX控件和Java 程序、传递数据以及协调它们之间的操作等;
· ActiveX 服务器框架(ActiveX Server Framework):提供了一系列针对Web 服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML 数据流控制等;
· 在 Internet Explorer 中内置Java 虚拟机(Java Virtual Machine),从而使Java Applet 能够在Internet Explorer 上运行,并可以与ActiveX 控制通过脚本描述语言进行通信。
桌面用的、基于 COM 的组件叫做ActiveX 控件。所谓ActiveX 控件不过是遵从一定的标准、与客户端交互的COM 对象而已。基于组件的应用开发,其方法和组装电子装置一样,可以用已制作好的组件部件来构筑应用。这确实是一项很令人神往的技术。虽然说起来高深,但随着ActiveX 的广泛应用,越来越多的编程工具都支持创建ActiveX 控件了。这其中就包括了VB。
ActiveX控件:
ActiveX控件是充分利用ActiveX(基于COM)技术的自定义控件,是基于与应用程序无关的思想而设计的,其目标是提供一种面向对象、与编程语言无关、可以在应用程序之间互相访问对象的机制。
ActiveX控件是建立在COM 标准上的独立的软件元件,提供给用户应用接口,发送相应的事件,开发者则可以截取这些事件,执行相应的功能。ActiveX 控件开发端和使用端是完全独立的,可以用Delphi、VB 等各种语言来开发,又可以用于不同语言、不同开发平台、不同的系统环境中。一个或多个ActiveX 控件会保存在一个动态链接库中,但它是一种特殊的动态链接库,其扩展名是OCX。
ActiveX控件的组成
一个 ActiveX 控件由它的一些成员组成:属性,方法以及事件
PME模型
Property属性
Method方法
Event事件
· P:属性 是用来描述和反映对象特征的参数,用来保存对象的数据
· M:方法是控件内部可调用的用以完成特定操作的过程或函数
· E:事件是VB 预先定义的对象能识别的动作。
ActiveX与ActiveX 控件的区别
ActiveX不等同于ActiveX 构件,从上面的介绍可知,ActiveX 是一个很宽的技术家族的标识,而ActiveX 控件只是那个家族的一个特定产品。
2、组件式GIS
组件式软件技术已经成为当今软件技术的潮流之一,为了适应这种技术潮流, GIS 软件象其他软件一样,已经或正在发生着革命性的变化,即由过去厂家提供了全部系统或者具有二次开发功能的软件,过渡到提供组件由用户自己再开发的方向上来。无疑,组件式GIS 技术将给整个GIS技术体系和应用模式带来巨大影响。
( 1)组件式GIS
基本思想是把 GIS 的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS 控件之间,以及GIS 控件与其它非GIS 控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS 应用。控件如同一堆各式各样的积木,他们分别实现不同的功能(包括GIS 和非GIS 功能),根据需要把实现各种功能的 “ 积木 ” 搭建起来,就构成应用系统。
(2)组件式GIS 系统的特点
· 小巧灵活、价格便宜
· 无须专门 GIS 开发语言,直接嵌入MIS 开发工具
· 强大的 GIS 功能
· 开发简捷把 GIS 的功能适当抽象,以组件形式供开发者使用,将会带来许多传统GIS 工具无法比拟的优点。
· 更加大众化
A)、小巧灵活、价格便宜
由于传统 GIS 结构的封闭性,往往使得软件本身变得越来越庞大,不同系统的交互性差,系统的开发难度大。在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,用户可以根据实际需要选择所需控件,最大限度地降低了用户的经济负担。。组件化的GIS 平台集中提供空间数据管理能力,并且能以灵活的方式与数据库系统连接。在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS 开发工具的十分之一,甚至更少。这样,用户便能以较好的性能价格比获得或开发GIS 应用系统。
B)、 无须专门GIS 开发语言,直接嵌入MIS 开发工具
传统 GIS 往往具有独立的二次开发语言,对用户和应用开发者而言存在学习上的负担。而且使用系统所提供的二次开发语言,开发往往受到限制,难以处理复杂问题。而组件式GIS建立在严格的标准之上,不需要额外的GIS 二次开发语言,只需实现GIS 的基本功能函数,按照Microsoft 的ActiveX 控件标准开发接口。这有利于减轻GIS 软件开发者的负担,而且增强了GIS 软件的可扩展性。GIS 应用开发者,不必掌握额外的GIS 开发语言,只需熟悉基于Windows 平台的通用集成开发环境,以及GIS 各个控件的属性、方法和事件,就可以完成应用系统的开发和集成。目前,可供选择的开发环境很多,如Visual C++、Visual Basic、VisualFoxPro、Borland C++、Delphi、C++ Builder 以及Power Builder 等都可直接成为GIS 或GMIS的优秀开发工具,它们各自的优点都能够得到充分发挥。这与传统GIS 专门性开发环境相比,是一种质的飞跃。
C)、 强大的GIS 功能
新的 GIS 组件都是基于32 位系统平台的,采用InProc 直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统GIS 软件逊色。小小的GIS 组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力。
D)、 开发简捷
由于 GIS 组件可以直接嵌入MIS 开发工具中,对于广大开发人员来讲,就可以自由选用他们熟悉的开发工具。而且,GIS 组件提供的API 形式非常接近MIS 工具的模式,开发人员可以像管理数据库表一样熟练地管理地图等空间数据,无须对开发人员进行特殊的培训。在GIS 或GMIS 的开发过程中,开发人员的素质与熟练程度是十分重要的因素。这将使大量的MIS 开发人员能够较快地过渡到GIS 或GMIS 的开发工作中,从而大大加速GIS 的发展。
E)、 更加大众化
组件式技术已经成为业界标准,用户可以象使用其他 ActiveX 控件一样使用GIS 控件,使非专业的普通用户也能够开发和集成GIS 应用系统,推动了GIS 大众化进程。组件式GIS 的出现使GIS 不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的的可视化工具。
(3)组件式GIS 开发平台的结构
组件式 GIS 开发平台通常可设计为三级结构:
基础组件 :面向空间数据管理,提供基本的交互过程,并能以灵活的方式与数据库系统连接;
高级通用组件 :由基础组件构造而成,面向通用功能,简化用户开发过程,如显示工具组件、选择工具组件、编辑工具组件、属性浏览器组件等等。它们之间的协同控制消息都被封装起来。这级组件经过封装后,使二次开发更为简单。如一个编辑查询系统,若用基础平台开发,需要编写大量的代码,而利用高级通用组件,只需几句程序就够了。面向通用功能;
行业性组件 : 抽象出行业应用的特定算法,固化到组件中,进一步加速开发过程。以 GPS 监控为例。对于GPS 应用,除了需要地图显示、信息查询等一般的GIS 功能外,还需要特定的应用功能,如动态目标显示、目标锁定、轨迹显示等。这些GPS 行业性应用功能组件被封装起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的颜色、锁定的目标,以及调用、接受数据的方法等。
(4) GIS组件的构成
GIS软件的模型包含若干功能单元:
空间数据获取
坐标转换
图形编辑
数据存储
数据查询
数据分析
制图表示
…… .
可以想象要把这些所有的功能放在一个控件中几乎是不可能的,即使实现也会带来系统效率上的低下。一般可以认为 GIS 构件的设计主要遵循应用领域地需求。例如ESRI 地MapObjects 就是以空间数据访问、查询、制图为主要目标的GIS 构件。
(5) GIS组件产品
GIS组件的代表作应首推MapObjects 以及MapX。其中MapObjects 由全球最大的GIS 厂商ESRI(美国环境系统研究所)推出;MapX 由著名的桌面GIS 厂商美国MapInfo 公司推出。另外还有加拿大阿波罗科技集团的TITAN 等。下表是MapObjects 和MapX 的主要功能对比。
应用及评价
软件的构件化已成为软件技术发展的潮流。基于 DCOM 的ActiveX 构件实现,已成为软件工业的一种标准。伴随着未来其它非Windows 平台对ActiveX 的支持,ActiveX 构件化的GIS 软件系统将对GIS 的体系结构和GIS 将来的应用前景产生深远影响。
虽然采用 GIS 构件在开发上有许多优势,但是不可避免的也存在一些功能上的欠缺和技术上的不成熟,主要包括以下几个方面:
· 与专业的 GIS 客户端软件相比,采用构件技术不可避免的带来效率上的相对低下,这在访问超大空间数据(如大数据量的遥感图象)的时候表现得尤为明显;
· 支持的空间数据量有限;
· 支持的功能有限,由于是构件,只覆盖了 GIS 系统的部分功能,于是对于特殊领域,
· 它就显得无能为力;
(6) MapInfo相关技术
MapInfo公司及其产品:美国MapInfo 公司致力于为用户提供先进的数据可视化、信息地图化技术,并将这些技术与主流业务系统集成,提供完整的解决方案。MapInfo 吸取了传统GIS 系统的精华,并借助于计算机技术的发展,及时将GIS 概念从中大型计算机的专用工作站上介绍至普通桌面PC 上,开创了崭新桌面地图信息系统。MapInfo 公司的主要系列产品有:
· 桌面地理信息系统 MapInfo Professional
· 网络解决方案 MapInfo ProSerev
· 数据库服务器产品 MapInfo SpatialWare
· GIS 组件:MapInfo ActiveX
· 开发工具 MapInfo MapBasic
主要技术特点 :
A)、 以表(Table)的形式组织信息
每一个表都是一组 MapInfo 文件,这些文件组成了地图文件和数据库文件。为使用MapInfo,就需要有组成表的用户数据和地图文件。这些文件可以来自MapInfo 或者由用户创建。用户要想在MapInfo 中工作,就必须打开一个或多个表。MapInfo 通过表的形式将数据与地图有机地结合在一起。当用户在MapInfo 中打开数据文件时,MapInfo 将创建一个表。这个表至少由两个独立的文件组成,一个是包含数据结构的文件,另一个是包含原始数据的文件。一个典型的MapInfo 表将主要由*.tab、*.dat、*.wks、*.dbf、*.xls、*.map、*.id、*.ind 文件格式组成。
B)、图形对象
MapInfo内置的数据库管理系统是一种关系型数据库管理系统,也是用二维表组织数据。与其它关系型数据库不同的是表结构中除可包含常用类型的属性列外,还引入一个图形对象列(OBJ列),用于存储图形对象(如线、区域等)。MapInfo提供许多图形对象的操作接口,利用这些接口可以生成和处理所需要的各种图形。
C)、地图图层化
MapInfo是按图层组织计算机地图的。也就是说,将一幅计算机地图加工成多个层层叠加的透明层,这个透明层就称为图层。每个图层包含了整个地图的一个不同方面。例如,第一个图层包含省边界,第二个图层表示省府的符号,第三个图层由标注文本组成,把它们层层叠加就形成一幅完整的地图。在创建每一个图层时,都要为其建立一张表,MapInfo就是通过这种方式使表与地图之间建立了联系。
也就是说,MapInfo是以表的形式来进行管理的,每个表一般包含两部份:地图部分和数据库(属性)部份。
D)、专题地图
提供多种数据可视化的专题地图,能将数据库中的信息进行直观的可视化分析。使用专题渲染在地图上显示数据时,可以清楚地看出在数据记录中难以发现的模式或趋势,为用户的决策提供依据。专题地图包括范围值、点密度、柱状图、等级符号、饼图和独立值六种形式。
E)、内置ODBC
MapInfo内置ODBC,支持各种关系型数据库,支持SQL查询,从而保证了对原有数据库的沿用和对远程数据库地访问。具备空间查询的功能扩展(如缓冲区、叠加等),采用数据仓库的最新技术OLAP(Online Analytical Processing)的联机事物处理,对于应用程序实现图形查询和表查询提供了强大的手段。
F)、支持多种数据格式及其转换
MapInfo既支持数字化仪的图形输入方式,直接生成矢量图,也支持目前市场上流行的图形图象格式。可接受AutoCAD的DWG、DXF标准文件格式,还可通过MIF及MID文件与其它软件建立数据的接口。其中MIF文件内保存有图形信息,MID文件内保存有图形的属性信息。MIF及MID文件通过MapInfo的菜单命令Import和Export来输入和产生。
G)、二次开发工具MapBasic
作为一个系统软件,MapInfo提供了可以将其所有的功能用程序来驱动的方法,内置标准的二次开发工具——MapBasic。MapBasic不仅与大众化的Basic语法相一致,具有基本一致的常用函数集(计算、字符串处理、文件I/O、DLL调用等),而且利用MapBasic语言所提供的函数、过程和语句命令可以完成许多有关图形对象管理的复杂操作和运算。它的真正优势在于对MapInfo中的Table及其图形对象的管理所提供的特性和强大功能。采用面向对象及事件驱动编程
H)、集成二次开发能力
具有 OLE 和 OLE Automation 功能,可以方便地使用 Delphi 、 VB 、 VC 等多种开发工具,保证了新的应用程序与原有的应用界面保持一致,为日后的深层开发提供一个扩展空间。