北京大学遥感与地理信息系统研究所GIS软件GIS软件体系结构桌面GIS网络GISGIS软件二次开发方法WebGISGIS软件的发展七十年代以前GIS软件只是简单的由一系列计算机例程组成,有经验的程序员可以利用它们构建一个可运行的GIS系统每个GIS系统在功能上互不相同,需要大量资源创建一个可工作的系统七十年代末和八十年代初命令行:用户依靠输入指令与GIS软件交互,完成制图和查询统计等工作GIS软件包实际上是空间操作算子或命令的工具箱,应用到一个数据集上产生另一个数据集八十年代末图形用户界面与软件定制能力应用于GIS基于窗体的菜单驱动的GIS,并具备可定制能力为特定领域的最终用户构建专用的应用系统二十一世纪Web服务与分布式GIS当前GIS软件的基本特征菜单驱动可定制能力可以在Web上分布GIS软件体系结构三层结构用户界面——表现层用户与图形用户界面(GUI)交互GUI是集成的菜单、工具条及其它控件的集合,它提供了对GIS工具的操作GIS工具集——业务逻辑层定义了GIS软件用于处理数据的功能和函数数据管理系统——数据服务层数据存储在由数据管理软件维护的文件或数据库中实现模式desktopGISclient-serverGIScentralizeddesktopGIScentralizedserverGIS用户界面GIS工具集数据管理数据表现层业务逻辑层数据服务层DestopGIS体系结构最简单的模式单用户三个软件层以桌面GIS软件包的形式安装在一台PC上变种数据文件由集中式文件服务器(PC)管理但数据服务功能仍然是桌面GIS的一部分所有文件访问通过LAN网络实现文件PC文件PC文件服务器PCClient-ServerGIS体系结构多用户三个软件层可以安装在不同的计算机上,提高灵活性和性能用户与桌面GIS系统交互桌面系统实现所有业务逻辑数据和数据管理软件安装在另一台通过网络连接的计算机上ThickClient数据服务器PCDBMS桌面GIS客户端CentralizedDesktopGIS体系结构GUI和业务逻辑部署在中心服务器上,称为应用服务器层或中间层应用服务层由桌面GIS包实现应用服务层需要同时安装应用服务器软件数据由数据服务器管理用户在远程PC上通过LAN或WAN访问ThinClient数据服务器PCDBMS瘦客户应用服务平台GIS桌面GIS+应用服务器CentralizedServerGIS体系结构业务逻辑部署在真正的应用服务层,作为中间层客户端可以是基于PC、浏览器或特定设备的胖客户或瘦客户客户端与应用服务层通过LAN、WAN或Internet连接数据服务器PCDBMS客户端GISServerBrowserDevice应用服务器Desktop和InternetGIS特征DesktopGISInternetGIS客户端规模胖瘦客户端平台应用程序浏览器服务器尺寸瘦/胖胖服务器平台Windows/UnixWindows/Unix组件标准COM为主Java为主网络局域网/广域网Internet桌面软件GIS工具集数据服务器数据DesktopGIS浏览器应用服务器数据服务器数据InternetGIS构建GIS软件系统GIS软件体系结构的核心部分用户界面、工具、数据管理器、数据模型和定制环境现代的GIS软件系统的软件组件构成终端用户应用一组菜单驱动的用户界面,实现主要的系统功能(数据定位、地图生成、地址编码等)空间分析工具构成软件主要功能和性能的核心引擎编辑、转换、显示、分析、输出和定制数据访问组件相对底层的组件,存储和管理对空间数据的访问GIS应用软件的开发方式通过购买相应的GIS软件或系统,在本地区或本领域内部署实施购买GIS平台软件进行二次开发、购买完整的软件产品、购买完整的GIS系统、购买GIS服务请软件开发商来开发承包开发、合作开发由组织内部人员自己开发实施方案完全自主开发购买二次开发平台开发购买完整软件购买完整系统购买服务承包开发合作开发对提供者依赖性低低高很高很高很高中开发周期长长-中长短很短很短长-中长长-中长初始费用低中等中等高高高中等人力费用高中等低低很低低中等风险和不确定性高较低低低中等高中等灵活性完全可以完全可以中等中等不定高完全可以对用户技术要求很高高中等中等很低中等高现有资源的利用高高中等低很低低中等-高GIS软件定制GIS软件定制是为创建面向特定目的应用而修改GIS软件的过程从GUI中删除不需要的控件,如菜单选项或按钮为核心软件添加支持分析、制图、管理等复杂功能要实现定制需要满足的条件GIS软件必须提供其数据模型的总体描述并暴露接口来使用、修改和补充现有的功能使用开放的、符合工业标准的可视化开发环境支持软件定制GIS厂商必须暴露其软件包的对象模型和函数的细节可以通过创建并编写一系列应用编程接口(API)来实现这些接口允许GIS软件的功能函数可以在一个可视化开发环境的程序设计工具中被调用组件对象模型ComponentObjectModel(COM);.Net组件JavaBean;EJB公共对象请求代理体系结构CommonObjectRequestBrokerArchitecture,CORBAGIS二次开发GIS应用系统的两个核心,决定了GIS应用软件开发方式的选择通用GIS功能领域定制利用GIS二次开发平台进行应用系统的二次开发二次开发平台(组件或应用编程接口)提供了通用GIS功能的支持,可以在应用系统中直接使用二次开发平台可以嵌入到其他系统中,具有更好的可复用性、扩展性和灵活性,具有较高的定制能力GIS二次开发方法,特别是基于GIS组件的二次开发方法,成为GIS应用开发的主流方式GIS二次开发的主要途径宏语言方式脚本语言方式函数调用方式组件方式GIS二次开发——宏语言方式(1)宏宏是一种解释性编程语言宏程序是一连串的指令或函数的组合,可以让使用者将一些常用的功能自动化GIS宏的优点它是服务于特定的GIS软件系统,可以直接使用GIS软件系统内部指令和函数,完成空间信息和属性信息的综合管理ArcInfoAML宏语言AML(ArcMacroLanguage)是内嵌于ArcInfo内部的解释型宏语言,适用于任何ArcInfo环境(Unix或Windows等)AML命令:将单一功能的ArcInfo命令组织成解决复杂问题的程序AML菜单:将AML命令集成到简单易用的用户图形界面AML文件一般包括5个部分:ArcInfo命令、指示符、函数、变量和注释GIS二次开发——宏语言方式(2)基于VBA的GIS二次开发VBAVisualBasicforApplications,可以认为是VisualBasic的子集它是一种通用的自动化语言,可以使常用的程序自动化利用它生成嵌入在应用程序内的宏,可以创建自定义的解决方案ArcMap中的VBA开发在ArcMap中编写VB宏,将VB函数和ArcMap扩展对象库集成可以扩展ArcMap的菜单、工具条等,并完成用户的特定需求两种方法直接编写VBA宏创建UIControl并在其事件中编写代码GIS二次开发——脚本语言方式(1)脚本语言脚本一种纯文本保存的程序,脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等脚本语言相对一般程序开发来说比较接近自然语言,可以不经编译而是解释执行,利于快速开发或一些轻量的控制GIS中的脚本语言一些GIS系统中,也提供了嵌入的脚本语言,通过编写脚本,完成用户定制的功能,实现二次开发利用这些脚本语言,以原GIS工具软件为开发平台,开发出自己的针对不同应用对象的应用程序省时省力,系统的稳定性和可靠性高但难以开发复杂的应用模型,且系统结构松散、系统显得有些臃肿,操作效率和系统功能利用效率较低GIS中代表性的脚本语言MapInfo的MapBasicArcView的AvenueArcGIS9中的VBScript、JavaScript和PythonGIS二次开发——脚本语言方式(2)MapInfo的MapBasicMapBasic一种类Basic语言,能够扩展MapInfo功能,并与其他应用软件集成MapBasic编辑出的程序可以在MapInfoProfessional或MapInfoRuntime上运行ArcView的AvenueAvenue是ArcView内置的面向对象的专用程序设计脚本语言包括了ArcView系统中所有可操作的文档和其它要素几乎所有的ArcView操作都可以通过Avenue脚本语言来实现Windows环境下的ArcView的Avenue还提供了通过DLL调用WindowsAPI函数,增强了ArcView应用的二次开发的深度。VB和Avenue成为开发ArcView应用的最佳组合ArcGIS9中的Python支持Python、VBScript、JavaScript和PERL等多种脚本语言Python是一种面向对象的解释性语言,能够提供基本的构建块,也可以用C、C++、Java进行扩展,因此可以用它开发任何类型的程序Python支持AML和Avenue提供的所有功能ESRI使用Python作为文档和支持的主要的脚本语言,目前也成为ESRI大力推广的应用于ArcGIS9.0以上版本的主要的二次开发脚本语言GIS二次开发——函数调用方式基于函数调用的GIS二次开发将各种GIS功能,包装成函数的形式,生成可以被多种程序设计语言共享调研的二进制程序块在应用系统建设时,加载这些二进制程序模块,调用其中的函数,实现相应的GIS功能基于函数调用的GIS二次开发主要使用动态链接库(DLL)技术动态链接库独立在应用系统之外,只在系统运行到适当的位置时才动态加载,使用完后即可释放,因此通过这种方法开发的系统负担较小,独立性好动态链接库可以被多个不同的系统使用,可以方便的嵌入到应用系统中,提高了GIS软件的可复用性应用系统可以独立于原GIS库,其扩展性和集成性都明显优于宏、脚本语言等二次开发方式广泛使用的各种程序设计语言或集成开发环境(如VisualC++、VisualBasic、Delphi等)都可以很好的支持动态链接库的使用典型的基于函数调用的GIS二次开发MapGIS以API函数的形式提供了一系列的GIS二次开发库,可以全面支持GIS应用系统的二次开发GIS二次开发——组件方式(1)组件技术COM/DCOM、.Net组件、CORBA、JavaBean、EJBActiveX控件COM物理实现的一种方式提供一种面向对象、与操作系统无关、与机器平台无关、可以在应用程序之间互相访问对象地机制ActiveX控件开发端和使用端是完全独立的,可以用于不同语言、不同开发平台、不同的系统环境中.Net组件GIS组件把GIS的功能适当抽象,以组件形式供开发者使用独立灵活,成本低可扩展、可集成程度高同样强大的GIS功能开发简捷基于组件的二次开发是应用最广泛,功能最强大的GIS二次开发方法比较具有代表性的GIS组件ESRIArcObject,MapObject,ArcEngineMapInfoMapXGeoMediaSuperMapObjectGIS二次开发——组件方式(2)ArcObject简称AO,是ESRI公司构建的一系列COM组件集,可以利用ArcObject提供的组件对象来进行应用开发是ArcGIS中的ArcMap、ArcCatalog和ArcScene的开发平台通过ArcObject可完成以下甚至更多的GIS功能空间数据的显示、查询检索、编辑和分析创建各种专题图和统计报表高级的制图和输出功能空间数据管理和维护ArcObject包含若干个ActiveX控件MapControl控