1.3.2 GIS开发方式
早期的GIS开发和今天的GIS开发有很大的不同。早期的GIS开发一般是在UNIX、MS-DOS操作系统的文字操作界面环境下进行的,当时的GIS应用一般只是在具有空间数据输入、显示、分析和处理操作的计算机程序和简单软件系统下所进行的一些应用性的空间数据处理或专题地理制图的有序操作,由于用户是通过键入操作系统内部命令与外部命令的方式(MS-DOS将可执行程序视为自己的外部命令)与系统进行对话来完成地理信息的输入、显示与分析操作任务的,由于地理信息应用的复杂性,用户键入的每一条命令行往往必须附带一系列的参数,从而使系统的使用极其烦琐而复杂,中间操作过程中的任何失误都可能导致之前的工作前功尽弃。因此,如何针对具体的应用目标,高效地开发出既合乎需要又美观方便的应用型地理信息系统,就成为了众多二次开发者关注的焦点。目前GIS开发可以分为独立开发、宿主开发和集成开发三种方式。
1.独立开发
独立开发是指不依赖于任何GIS工具软件,利用专业程序设计语言开发应用模型,直接访问GIS软件的内部数据结构。从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++、Visual Basic、Delphi、Java、C#等,在一定的操作系统平台上编程实现。这种开发方式适用于开发商品化的GIS软件平台,好处在于无须依赖任何商业GIS工具软件,独立性强,降低了开发成本。用这种开发方式建立的系统,其各组成部分之间的联系最为紧密、综合程度和操作效率最高。但对于大多数开发者来说,开发难度大、开发周期长、投资大,同时开发出来的系统的功能与稳定性往往比现有的成熟GIS系统的功能和稳定性差,很难与商业化GIS工具软件相比,而且开发过程中的花费可能会远大于购买GIS工具软件所需的费用,因此并不适用于一般的GIS开发用户。在GIS应用发展的初期,由于GIS工具平台功能尚不完善,GIS应用开发多选择这种方式。
2.宿主开发
随着GIS工具平台的不断完善,一些GIS软件提供了可供用户进行二次开发的宏语言和专用开发语言。宏语言编程过程如下:按照预先调试好的对某空间数据集合的处理模式,将在系统下键入的处理命令按照先后顺序写成命令序列并作为文件保存,执行时调入并执行该文件中的命令,就可完成对该空间数据集的程序化操作,以提高处理效率。专用开发语言与宏命令语言最大的不同,在于它比宏命令语言低级,即不具有宏命令语言“宏”的含义,从而它更支持对系统底层功能的调用,有利于用户进行深入编程。但过于低级的开发语言必然增加了用户学习、掌握的难度。宿主开发指基于现有的成熟GIS平台上进行应用开发,完全借助于GIS工具软件提供的宏语言和专用开发语言进行应用系统开发,以原GIS工具软件为开发平台,开发出针对不同应用对象的应用程序。
目前市场上GIS工具软件大多提供了可供用户进行二次开发的语言,如Arc/Info提供了AML语言、ArcView提供了Avenue语言,MapInfo的MapInfo Professional提供了MapBasic语言等。AML是AroInfo Workstation一个不可或缺的重要组成部分。AML宏语言发出命令,要求其他程序进行相应的操作。AML属于解释型高级宏语言,其语法结构简单,解释执行,不需编译,执行和开发效率高;此外,还提供可视化菜单、对话框编辑工具。
MapBasic是用户在MapInfo平台上进行二次开发的专用开发语言。利用MapBasic编程,能够扩展MapInfo的功能,简化用户的重复操作,并能使MapInfo与其他应用软件集成。MapBasic是一种类Basic语言,它具有自己的语法规则,对于想要快速建立以地图空间分析为主要功能的企业用户来说,选用MapBasic来进行开发是一种最快也最简单的方式,因为MapBasic集成程度很高,并提供很多复杂的地图分析。通过集成方式,用户也可用诸如Visual Basic、C++、PowerBuilder和Delphi等语言编写应用软件。目前MapBasic已经被世界上数百个第三方厂商认可。
宿主开发方式简单易行,开发周期短,系统的稳定性和可靠性高,许多功能可以直接从原有的平台软件中引用过来,因而这种开发方式目前采用较多。但这种开发方式也有较多的缺点:移植性差;受开发平台的影响,不能脱离原有系统单独运行;受系统提供的开发语言的功能限制,二次开发的宏语言作为编程语言只能算是二流,功能一般较弱。GIS所提供的二次开发语言往往不能与专业程序设计语言相比,难以开发复杂的应用模型,用它们开发出来的系统结构松散,系统显得有些臃肿,功能和效率也较差。总之,用二次开发语言来开发应用程序仍然不尽如人意。
3.集成开发
集成开发是指利用专业的GIS工具软件,如Arc/Info、MapInfo Professional、ArcView等,实现GIS的基本功能,以通用软件开发工具尤其是可视化开发工具,如Visual C++、Visual Basic、Delphi、PowerBuilder等为开发平台,采用OLE/DDE或GIS控件两种方式,通过ADO与数据库系统连接,进行二者的集成开发。
(1)OLE/DDE方式
采用OLE Automation技术或利用DDE技术,用软件开发工具开发前台可执行应用程序,以OLE自动化方式或DDE方式启动GIS工具软件在后台执行,利用回调技术动态获取其返回信息,实现应用程序中的地理信息处理功能。
(2)GIS组件方式
组件(或称控件)是指那些具有某些特定功能,独立于应用程序,但能够容易地组装起来,以高效地创建应用程序的可重用软件“零件”。组件式GIS的基本思想是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS应用。控件如同一堆各式各样的积木,它们分别实现不同的功能(包括GIS功能和非GIS功能),根据需要把实现各种功能的“积木”搭建起来,就构成应用系统。
利用GIS工具软件生产厂家提供的建立在OCX技术基础上的GIS组件,在某种可视化编程工具如Visual C++、Visual Basic、Delphi、.NET上实现GIS的基本功能,直接将GIS功能嵌入其中,实现GIS的各种功能。由于GIS组件往往以ActiveX控件的方式提供,因此可以很简单地被通用的开发工具使用,在此基础上实现GIS应用系统的功能。这种建立在OCX技术基础上的GIS控件又称为组件式GIS。
GIS组件的代表作首推Mapobject和MapX等,其中Mapobject由全球最大的GIS厂商ESRI(美国环境研究所)推出,MapX由著名的桌面GIS厂商美国MapInfo公司推出。国内也涌现出一些优秀的组件,如中地公司的MapGIS组件和超图公司的GIS组件。
组件式开发作为MapGIS的重要开发手段,必须尽可能地在多个层次上对MapGIS的功能进行封装,供用户使用。MapGIS软件包含众多强大的功能,二次开发函数库提供了上千个函数,要把所有这些功能放在一个组件(控件)中几乎是不可能的,即使实现也会带来系统效率低下的问题。根据COMGIS设计应遵循应用领域的需求的规则、组件式软件的设计规则和MapGIS的体系结构,MapGIS组件分成数据管理组件、图形显示与编辑组件、工程管理组件、图库管理组件、图例管理组件、图形裁剪组件、图像分析管理组件、投影转换组件、网络分析管理组件、输出排版组件、DTM分析组件、数据转换组件、空间分析组件等13大类。MapGIS组件不依赖于某一种特定的开发语言,可以直接嵌入到某些通用的开发环境(如Visual Basic或Delphi)中进行应用开发,实现了GIS功能。而其他的专业模型则可以使用这些通用开发环境来实现,也可以插入其他的专业性模型的分析控件,各个模块之间既可相互关联共同处理数据,又可在维护修改时独立操作而互不影响。因此,利用MapGIS组件进行GIS应用系统的开发可以实现高效、无缝的系统集成。
由于独立开发难度大,宿主开发受GIS工具提供的编程语言的限制而差强人意,因此,结合GIS工具软件与当今可视化开发语言的集成二次开发方式就成为GIS应用开发的主流。它的优点是:既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其他可视化开发语言具有的高效、方便等编程优点,集二者之所长,不仅能大大提高应用系统的开发效率,而且使用可视化软件开发工具开发出来的应用程序具有更好的外观效果,更强大的数据库功能,且可靠性好、易于移植、便于维护。尤其是使用ActiveX技术,利用GIS功能组件进行集成开发,更能表现出这些优势。
应用型地理信息系统的软件开发环境,对于中小型应用一般选择MapInfo+MapBasic+SQL Server,对于大型应用一般选择ArcGIS+Oracle9i+编程语言及MapGIS+Oracle9i+编程语言,对于仅用到电子地图功能(如出租车定位系统)的应用可选用组件GIS,常用组件有MapInfo的MapX和ESRI的ArcObject等。
目前许多软件公司都开发了很多ActiveX控件,合理选择和运用现成的控件,将减少开发者的编程工作量,使开发者避开某些应用的具体编程。直接调用控件来实现这些具体应用,不仅可以缩短程序开发周期,使编程过程更简捷,而且用户界面更友好,可以使程序更加灵活、简便。