工欲善其事,必先利其器。 孔子 第十六章 地理信息系统软件工程技术 导读:本章介绍了软件工程的基本概念,软件开发活动,过程模型以及两种重要的开发方法:结构化方法和面向对象的方法。在GIS开发过程中应用软件工程技术,可以提高软件开发效率和质量。本章讲述了软件工程技术在GIS系统开发中的几个应用方面: GIS软件构件和构架 需求分析 数据管理设计 用户界面设计 设计模式在GIS软件开发中的应用 应用配置管理来实现空间过程支持 这些方面涉及了GIS开发过程中不同的阶段以及不同的层次,有些方法之间是互斥的,如UML和Code方法,但是软件工程技术最重要的是实用,开发者可以根据具体的情况选用不同的技术。 1.软件工程简介 1.1基本概念 计算机软件工程是一类求解的工程。它应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法,创建软件以达到提高质量,降低成本的目的。其中,计算机科学、数学应用于构造模型与算法,工程科学用于制定规范、设计范型,评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。从学科角度来看,软件工程是一门指导计算机软件开发和维护的工程学科。 软件工程的提出,是为了解决60年代出现的软件危机,当时在大型软件开发中存在着价格高,开发不容易控制,软件开发工作量估计困难,软件质量低,项目失败率高等许多问题,给软件行业带来了巨大的冲击。软件工程的研究,提出了一系列理论、原则、方法以及工具,试图解决软件危机。 和其它工程一样,软件工程有其目标、活动和原则,其框架可以概括为图16-1所表示的内容。  图16-1:软件工程框架[王立福] 软件工程的目标可以概括为“生产具有正确性、可用性以及开销合宜的产品”,其活动包括需求、设计、实现、确认以及支持等活动,围绕工程设计、支持以及管理,有以下的四条基本原则: 1)选取适宜的开发模型,可以认识需求易变性,并加以控制,以保证软件产品满足用户的需求; 2)采用合适的设计方法,通常要考虑实现软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征; 3)提供高质量的工程支持,在软件工程中,软件工具与环境对软件过程的支持颇为重要; 4)重视开发过程的管理,软件工程的管理,直接影响可用资源的有效利用、生产满足目标的软件产品,提高软件组织的生产能力等问题。只有当软件过程予以有效管理时,才能实现有效的软件工程。 1.2软件工程活动 软件工程活动包括需求、设计、实现、确认及支持等,它们对应于软件开发活动的不同阶段,一般来说,软件开发都要经历从分析设计到实现确认的过程。在每个阶段按照相应的规范进行工作,并得到该阶段的成果,是保证整个开发活动成功的关键。 1.2.1需求分析 需求分析阶段处于软件开发的前期,其基本活动是准确定义未来系统的目标,确定为了满足用户的需求必须做什么。需求分析又划分为两个阶段,即需求获取和需求规约,前者是用自然语言清楚地描述用户的要求,而需求规约的目的是消除获取需求的二义性和不一致性。 在软件生命周期中,一个错误发现得越晚,修复错误的费用也越高,所以,高质量的需求工程是软件项目得以正确、高效完成的前提。对于系统分析人员,建立需求面临着以下三个方面的困难: 1)问题空间的理解,系统开发人员通常是计算机专业人员,难以深入理解各种业务系统所要解决的问题空间; 2)人与人之间的通信,对于系统分析人员而言,通信主要包括同用户的通信以及同事之间的通信,由于自然语言的二义性,会给准确刻画需求造成障碍; 3)需求的不断变化,造成需求变化的原因很多,包括技术,用户方,市场等等,作为分析人员,必须采用一些策略以适应变化。 面向对象的分析方法被认为是解决上述困难较好的技术,但是完整、准确的刻划问题空间始终是分析人员所面临的挑战。 1.2.2系统设计 一般来说,需求分析阶段的主要任务是确定系统“做什么”,而设计阶段则要解决“怎么做”的问题。通常*设计阶段又划分为总体设计和详细设计,总体设计确定系统的总体结构框架;而详细设计要具体地描述如何具体地实现系统,通常可以依据详细设计的结果进行编码。详细设计包括:详细的算法;数据表示和数据结构;实施的功能和使用数据之间的关系。详细设计过程中,采用了一些工具,以便对数据、算法等进行描述,包括流程图,PAD(Problem Analysis Diagram),盒图(N-S图),伪码等等。 1.2.3实现阶段 在软件实现阶段,要将设计的结果变换成程序设计语言编写的程序。在实现阶段,首先要确定程序设计语言,其影响因素包括:开发人员对语言的熟悉程度,语言的可移植性,编译程序的效率,编译工具的支持等等。目前,C++语言是普遍被采用的构造系统软件的编程语言,而Java则更多地应用于编写网络程序。 无论采用哪一种编程语言,都要求编写高质量的源程序代码,程序质量通常包含正确性、可读性、可移植性、程序效率等指标。考虑到系统的维护和演化,提高源程序的可读性是实现阶段的一个重要目标,其途径包括添加注释,规范书写格式,确定标识符命名原则*,采用结构化的程序设计(不用或减少使用goto语句)等等。 1.2.4确认活动 尽管确认活动贯穿于软件开发活动的始终,但是系统完成后的软件测试是主要的确认活动。软件测试是指按照特定规程,发现软件错误的过程。软件测试的技术大体上可以分为两类,即白盒测试技术和黑盒测试技术,前者依据的是程序逻辑结构,后者依据的是软件行为描述。根据测试的步骤,测试活动又可以划分为单元测试,集成测试,确认测试和系统测试,其中确认测试是为了检验软件的功能和性能是否与用户需求一致,而系统测试主要是测试软件同硬件、其它支持软件、数据等结合在一起,在实际的运行情况下,同用户需求的匹配程度。 1.2.5软件维护 当软件开发完成并交付用户使用后,就进入运行/维护阶段,在运行/维护阶段仍需要对软件进行修改,称为软件维护,软件维护活动可以分为以下几类: 1)改正性维护,其目的是为了纠正运行阶段发现的软件错误,性能上的缺陷以及排除实施中的误用。 2)适应性维护,随着计算机的发展,软件的外部环境或者数据环境发生变化,为了使之适应这种变化而对软件的修改称为适应性维护。 3)完善性维护,在使用过程中,用户往往会对软件提出新的功能和性能需求,为了满足这些需求,需要修改或再开发软件,称为完善性维护。 4)预防性维护,预防性维护的目的是为了提高软件的可维护性,可靠性等,为进一步的软件维护打下良好的基础。预防性维护一般由开发单位主动进行。 1.3结构化方法和面向对象方法 在进行系统分析设计的过程中,逐渐形成了一些系统化的方法,以便于更好地描述问题域及进行系统设计,目前经常采用的两种方法是结构化方法和面向对象的方法。 1.3.1结构化分析和设计 结构化的方法基于模块化的思想,采用“自顶向下,逐步求精”的技术对系统进行划分,分解和抽象是它的两个基本手段。 结构化分析将软件视为一个数据变换装置,接受各种输入,通过变换产生输出。数据流图(DFD,Data-Flow Diagram)是一种描述数据变换的工具,是结构化分析普遍采用的表示手段。数据流图由五个部分组成,即:加工,数据流,数据存储,数据源和数据潭,其中数据流表示数据和数据的流向,而加工是对数据进行处理的单元(图16-2)。除了数据流图以外,还需要数据字典和说明分别对数据流和加工进行描述。  图16-2:一个典型的数据流图:飞机订票 结构化的系统总体设计主要是确定模块结构图,以描述功能模块之间的关系,一些主要的表示形式有:层次图,HIPO(层次+输入/处理/输出)图,结构图等等。结构化的设计定义了一些原则和方法,可以将数据流图“映射”成为模块结构图。 1.3.2面向对象的分析和设计 面向对象的方法学认为,客观世界是由许多各种各样的类组成的,每种对象都有各自的内部状态和运动规律,对象之间的作用和联系就构成了各种不同的系统。面向对象方法学所追求的是使解决问题的方法空间与客观世界的问题空间结构达成一致。由于面向对象的技术在理解问题空间、控制需求变化、消除从分析设计到编码的“鸿沟”、支持软件复用等各个方面优于其它方法,使之称为目前软件开发的主流方法。 目前已经提出了多种不同的面向对象的分析、设计方法,如Cord-Yourdon方法,Booch方法,OMT方法,Jacobson的use case驱动方法等等,这些方法在侧重点、符号表示和实施策略上有所不同,但是其基本的概念是一致的,这些概念有:对象,类,属性,服务,消息,继承,封装等等。 近年来,综合Booch方法、OMT方法以及use case的UML(Unified modeling language,统一建模语言)逐渐成为主要的面向对象方法。图16-3给出了用UML表达几何体的例子*。  图16-3:用UML表达的线几何体类以及和其它类的关系(OpenGIS Consortium)。 1.4开发过程模型 软件开发模型是软件开发全部过程、活动和任务的结构框架。软件开发模型能够清晰、直观的表达软件开发过程,明确规定要完成的主要活动和任务,可以作为软件项目工作的基础。 随着软件工程了实践,相继提出了一系列开发模型,如下: 1.4.1瀑布模型 在瀑布模型中,将各项活动规定为依照固定顺序连接的若干阶段工作,形如瀑布流水(图16-4),瀑布模型的特征是:每一阶段接受上一阶段的工作结果作为输入;其工作输出传入下一阶段;每一阶段工作都要进行评审,得到确认后,才能继续下阶段工作。瀑布模型较好地支持结构化软件开发,但是缺乏灵活性,无法通过软件开发活动澄清本来不够确切的需求。  图16-4:瀑布模型 1.4.2演化模型 演化模型主要针对事先不能完整定义需求的软件开发。用户可以先给出核心需求,当开发人员将核心需求实现后,用户提出反馈意见,以支持系统的最终设计和实现。 1.4.3螺旋模型 螺旋模型是在瀑布模型以及演化模型的基础上,加入风险分析所建立的模型。在螺旋模型每一次演化的过程中,都经历以下四个方面的活动: 1)制定计划——确定软件目标,选定实施方案,弄清项目开发的限制条件。 2)风险分析——分析所选方案,考虑如何识别和消除风险。 3)实施工程——实施软件开发。 4)客户评估——评价开发工作,提出修正建议。 每一次演化都开发出更为完善的一个新的软件版本,形成了螺旋模型的一圈。螺旋模型借助于原型,获取用户需求,进行软件开发的风险分析,对于大型软件的开发,是颇为实际的方法。 1.4.4喷泉模型 喷泉模型体现了软件开发过程中所固有的迭代和无间隙的特征(图16-5)。喷泉模型表明了软件刻画活动需要多次重复。例如,在编码之前,再次进行分析和设计,并添加有关功能,使系统得以演化。同时,该模型还表明活动之间没有明显的间隙,例如在分析和设计之间没有明确的界限。 在面向对象技术中,由于对象概念的引入,使分析、设计、实现之间的表达连贯而一致,所以,喷泉模型主要用于支持面向对象开发过程。  图16-5:喷泉模型 目前,随着面向对象技术的发展和UML建模语言的成熟,统一软件开发过程(USDP,Unified Software Development Process)被提出以指导软件开发,它是一个用例(use case)驱动的、体系结构为中心的、增量迭代的开发过程模型,适用于利用面向对象技术进行软件开发。 2.GIS领域的体系结构和构件 按照应用目的,地理信息系统可以分为区域地理信息系统、专题地理信息系统以及地理信息系统工具,它们共同组成了GIS领域(Domain)。所谓领域,是指共享某种功能性(Functionality)的系统或应用程序的集合,换言之,领域表现了一组应用系统共性的方面。对于地理信息系统而言,其共享的功能就是对空间数据输入、管理、分析和表现,而这恰好是地理信息系统工具所提供的功能(图16-6)。  图16-6:GIS领域 与具体应用领域相对应,对于领域,可以实施领域工程,得到领域模型,并建立领域特定的软件体系结构(DSSA, Domain-Specific Software Architecture)。DSSA是能够适应领域中多个系统的需求的一个高层次的设计,在开发具体应用系统时,可以利用DSSA将领域构件(Component)连接和组织起来,以支持软件复用,提高软件开发的效率和质量。 对于地理信息系统,实施领域工程,得到DSSA,不仅可以指导具体应用系统的开发,而且DSSA可以直接作为地理信息系统工具的软件体系结构。 地理信息系统的核心功能包括空间数据的输入、管理、分析以及表现,并且这些功能形成了一个比较完全的数据处理流程,此外考虑到与遥感以及全球定位系统的结合,形成如下的系统结构(图16-7)。该视图更多地体现了地理信息系统的业务逻辑,为了适用于具体的应用系统,该结构可以被特化——类似于面向对象中,从父类派生一个子类——形成更加具体的体系结构。 依赖于DSSA,可以将构件组装起来,形成具体的应用系统,基于构件的技术已经成为软件开发技术的主流,它从面向对象技术发展而来,是开发高效、低成本程序的重要实现途径。 为了能够通过组装以构造系统,构件必须能够互相合作,即具有互操作性,这是通过定义构件的接口规范来实现的。对于构件而言,除了互操作性之外,还要支持分布式的网络计算,即构件的互操作可以是基于异种平台的,其实现需要分布计算平台(DCP-Distributed Computing Paltform)的支持。  图16-7:GIS领域体系结构:一个工作流视图 目前存在着多种构件技术标准,其中OMG(对象管理组织)的CORBA(公共请求对象代理体系结构-Common object request broker architecture)和Microsoft的OLE/COM/DCOM技术是其中两个主要的、被广泛采用的标准。 COBRA定义了一个带有开放软总线的分布式结构,在这一结构中,来自不同厂商、运行于不同操作系统上的对象,能够进行互操作。CORBA对象的互相通信通过对象请求代理(ORB,Object Request Broker)为中介,可以在多种流行网络通信协议上实现。接口描述语言(IDL,Interface Description Language)用于描述对象接口,它与语言无关,使得所有CORBA对象以一致的方式被描述。 Microsoft的DCOM(分布式对象构件模型,Distributed Component Object Model)技术是对原有的COM技术的扩展,以支持在网络上不同计算机的对象之间的通信。COM定义了接口的二进制标准,包括接口交互、管理对象及其资源等等。而DCOM通过增加网络协议的支持,使得对象可以通过网络互操作。DCOM技术很好的支持复用,位置独立,可扩展等,并且其执行性能较好,目前被基于Windows平台的软件开发商所广泛支持。  图16-8:基于DCP的GIS体系结构和构件:一个实现视图[OpenGIS Consortium] 对于GIS软件开发,构件技术带来的除了实现复用、支持分布的互操作外,还具有以下两个方面的优势*: 1)数据是GIS中最为重要的部分,目前各个软件数据格式不同,不便于共享和保护用户已有投资,构件技术通过互操作的支持可以实现数据共享; 2)地理信息系统功能的涵盖范围非常广泛,包括图形操作、图像处理、地图制图、数据库管理、投影变换等等,它们涉及不同的专业领域。利用构件技术,可以将不同专业领域的具体功能实现为构件,组装形成软件系统,避免了需要同时学习多个专业领域的状况。 图16-8给出了一个GIS体系结构以及构件的概念模型,在该模型中,体系结构具有多个“插槽”,而构件是“可插入(Plugable)”的,这种类似于计算机主板的结构,通过DCP的支持,依照图16-7中所描述的工作流结构,可以很容易的实现跨平台的地理信息系统软件。 3.GIS需求分析 3.1 GIS需求获取 需求获取是软件开发活动的第一步,获得正确的需求描述是成功软件的前提。一般而言,用户需求分为两类,功能性需求和非功能性需求,前者定义了系统做什么,包括输入、输出以及其间的转换;后者定义了系统工作时的特性,如效率、可靠性、安全性、可维护性、可移植性等等要求。具体的需求获取内容包括: 1)物理环境,物理设备的位置以及其分布的集中程度; 2)接口,与其它软件系统的接口以及对数据格式的要求; 3)用户或人的因素,包括系统用户熟练程度,使用系统需要接受的训练; 4)功能,系统要完成什么,性能如何; 5)文档,需要哪些文档以及其针对的读者; 6)数据,数据格式、数据精度、数据量、接收和发送数据的频率; 7)资源,使用系统需要的设备,开发需要的人力资源、计算机资源、时间表; 8)安全性,对访问信息的控制程度,数据的备份等; 9)质量保证,对系统的可靠性要求,平均系统出错时间,可移植性,可维护性等。 在地理信息系统需求获取过程中,其内容是基本一致的,只是在数据、组织等方面要进行额外的考虑。 1)数据 数据在一个GIS应用系统中,占有举足轻重的位置。进行需求获取时,与数据有关的因素包括, (1.1)数据的输出样式:包括屏幕显示、Web发布、出版、工程图等; (1.2)输出数据的内容和要求:输出数据要包括哪些内容,数据的精度,比例尺等; (1.3)数据的分布性:数据是集中管理还是分布管理; (1.4)现有的纸质地图:现有的纸质地图的内容,其比例尺、时效性、是否涉及保密; (1.5)现有的电子数据:数据形式(栅格/矢量/属性数据库)、数据格式、完整性、精度、投影方式、比例尺等因素。 (1.6)数据录入:数据量大小,输入设备,包括数字化仪、扫描仪,软件的支持程度,进行数据录入的人员数目,能否在预定时间内完成数据录入; (1.7)数据购买:数据量以及价格; 2)人员 因为应用地理信息系统一般是针对专业领域的,在进行需求获取时不仅要考虑一般用户,而且要听取领域专家的意见,将他们的理论、经验模型化,并在系统中完成。 3)组织 现有的组织机构,有关部门的职责,业务流程,GIS如何在其业务流程中体现以及因为应用GIS所引起的可能的组织机构的变化。 进行需求获取的方式是多种多样的,包括面谈、电话访谈、参观、问卷、获取领域相关资料等。在地理信息系统开发中,由于GIS的概念、功能等还没有被用户深入理解并接受,采用GIS专题报告可以很好地激励用户提出需求。如果时间和资金允许,开发原型系统也可以更好地挖掘用户需求*。 3.2 GIS需求规约 在需求获取阶段,得到了用自然语言描述的用户需求,但是其中存在着不一致性和二义性,这些问题要通过需求规约解决。目前有许多方法用于支持需求规约,如功能分解方法,数据流方法,信息模型方法(实体关系模型),面向对象方法。每种方法都有相应的概念体系、符号表现和工具支持。 需求规约的结果是形式化或半形式化的,系统的需求报告,它必须完整地刻画问题域,能够适应需求变化,此外,它必须满足用户、分析人员、设计开发人员进行交流的需要,换言之,需求需求报告中的符号、描述,对于各类相关人员,其意义是一致的。 正如一再强调的,面向对象的分析方法很好地解决了问题空间理解、需求易变性、交流等方面的问题。将通用的面向对象分析方法应用于GIS,固然可以描述系统需求,但是由于GIS更加关注于空间对象和空间模型,在GIS中要经常处理一些特定的空间对象类以及特定的空间关系(拓扑关系、方位关系、度量关系等),对基本的面向对象方法进行特化扩展,采用特定的符号来表示这些类以及关系,可以使需求报告的表述更加简捷,便于信息交流。 对Coad/Yourdon方法的扩展——GeoOOA(部分,George K?sters) GeoOOA区分了基本类以及四个地理类类型,下面是GeoOOA的类符号:  图16-9:基本类和GeoOOA类 一些服务包括读写操作以及几何体标准服务赋予了GeoOOA类,如计算面积,长度,关系检测等等。 地理类形成层次化的一般——特殊关系,栅格类为区域类的特例,而区域,线,点是抽象地理类的特化。 GeoOOA同时提供了拓扑的整体——部分结构原语,它们只是适用于空间对象,整体部分结构又可以分为:覆盖(Covering),包含(Containing),分割(Partition)。 覆盖:整体对象和部分对象属于相同的空间类,整体几何体被部分几何体的联合所覆盖; 包含:整体几何体包含部分几何体; 分割:是一种包含结构,但是有两个特性,即,整体几何体和部分几何体属于同一个类,并且部分几何体形成对整体的分割。 三种原语的图形表示如下:  1)覆盖 2)包含 3)分割 图16-10:GeoOOA 中的整体部分关系 举一个例子说明这三种整体——部分关系,在一个省级行政区(区域类)内,有许多电视台站(点类),每个电视台站有其覆盖范围(区域类),省又分为许多县级区划(区域类),由于台站的覆盖范围之间存在重合,并且一般而言,所有台站的覆盖范围要比省的范围大,所以省行政区和覆盖范围形成覆盖整体——部分关系,而省行政区与台站为包含整体——部分关系,省行政区和县行政区是分割整体——部分关系。 采用GeoOOA,用图形就直接表述了空间关系,减少了需求报告中文本规约的数量。 4.数据管理设计 数据管理部分设计的目的是确定在数据管理系统中存储和检索数据的基本结构,其原则是要隔离数据管理方案的影响,不管该方案是普通文件、关系数据库、面向对象数据库或者是其它方式的。 目前,主要有三种主要的数据管理方法,即文件、关系和面向对象。 1)普通文件管理:普通文件管理提供基本的文件处理和分类能力; 2)关系型数据库管理系统(RDBMS):关系型数据库管理系统建立在关系理论的基础上,采用多个表来管理数据,每个表的结构遵循一系列“范式”进行规范化,以减少数据冗余。 3)面向对象的数据库管理系统:面向对象的数据库是一种正在成熟的技术,它通过增加抽象数据类型和继承特性以及一些用来创建和操作类和对象服务,实现对象的持续存储。 不论在分析阶段采用何种方法,已经实现是采用OOPL还是非OOP,都可以选择上述任意的一种方案实现数据的管理。 在地理信息系统软件中,需要管理的数据主要包括:空间几何体数据、时间数据,结构化的非空间属性数据以及非结构化的描述数据。例如,对于地籍管理系统中的地块, 空间几何体数据:地块界点的坐标; 时间数据:地块存在的时段; 非空间属性数据:地块的权属,地价等等; 非结构化的描述数据:描述地块所需要的图像、声音数据等等。 为了实现对这些数据的管理,通常的方案包括: 4.1全部采用文件管理 将所有的数据都存放于一个或者多个文件中,包括结构化的属性数据。采用文件管理数据的优点是灵活,即每个软件厂商可以任意定义自己的文件格式,管理各种数据,这一点在存储需要加密的数据以及非结构化的、不定长的几何体坐标记录时是有帮助的。文件管理的缺点也是显而易见的,就是需要由开发者实现属性数据的更新、查询、检索等操作,而这些,都可以利用关系数据库完成,换言之,利用文件管理增加了属性数据管理的开发量,并且也不利于数据共享。目前,许多GIS软件采用文本格式文件进行数据存储,其目的是为了实现数据的转入和转出,与其它应用系统交换数据。 4.2文件结合关系数据库管理 这是目前大多数GIS软件所采用的数据管理方案。考虑到空间数据是非结构化的、不定长的,而且施加于空间数据的操作需要GIS软件实现,这样就可以利用文件存储空间数据,而借助于已有的关系数据库管理系统(RDBMS)管理属性数据。采用这种管理方式: 1)空间数据:通过文件进行管理; 2)时间数据:是结构化的,可以利用数据库进行管理; 3)非空间属性数据:利用数据库进行管理; 4)非结构化的描述数据:由于描述数据,不论是文本、图像,还是声音、录象,一般都对应于一个文件,这样可以简单地在关系数据库中记录其文件路径,其优点是关系数据库数据量小,缺点是文件路径常常会因为文件的删除、移动操作而变得不可靠。如果关系数据库支持二进制数据块字段,也可以利用它来管理文本、图像甚至声音、录象文件。 由于空间几何体坐标数据和属性数据是分开存储管理的,需要定义它们之间的对应关系。通常的解决方案是在文件中,每个地物都有一个唯一标识码(地物ID),而在关系数据表结构中,也有一个标识码属性,这样每条记录可以通过该标识码确定与对应地物的连接关系(图16-11)。 采用该管理方式的缺点在于经常进行根据地物ID的查找(既包括从给定地地物查找其对应地记录,又包括根据给定地记录检索相应的地物),使查询、模型运算等一些操作的速度变慢。  (a)通过文件管理空间数据 (b)通过关系数据库管理属性数据 图16-11:同时使用文件和关系数据库管理GIS数据, 其中利用地物ID建立记录之间的连接关系 4.3全部采用关系数据库管理 在这种管理方式中,不定长的空间几何体坐标数据以二进制数据块的形式被关系数据库管理,换言之,坐标数据被集成到RDBMS中,形成空间数据库,其结构如图16-12。  图16-12:集成化的GIS数据管理 可以认为一个地物对应于数据表中的一条记录,这样它带来的最直接的好处是避免了对“连接关系”的查找。目前,关系数据库不论是理论还是工具,都已经成熟,它们提供了一致的访问接口(SQL)以操作分布的海量数据,并且支持多用户并发访问,安全性控制和一致性检查。这些正是构造企业级的地理信息系统所需要的,此外,通用的访问接口也便于实现数据共享。 采用全关系GIS数据管理,由于几何体坐标数据不定长,会造成存储效率低下,此外,现有的SQL并不支持空间数据检索,需要软件厂商自行开发空间数据访问接口,如果要支持空间数据共享,则要对SQL进行扩展。 4.4采用面向对象数据库(OO-DBMS)管理 如果应用对象数据库管理GIS数据,则可以扩充对象数据库中的数据类型以支持空间数据,包括点、线、多边形等几何体,并且允许定义对于这些几何体的基本操作,包括计算距离、检测空间关系,甚至稍微复杂的运算,如缓冲区计算、叠加复合模型等,也可以由对象数据库管理系统“无缝”地支持。 这样,通过对象数据库管理系统,提供了对于各种数据的一致的访问接口以及部分空间模型服务,不仅实现了数据共享,而且空间模型服务也可以共享,使GIS软件开发可以将重点放在数据表现以及复杂的专业模型上(图16-13)。 不过,目前对象数据库管理系统远未成熟,许多的技术问题仍需要进一步的研究。例如,由于支持用户自定义功能,可能会引发对系统的恶意入侵。查询优化也是对象数据库所面临的一个难题,假定要进行查询操作,得到所有有铁路通过并且人口大于10万的县,很明显,得到人口大于10万的县所需要的计算时间要远远小于得到所有铁路通过的县的时间,系统必须了解这一点,在执行查询时,先得到人口大于10万的县,然后再在该集合中依据空间关系进行进一步的查找——而不考虑用户的实际输入次序。该处理过程称为查询优化(Optimize),它使得优化后的计算时间减少。对于这种简单的情况,即结构化查询和空间运算的消耗时间,容易比较判断,但是如果查询语句中包括多个空间运算函数,那么其优化将变得十分困难。  图16-13:采用OO-DBMS进行GIS数据管理 5.界面设计 5.1界面设计原则 在设计阶段,除了设计算法,数据结构等内容外,一个很重要的部分就是系统界面的设计,系统界面是人机交互的接口,包括人如何命令系统以及系统如何向用户提交信息。一个设计良好的用户界面使得用户更容易掌握系统,从而增加用户对系统的接受程度。此外,系统用户界面直接影响了用户在使用系统时的情绪,下面的一些情形无疑会使用户感到厌倦和茫然: 1)过于花哨的界面,使用户难以理解其具体含义,不知从何入手; 2)摸棱两可的提示; 3)长时间(超过十秒)的反应; 4)额外的操作(用户本意是只做这件事情,但是系统除了完成这件事之外,还做了另外的事情)。 与之相反,一个成功的用户界面必然是以用户为中心的,集成的和互动的。 尽管目前图形用户界面(GUI,Graphical User Interface)已经被广泛的采用,并且有很多界面设计工具的支持,但是,由于上述的这些原因,在系统开发过程中应该将界面设计放在相当重要的位置上。 设计用户界面的策略由以下几点构成[Peter Coad,Edward Yourdon]: 1)对人分类 通过仔细研究使用系统的人,对其进行分类,分类的原则包括按照技能层次(初学者,高级人员…),按照组织层次(管理人员,一般员工…),按照身份(职员,顾客…)。通过分类,弄清每类人员使用系统的目的,进而可以确定其相应的人机交互操作。 2)描述人和他们的任务脚本 对人员分类之后,确定每一类人员的特征,包括使用系统的目的,特征(年龄、教育水平、限制等),对系统的期望(必须/想要,喜欢/不喜欢/有偏见),熟练程度,使用系统的任务脚本(scenario)。依据这些特征,可以指导系统的人机交互设计。 3)设计命令层 命令层的设计包括三个方面的工作,即研究现有的用户交互活动的寓意和准则;建立一个初始化的命令层;细化命令层。 在图形用户界面的设计过程中,已经形成了一些形式的或非形式的准则和寓意,如菜单排列(例如,在几乎所有的MS-Windows应用系统中,前三个一级菜单项目总是“文件”、“编辑”、“视图”,而最后的两个则是“窗口”,“帮助”),一些操作(例如,打开文件、保存文件、打印)的图形隐喻等等。遵循这些准则,便于用户更快地熟悉系统。 在细化命令层时,需要考虑排列,整体-部分组合,宽度与深度的对比,最小操作步骤等问题。一个层次太“深”命令项目会让用户难以发现,而太多命令项目则使用户难以掌握。 4)设计详细的交互 人机交互的设计有若干准则,包括: 一致性 采用一致术语、一致的步骤和一致的活动; 操作步骤少 使敲击键盘和点按鼠标的次数减到最少; 不要“哑播放” 长时间的操作需要告诉用户进展的状况; 闭包 用一些小步骤引出定义良好的活动,用户应该感觉到他们的活动中闭包的意义; Undo 人难免做错事,通常在这种情况下系统应该支持恢复原状,或者至少部分的支持。 减少人脑的记忆负担 不应该要求人从一个窗口记忆或者写下一些信息然后在另一个窗口中使用; 学习的时间和效果 为更多的高级特性提供联机参考信息; 趣味和吸引力 人们通常喜欢使用那些感到有趣的软件。 5)继续做原型 通过做原型系统,可以直接的了解用户对设计界面的反应,然后进行改善,使之臻于完美。 6)设计用户界面类 在完成上面的工作后,就可以着手设计用户界面类。在开发GUI程序时,通常已经提供了一系列通用界面类,如窗口、按钮、菜单等等,只要从这些类派生特定的子类即可。 7)根据图形用户界面进行设计 目前主要的GUI包括Windows,Macintosh,X-Windows,Motif等,基于它们开发应用软件可以使界面的设计简单化,但是事先要清楚其特性,如事件处理方式等等。 5.2 GIS界面设计中的要素 对于成功的GIS软件,好的界面是不可或缺的,在进行设计时,同样要遵循上述的原则和步骤。对于地理信息系统软件而言,其界面需要允许用户选择并检索相应的空间数据,操作这些数据,并且表现分析的结果。对于基本的数据检索,操作和表现,与普通的软件是一致的,在GIS中要考虑的是以下几个要素: 5.2.1数据选择 选择数据采用的过滤器可能包括空间的和非空间的属性,或者是两者的结合,例如(针对一个县级行政区划数据): 检索所有人口大于10万的县; 检索所有有铁路通过的县; 检索所有有铁路通过并且人口大于10万的县; 用户可以通过输入一个命令语句,通过菜单选择,填充一个表单(Form),或者通过直接的操作——例如使用鼠标来选择数据。利用命令语句需要了解数据表的结构,并且需要对传统的SQL进行扩展以支持空间过滤。直接操作选择需要数据显示在屏幕上,它和SQL查询的组合通常要间接的完成。当一些地物显示在相近的位置时,直接操作选择会有二义性。为了方便用户操作,要提供一些额外的操作,如漫游、放大显示、缩小显示等。 5.2.2数据表现 一种好的数据表现形式有利于用户直接操作以进行进一步的分析,与标准的关系数据库相比,在地理信息系统中,需要更多地考虑其图形显示。图形表现的相似性或者差异可以表达给用户这些地物对象具有某种程度相似性,一些图形显示的变量有: 多边形轮廓:颜色,灰度,黑白;线型; 多边形填充:颜色,灰度,黑白;填充模式; 线:颜色,灰度,黑白;线型; 符号:颜色,灰度,黑白;形状;大小等等。 对于图形显示而言,需要进行仔细设计,以正确地表达地物对象的含义,并被用户理解。 5.2.3数据处理 数据处理由一系列空间的和非空间的操作组成,一个设计良好的界面使实现这些操作更加容易。与标准的关系数据库相比,GIS所管理的数据更具有面向对象的特征,所以一个面向对象界面有利于用户与系统的交互操作,完成数据处理。在GIS软件中,面向对象的界面设计包括将地理实体,如点、线、多边形以及一些操作以象形的符号表现出来,而用户可以通过简单的点击、拖放等操作实现相应的数据处理。 下面列出了一些具有图形寓意的操作,很容易将图形表现与对应的操作联系起来。 创建:根据给定的图形实体以及相应的属性,创建一个空间对象; 删除:删除一个选定的空间对象; 集合:根据选择的对象形成一个集合; 更新:只显示最后一次操作的结果; 叠合:相当于集合操作中的并运算; 求交:相当于集合操作中的交运算; 求差:相当于集合操作中的差运算; 转换:对选择的地物进行比例、移动、镜象、仿射变换等操作; 检查点:设置检查点,当对后面工作不满意时,可以回退到该点; 回送:返回上一个检查点的状态; 提交:将所有的处理结果传给数据库,并更新之。 5.2.4 SQL 传统的SQL并不能处理空间查询,这是由于关系数据库技术的弱点造成的,对于GIS而言,需要对SQL进行扩展。目前正在制定的SQL/MM,主要应用于多媒体数据,其中包含了全面的GIS操作集合。 采用新的SQL标准,带来了概念上的改变,对于传统的SQL,要实现空间操作,需要将SQL命令嵌入一种编程语言中,如C语言;而新的SQL允许用户定义自己的操作,并嵌入到SQL命令中。 这种扩展的SQL实际上是增加了面向对象的支持,在地理信息系统中,称为GeoSQL,GeoSQL,可以写出形如: SELECT Soils.Map From Soils,Parcels Where Parcels.Value>6000 and Overlay(Soils,Parcels); 的查询命令。 由于完全实现GeoSQL仍然有相当的难度,所以目前大多数GIS软件的实现思路是分别输入标准SQL查询语句以及空间查询(图16-14),然后分开处理,最后将结果合并,其缺点是不够灵活。  图16-14:一个实现空间查询的界面,将空间关系和标准SQL分开输入 5.2.5可视化 由于地理信息系统是基于图形的,其分析和解释的结果通常是以可视化的形式表现出来。可视化是指为了识别、沟通和解释模式或结构,概括性地表现信息的过程。空间分析需要考虑信息模式以及空间特征的感受,对于GIS,可视化可以描述为从信息到知识的转化过程。对于地理信息系统,除了以可视化的形式表现各种信息,实现表达的所见即所得(WYSIWYS, What You See Is What You Get)亦是界面设计的重要原则。 5.3 GIS界面样式 在GIS软件界面设计中,有三种基本的用户界面样式,即基于命令的界面、菜单驱动的界面以及基于工作流的GUI界面,这三种界面对于实现和使用各有其长处和短处,在具体实现时,可以同时支持一种或几种样式。 5.3.1基于命令行的GIS界面(图16-15) 命令行是最简单的界面样式,并且很早就已经在各种操作系统软件中被采用。它只使用文本语言,要求用户了解可以使用的选项,这需要记忆各种命令或者不断查找帮助文档。基于命令行的界面不提供任何提示信息和建议,这使用户要依赖于印刷文档来学习系统。采用命令行界面需要开发一个命令行解释器,在命令行界面软件中,功能模块之间关系较为简单,常常是一个模块的输出作为另一个模块的输入,便于开发实现。利用批命令文件或者脚本文件,可以依次完成多步操作,这是命令行界面的长处。 对于GIS软件,因为包含大量的图形操作,所以采用命令行界面时,需要有一个图形窗口以显示操作结果,这样命令行界面起到控制台的作用。由于支持批命令和脚本文件,可以使用命令行界面来实现批量的、流程化的、耗时的数据处理。  图16-15:基于命令行的GIS界面 5.3.2菜单驱动的GIS界面(图16-16) 在MS-Windows成为PC上的主流操作系统之后,菜单驱动的用户界面几乎在所有的应用软件中被采用。它按照层次,列出了系统提供所有操作,用户可以通过键盘或者指点设备,通常是鼠标,来选择并执行一个操作。每个菜单项目都有相应的帮助信息,便于用户随时参看。 菜单驱动界面最大的长处在于界面友好,便于用户掌握系统。但是对于高级用户而言,与命令行界面相比,它往往显得不够灵活而且效率低下。在GIS中,往往需要连续地对批量数据进行处理,并且需要较长的计算时间,这种情况下采用菜单界面就变得不可忍受。  图16-16:Windows环境下菜单驱动的GIS界面 5.3.3采用数据流图的GIS图形用户界面(图16-17) 在图形数据流界面中,操作者通过一种“可视化的语言”,而不是严格的文本来控制系统,其中,系统用图形符号来表现其提供的功能,称为“图标”。图标不仅可以表示操作,也可以表示数据或者硬件设备。 在基于数据流图的用户界面中,用户可以通过“拖放(Drag and Drop)”操作来实现相应的操作(例如,可以将表示插值计算的图标拖放到表示等值线数据的图标上,以进行等值线插值运算),设计和组织数据处理流程。 数据流图界面适用于数据流清晰,相对比较简单的系统,如数字图像处理软件;其缺点是实现较为困难。  图16-17:采用数据流图的GIS图形用户界面 6.GIS中的设计模式 随着面向对象技术的广泛应用,软件复用在越来越多的开发过程中被采用。在研究软件复用的过程中,设计模式(Design Pattern)的概念被提了出来。所谓设计模式,简单地理解,是一些设计面向对象的软件的经验总结。正如Alexander针对建筑领域所说的:“每个模式描述了一个在我们身边一再发生的问题,它告诉你这个问题的解的关键,以使你可以成千上万次的利用这个解,而不需要再一次去解它。”,在软件开发过程中使用设计模式,可以利用已有的设计经验,指导软件复用。 一个设计模式,一般包括以下四个基本部分: 1)模式名称:描述一个设计问题、它的解法和后果; 2)问题:告诉什么时候要使用该设计模式,解释问题及其背景; 3)解决方案:描述设计的基本要素、它们的关系、各自的任务以及相互之间的合作; 4)后果:描述应用设计模式之后的结果和权衡。 E.Gamma提出了23个面向对象的设计模式,这些模式抽象层次较高,可以应用于所有软件的开发过程。在地理信息系统开发中,经常会遇到本领域的特定的一些问题,并且已经形成了有效的解决方案,对其进行归纳总结,形成相应的设计模式,对于GIS软件开发,有着重要的意义。下面遵循E.Gamma的格式给出了一个GIS设计模式范例。 名称: 过滤和精化(Filter and Refine) 内容: 定义了对一个大数据量的空间数据库的访问接口 另外的名称: 空间索引和最小外包矩形 动机: 在空间数据中,一个通常的查询操作是空间检索,即根据给定的点或者区域得到相应的地物对象,在这些情形中,系统必须要有快的响应速度。 一个最简单的解决办法是依次得到每个地物Ai,并计算Ai和给定的点(或区域)的空间关系,如果符合条件,则返回该地物对象。这个方法的缺点是显而易见的,首先,它需要对空间数据库中的所有地物进行比较运算;其次,空间关系的计算需要大量浮点运算,直接进行给定点(或区域)和地物的空间关系,速度会很慢。 为了提高空间检索效率,有两个解决的途径。首先,可以计算每个地物的最小外包矩形(MBR-Minimum Bounding Rectangle),这样进行空间关系计算时,可以先通过外包矩形来判断,可以排除掉根本不可能具有相交或者包含关系的情形,然后再按照常规的算法(如射线算法等等)进行计算。其次,考虑到采用MBR之后,仍旧要计算每一个地物Ai,当地物数目很多时,依然需要较长的查找时间。解决该问题的一个方案是将数据库的空间范围进行分割,一般是划分成为矩形,然后计算并记录每个矩形包含或者相交的地物,形成空间索引。在进行空间检索时,根据给定的点(或区域)得到其对应的索引块,这样就可以只判断与索引块相关的地物,从而减少了查找时间。通常前一个操作称为精化,后一个操作叫做过滤。下面以中国行政区划数据(图16-18-a)简单描述该过程。  (a) (b) 图16-18:中国行政区划和对应的MBR  (a) (b) 图16:通过空间索引进行过滤 如图16-19-a所示,每一索引块都记录了其相应的地物,形如: D5(湖北,江西,浙江,台湾,湖南,广东,福建 C4(内蒙古,甘肃,陕西,山西,河南,湖北,四川,青海,宁夏 而每个地物都记录其最小外包矩形,如图16-18-b所示。 当根据给定点P(图16-19-a)查找包含该点的地物时,首先判断P位于C4索引块,这样就可以只判断P与C4索引块对应地物的关系;再由外包矩形,可以得到P只可能在四川省或陕西省内(图16-19-b),然后就可以采用传统的空间关系计算方法,得到确切的结果——四川省。 应用: 过滤和精化可以应用于根据点或者区域对大数据量的空间数据库的检索(点,PAM-Point Access Method;区域,SAM-Spatial Access Method),而空间数据库由线或多边形地物组成。 结构:  图16-20:过滤和精化模式结构图 参与者: FeatureSet: ——定义由地理要素组成空间数据库。 Feture: ——实现了地物对象。 SpatialIndex: ——管理和维护空间索引,可以得到每一索引块对应的地物,提供过滤功能。 MBR: ——地物的最小外包矩形,通过MBR可以实现精化功能。 Partition: ——对应于空间数据分割后的每一块矩形区域。 协作: FeatureSet利用SpatialIndex得到可能符合条件的地物对象集合,然后利用MBR去除绝对不可能满足条件的地物。 对空间数据库的任何涉及空间坐标的编辑修改都要重新计算MBR和维护空间索引,在要求精度较低的情况下,可以利用最小外包矩形建立空间索引。 后果: 很明显,因为要记录空间索引和最小外包矩形,采用过滤和精化增加了内存开销。索引块的确定是一个重要的因素,如果太小,会有大量地物跨越多于一个的索引块,进一步增加了数据量;而如果太大,过滤的效果不会很明显。如果地物的空间分布不均匀,一般要采用不均匀的分割策略,如四叉树等等。此外,为了保证查询结果的正确性,对地物的每一次编辑修改,都要重新计算其最小外包矩形,并维护空间索引,这需要额外的时间开销,并增加了程序的复杂度。考虑到上述因素,对于数据量较小的情形,一般不建立空间索引。因为点地理要素结构简单,并且数据量小,并且容易计算空间关系,所以对于由点地物对象构成的数据,一般不建立空间索引,并且对于单个点而言,最小外包矩形也是没有意义的。 变化: 为了提高查找效率,可以建立基于四叉树、平衡二叉树等基于树数据结构的空间索引。 可以使用最小外包直角多边形代替最小外包矩形,前者更好地逼近几何实体的形状,提高了精化的效率,但是需要更多的存储空间,并且计算直角多边形运算量较大。 实现: 下面是采用C++语言描述的采用过滤和精化的空间检索过程,为了简便起见,只是给出了基于点的访问(PAM),其中FeatureSet类表示由地理要素组成的空间数据库,FeatureSet的成员变量m_SpatialIndex为其空间索引,FeatureSet类的方法GetObjectsUsingPAM目的是根据给定的点得到符合条件地物的列表;Feature类表示地理要素,Feature类的成员变量m_rectMBR为其最小外包矩形。 void FeatureSet::GetObjectsUsingPAM(Point ptPoint,Array *arFeatures) const { Partition *pPartition = GetRelativePartition(ptPoint); Array arRelativeFeatures; int nFeaturesCount = m_SpatialIndex->FindFeatures(pPartition,&arRelativeFeatures); Feature *pFeature; for(int i=0 ; i<nFeaturesCount; i++) { pFeature = (Feature *)arRelativeFeatures.GetAt(i); if(!pFeature->m_rectMBR.IsPointContained(ptPoint)) continue; if(pFeature->IsRelationshipFitted(ptPoint)) arFeatures->Add(pFeature); } } 广义上讲,一个设计模式可以是一个算法、一种数据结构,但是在实践中,模式一般由一组协作的类构成,可以完成特定的任务。在地理信息系统软件开发过程中,利用形式化、半形式化的语言来记录设计模式,可以较好地指导软件复用,提高软件生产率。 7.在GIS项目中使用CASE工具——空间过程支持与空间数据配置管理 CASE(计算机辅助软件工程,Computer-Aided Software Engineering),是辅助计算机软件开发的计算机技术,包括在软件开发、维护过程中提供计算机辅助支持以及在软件开发、维护过程中引入工程化方法。CASE工具是一类特殊的软件工具,用于辅助开发、测试、分析和维护另一个计算机程序及相关文档。CASE工具可以分为以下一些类型,即管理工具、编辑工具、配置管理工具、原型工具、方法支持工具、语言处理工具、程序分析工具、测试工具、调试工具、文档工具和再工程工具等,它们可以用来辅助软件开发过程中不同的活动。 上述的CASE工具,同样可以直接应用于GIS软件开发过程中,辅助实施相应的软件开发活动。此外,还可以针对GIS领域,对CASE工具进行特化,使之更好地支持地理信息系统开发活动。下面讲述的在GIS开发中,CASE工具另一个方面的应用:应用配置管理工具实现空间过程支持和空间数据配置管理。 软件配置管理(Configuration Management)是一种标识、组织和控制修改的技术,可以使软件开发过程由于变更修改引起的混乱降低到最小程度。目前,配置管理工具已经比较成熟,提供的基本功能包括: 1)配置标识 在软件开发过程中,各种相关的文档在不断地变更,在变更过程中每一个时刻的内容都称为一个配置,可以命名配置以实现控制和管理。 2)版本控制 版本控制用来管理软件工程过程中所建立起来的配置对象的不同版本。 3)变更控制 变更控制通过“检出(Check out)”和“登入(Check in)”机制实现在多人共同开发软件时,不至于因为共同修改同一文件引起混乱。 4)配置状态报告 配置状态报告通过系统地记录开发过程,反映开发活动的历史情况。 5)配置审核 配置审核的目的是为了证实整个软件生存期中各项产品在技术上和管理上的完整性,并保证所有文档的内容变动不超出当初确定的软件要求范围。 实际上,通过控制不同版本的配置,可以实现整个软件过程的管理,跟踪每份文档的变化,确定文档之间的依赖性。这些特性,同样可以应用于空间过程和空间数据的管理和控制。 在一个较大规模的GIS应用软件的建立过程中,常常要处理大量的数据,概括地说,具有以下特征: 1)数据量大; 2)数据经常变更,比如从遥感图像解译得到的土地利用图以及地籍图; 3)对一份或多份数据的空间模型运算,可以得到派生的数据,换言之,数据之间通过空间模型产生了依赖性; 4)空间模型也是在不断变化。 这时,数据变得混乱而难于控制,管理人员无法了解整个项目的进度。在GIS中引入配置管理的概念,可以管理空间数据和空间模型的多个版本,进而支持空间过程,辅助GIS应用系统的建立。 过程(Process)的概念目前被应用于不同的领域,指被“元程序(Meta-program)”控制的计算机程序以及数据交换复杂的序列。过程的概念,在解决与异种平台和应用环境相关的一些问题时,是非常有帮助的。这样的问题包括: 1)互操作,它可以在过程的基础上得到解决而不是限于普通的情形。 2)分布,在基于已经存在的工具编写分布应用程序时,提供了充分的支持。 3)前向恢复,通过使用数据库持久记录过程中的每一步来得到保证。 4)监控,基于保存在数据库中的过程的当前状态和前状态来实现。 5)历史回溯,基于对存贮过程状态数据库的查询和数据挖掘工作来实现。 这些问题在许多不同的应用领域很普遍地出现,从虚拟企业和商业环境到软件工程和科学数据管理,这说明了过程概念应用的广泛性。 对于地理信息系统而言,大部分的研究活动集中于以下一些问题:空间数据表现,索引,存储和检索。可以说,这只是试图针对传统数据集进行数据库技术扩展的结果。而空间过程问题,不仅仅只是与空间模型有关,下面用一个例子进行说明。 图16-21是一个典型的空间模型组合,形成应用于不同数据集的变换序列*。例如,高程采样数据作为数值高程重建算法的输入,生成带有内插高程的地形图。然后地形图被坡面分析程序使用,以提取不同坡面的坡长,坡度和坡向。这些结果,连同该区域的土壤抽样数据和植被覆盖信息,被用于作为试图预测该区域未来侵蚀模式模型的输入数据。植被覆盖数据通过综合分析土壤抽样数据,植被抽样数据和卫星图像得到。植被覆盖数据也作为植被演替模型的输入数据,该模型根据预测的侵蚀数据,估算未来可能的植被覆盖变化。在考虑到降水量的影响时,也是相似的逐步的过程。图21表现了所有的空间模型组织在一起,形成一个复杂的操作集合,表现不同的地理现象。  图16-21:空间过程的例子:水土流失模型[G.Alonso] 这个例子阐明了一些需求,很自然,这些需求与过程管理的需求非常相似。下面列出这些必要的、简化的需求,包括模型语言,分布和并行以及查询能力。 1)模型语言:在任何一个过程支持系统中,其关键成分就是可以表述过程的语言。给定一个复杂的地理过程模型,模型语言必须是结构化的,允许嵌套,并且可以被方便地重用。任何地理过程应该可以方便地被用于构造一个更大的地理过程。此外,考虑到复杂的执行环境,该语言必须提供对事件和例外处理机制的支持。事件可以被用于在数据集发生改变时,通知系统并且触发执行模型,以产生更新的数据。类似地,考虑到例外,必须存在一个可靠的机制来处理它们,以避免系统偏离预先描述的行为,造成整个模型执行的退出。由于在工作流系统中,该语言必须允许定义和注册外部对象以及应用。在地理过程的应用中,更应该这样,这是因为在地理过程管理中,不论算法还是空间数据都将外在于系统,外部实体的注册是互操作性问题的基础。 2)分布和并行中的前向恢复:为了降低这种复杂的地理过程执行的开销,只要可能,它们的不同的步骤应该并行。一般来讲,我们假定基本的平台是一组(cluster)微机或工作站,不要求是相同的操作系统。地理过程中的每一个步骤都可以被指派到这一组中的不同的结点上,因此采用并行机制是模型固有的特征。同样地,多处理器的机器也采用类似的实现。作为其直接后果,并且由于模型的成本和执行它们所用的时间,必须有一种机制,以避免当发生错误时,所有的计算丢失。这就是前向恢复的概念,它可以从由于错误引起的中断处恢复执行。如果提供一个系统,其中复杂的地理过程只能从头到尾的执行而不能在中间中断,也不能动态修改地理过程以纠正错误,这样的系统将是无用的。通常的,构造一个地理过程与其说是为了得到其结果,不如说是测试相关地理模型的合法性和可用性。基于这些理由,系统必须支持单步执行,并且能够在任何执行点上停止,进行检查,作出改变以及恢复执行。这样的功能只能通过对地理过程执行的精确监测来实现。 3)依赖性查询能力:在地理过程中,如果对模型和输入数据不了解,那么就不能很好地解释利用该数据和模型产生的数据。这样就引出了那些众所周知的问题如“族系跟踪(Lineage tracking)”,“变化传播(Change propagation)”以及“版本”,这些概念与更加一般的过程中的历史跟踪没有什么不同。在这种环境中,将有这样一些典型的查询问题,例如“哪一个模型用到了算法X?”,“”如果数据集Y发生改变,将会产生什么结果?”以及“哪些数据用于产生数据Z?”。因此,系统必须支持如下的一些功能,包括:自动变化传播(当输入数据发生改变时,重新执行模型,以创建新版本的输出数据),变化通知以及过程控制(只要一个数据集存在,创建它所使用的模型将保留一个拷贝;同样的,只要有其它过程使用了一个子过程,也保留该子过程的拷贝),这样系统才能真正有用。只有具有合适的机制来跟踪数据之间的依赖性,并且有高效的方法从这些依赖性中提取信息,系统才能很好地提供上述功能。 过程建模是当前软件工程一个重要的研究方向,通过形式化地描述开发过程,进而实现更加“精确”的过程管理,它同样可以应用于空间过程。由于过程本身的复杂度,使得难以建立完整的过程模型,利用配置管理工具,可以在一定程度上实现数据、模型乃至过程的控制管理。