当前位置:甜馍馍地理信息网 >> 地理信息系统GIS >> 组件式GIS >> 正文 >>  [阅读资讯:GIS二次开发各种方式对比和ActiveX控件基本知识]

GIS二次开发各种方式对比和ActiveX控件基本知识

[ 来源:互联网 | 时间:2007年10月18日 | 收藏本文 ] 【

大多数GIS 软件产商都提供商业化的GIS 组件,如ESRI 公司的MapObjects、MapInfo 公司的MapX 等,这些组件都具备GIS 的基本功能,开发人员可以基于通用软件开发工具尤其是可视化开发工具,如Delphi、Visual C++、Visual Basic、Power Builder 等为开发平台,进行二次开发。

由于传统GIS结构的封闭性,往往使得软件本身变得越来越庞大,不同系统的交互性差,系统的开发难度大。在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,用户可以根据实际需要选择所需控件,最大限度地降低了用户的经济负担。。组件化的GIS平台集中提供空间数据管理能力,并且能以灵活的方式与数据库系统连接。在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS开发工具的十分之一,甚至更少。这样,用户便能以较好的性能价格比获得或开发GIS应用系统。

利用GIS 工具软件生产厂家提供的建立在OCX 技术基础上的GIS 功能控件,如ESRI 的MapObjects、MapInfo 公司的MapX 等,在Delphi 等编程工具编制的应用程序中,直接将GIS 功能嵌入其中,实现地理信息系统的各种功能.

GIS 二次开发概述

地理信息系统根据其内容可分为两大基本类型:一是应用型地理信息系统,以某一专业、领域或工作为主要内容,包括专题地理信息系统和区域综合地理信息系统;二是工具型地理信息系统,也就是 GIS 工具软件包,如 ARC/INFO 等,具有空间数据输入、存储、处理、分析和输出等 GIS 基本功能。随着地理信息系统应用领域的扩展,应用型 GIS 的开发工作日显重要。如何针对不同的应用目标,高效地开发出既合乎需要又具有方便美观丰富的界面形式的地理信息系统,是 GIS 开发者非常关心的问题。

一 . GIS 开发模式

独立开发:

指不依赖于任何 GIS 工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++、Delphi 等,在一定的操作系统平台上编程实现。这种方式的好处在于无须依赖任何商业GIS 工具软件,减少了开发成本,但一方面对于大多数开发者来说,能力、时间、财力方面的限制使其开发出来的产品很难在功能上与商业化GIS 工具软件相比,而且在购买GIS 工具软件上省下的钱可能还抵不上开发者在开发过程中绞尽脑汁所花的代价。

宿主型二次开发:

指基于 GIS 平台软件上进行应用系统开发。大多数GIS 平台软件都提供了可供用户进行二次开发的脚本语言,如ESRI 的ArcView 提供了Avenue 语言,MapInfo 公司的MapInfo Professional提供了MapBasic 语言等等。用户可以利用这些脚本语言,以原GIS 软件为开发平台,开发出自己的针对不同应用对象的应用程序。这种方式省时省心,但进行二次开发的脚本语言,作为编程语言,功能极弱,用它们来开发应用程序仍然不尽如人意,并且所开发的系统不能脱离GIS 平台软件,是解释执行的,效率不高。

基于 GIS 组件的二次开发:

大多数 GIS 软件产商都提供商业化的GIS 组件,如ESRI 公司的MapObjects、MapInfo 公司的MapX 等,这些组件都具备GIS 的基本功能,开发人员可以基于通用软件开发工具尤其是可视化开发工具,如Delphi、Visual C++、Visual Basic、Power Builder 等为开发平台,进行二次开发。利用GIS 工具软件生产厂家提供的建立在OCX 技术基础上的GIS 功能控件,如ESRI 的MapObjects、MapInfo 公司的MapX 等,在Delphi 等编程工具编制的应用程序中,直接将GIS 功能嵌入其中,实现地理信息系统的各种功能

三种实现方式的分析与比较:

由于独立开发难度太大,单纯二次开发受 GIS 工具提供的编程语言的限制差强人意,因此结合GIS 工具软件与当今可视化开发语言的集成二次开发方式就成为GIS 应用开发的主流。它的优点是既可以充分利用GIS 工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,而且可靠性好、易于移植、便于维护。尤其是使用OCX 技术利用GIS 功能组件进行集成开发,更能表现出这些优势。

由于上述优点,集成二次开发正成为应用 GIS 开发的主流方向。这种方法唯一的缺点是前期投入比较大,需要同时购买GIS 工具软件和可视化编程软件,但“工欲善其事,必先利其器”,这种投资值得。

目前许多软件公司都开发了很多 ActiveX控件,合理选择和运用现成的控件,减少了开发者的编程工作量,使开发者避开某些应用的具体编程,直接调用控件,实现这些具体应用,不仅可以缩短程序开发周期,使编程过程更简洁,用户界面更友好,可以使程序更加灵活、简便。

二 .面向对象的开发 (OOP: Object Oriented Programming)

GIS二次开发及面向对象程序设计模式

1、面向对象程序设计模式

发明面向对象程序设计方法的主要出发点是弥补面向过程程序设计方法中的一些缺点。 OOP 把数据看作程序开发中的基本元素,并且不允许它们在系统中自由流动。它将数据和操作这些数据的函数紧密的连结在一起,并保护数据不会被外界的函数意外的改变。OOP 允许我们将问题分解为一系列实体——这些实体被称为对象(object),然后围绕这些实体建立数据和函数。面向对象程序设计中的数据和函数的组织结构如图4 所示。

GIS二次开发及什么是面向对象程序设计

2、什么是面向对象程序设计?

面向对象程序设计( OOP)技术汲取了结构化程序设计中好的思想,并将这些思想与一些新的、强大的理念相结合,从而给你的程序设计工作提供了一种全新的方法。通常,在面向对象的程序设计风格中,你会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数据和函数。同时,你会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量。当你定义了一个对象,你就隐含的创建了一个新的数据类型。

3、面向对象程序设计中的基本概念(可以参考相关书籍)

三 . 组件式GIS(ComGIS)

1、组件技术:

组件技术的兴起:

目前,在软件开发领域,一场新的革命正在悄悄兴起,这是由日趋成熟的组件技术引发的。几年以前,当微软公司首先使用 OLE 的时候,其初衷是为了增强软件的互操作性。然而在使用过程中,人们逐渐认识到这一技术背后的实质性内容和它在软件开发中所扮演的重要角色。组件技术以前所未有的方式提高了软件产业的生产效率,这一点已逐步成为软件开发人员的共识。传统的C/S 结构、群件、中间件等大型软件系统的构成形式,都将在组件的基础上重新构造。组件技术使近二十年来兴起的面向对象技术进入到成熟的实用化阶段。在组件技术的概念模式下,软件系统可以被视为相互协同工作的对象集合,其中每个对象都会提供特定的服务,发出特定的消息,并且以标准形式公布出来,以便其他对象了解和调用。组件间的接口通过一种与平台无关的语言IDL(InterfaceDefineLanguage)来定义,而且是二进制兼容的,使用者可以直接调用执行模块来获得对象提供的服务。早期的类库,提供的是原代码级的重用,只适用于比较小规模的开发形式;而组件则封装得更加彻底,更易于使用,并且不限于C++之类的语言,可以在各种开发语言和开发环境中使用。由于组件技术的出现,软件产业的形式也随之发生了很大的变化。大量组件生产商涌现出来,并推出各具特色的组件产品;软件集成商则利用适当的组件快速生产出用户需要的某些应用系统;大而全的通用产品逐步减少;很多相对较为专业,但用途广泛的软件,如GIS、语音识别系统等,都以组件的形式组装和扩散到一般的软件产品中。

COM 与DCOM:

COM 是组件式对象模型

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。

下一页
本文共 3 页,第  [1]  [2]  [3]  页

【推荐本文】 【打印本页】 【返回顶部
最新文章
推荐文章