『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

基于ArcObjects的空间数据管理系统开发探讨

基于ArcObjects的空间数据管理系统开发探讨

本文首先介绍了组件式地理信息系统的基本概念及其相关技术。然后介绍了美国ESRI公司开发的全组件化GIS组件ArcObjects,简要说明了其组件模型结构。在分析了基于ArcGIS系统软件和ArcObjects组件库系统开发应用方式后,介绍了利用VB实现基于ArcObjects的应用系统的基本流程,并以长沙城市基础空间数据库管理系统的设计和实现为例,说明了基于ArcObjects组件库实现客户应用的过程。软件最后总结了COM组件GIS开发的优点,并指出了未来在数据管理和应用中需要完善的工作。

       1 引言

       地理信息系统(GIS)是一个采集、存储、管理、分析、显示和应用地理空间信息的计算机系统,是应用信息技术实现对空间信息的全面存储与分析、提高认识空间信息能力的有效工具。地理信息系统已广泛的应用于国土资源调查与管理、城市勘测、城市规划管理、环境检测分析、公安消防管理、交通与安全管理、配电网管理等方面。

 

       GIS软件开发方面,国内外已经有许多成熟的商业化系统,并在实际应用中取得的一定的成效。基于COM组件对象的GIS系统是一种成熟的软件应用模式,既提供了基本的GIS应用功能,又方便用户的定制开发,实现专业的应用业务功能。ArcObjects是美国ESRI公司开发的一套GIS组件库,既提供了强大的ArcMapArcCatalog等应用软件,又可以由用户定制,实现自身业务,成为为当前许多GIS系统建设项目的首选平台。

 

       城市基础空间数据的管理,一直是城市勘测单位发挥空间数据作用面临的一个问题,影响了城市基础数据的更新、管理、维护与应用。长沙市在ArcObjects组件对象的基础上,实现了基于ArcSDE的综合空间数据管理系统的开发,提升了城市空间数据管理的水平和能力。本文将介绍该空间数据管理系统开发中涉及的相关技术及其实现。

 

       2 组件式地理信息系统

       组件式对象模型(COM)不是一种面向对象的语言,而是一种二进制标准,其作用是使各种软件组件和应用软件能够用一种统一的标准方式进行交互,而建立在组件基础上的应用程序几乎不用修改,大大提高了代码的应用性。

 

       组件式GIS的基本思想是把GIS的各大功能模块划分为几个控件,每个控件完成不同的功能。各个GIS控件之间,以及GIS控件与其他非GIS控件之间,可以方便地通过可视化软件开发工具集成起来,形成最终的GIS应用。一些GIS软件公司纷纷推出了基于COM技术,由一系列ActiveX控件组成的GIS二次开发软件环境。

 

       采用面向对象技术的GIS软件,其二次开发可以利用可视化开发工具的高效方便的编程功能,结合GIS系统完备的空间数据的分析处理功能,采用COM技术进行组件式二次开发,提高应用系统的开发效率,使GIS系统面向对象,具有良好的外观和完善的功能,这也是当今地理信息系统的一个新的研究领域。

 

       ArcGIS系列软件就是采用完全的COM组件化技术设计与开发的一个GIS应用系统。其全组件化的设计,既很好地实现了系统提供的各项功能,实现了各模块之间的功能复用;又提供了一个良好的平台,让用户定制自身的应用需求,嵌入到ArcGIS系统平台中,实现行业特有的功能;还提供了一个方便的应用开发环境,使得用户可以借助底层平台的各组件功能构建专业的应用软件系统。

 

       3 ArcObjects组件对象模型

       ArcGIS是开放的地理信息处理平台,具有强大的地理数据管理、编辑、显示、分析等功能。由于ArcGIS完全COM化,对于需要进行结构定制和功能扩展以及独立程序开发的高级应用来说具有非常大的吸引力,并提供了前所未有的灵活性。

 

       ArcObjectsArcGIS的核心,是ArcMapArcCatalog等应用程序的平台。ArcObjects是一种集成的面向对象的地理信息系统软件组件库,提供了ArcGIS中全部的功能接口,是开发GIS应用程序的基础。开发人员可以利用ArcObjects框架进行编程,以提高ArcGIS的性能或扩展其应用。ArcObjects组件库的每一个组件中定义有不同的类,类下面定义了不同接口,接口中包含不同的属性和方法。类之间有类型继承(Type Inheritance)关系,接口之间有互相调用(QueryInterface)及相互继承(Interface Inheritance)关系。

 

    (1)类。ArcObjects中的类有三种:Abstract ClassesCoclassesClassesCoclasses可在开发环境中直接定义并实例化;Classes不能直接实例化,只能从其他类接口的属性函数或其他方法的输出参数中获得;而Abstract Classes为抽象类,不能定义及实例化,只是用来派生其他类。

 

 (2)类的类型继承。类型继承是指类之间的接口类型的继承,而不是继承其实现,如图1所示。Element类有六个接口,GraphicElement 继承于Element,它有八个接口,包括自身的两个接口和类型继承于Element的六个接口。继承过来的接口只是名称相同,具体的实现则不同。

 

1 类型继承

       Fig.1 Type Inheritance

 

  (3)接口。类下面包含不同接口,接口名前都有“I”字母。如FeatureClass类包含IFeatureClassIDatasetITable等不同接口。不同的Coclasses可有同一个接口,如FeatureClass类有IFeatureClass接口,而RelQueryTable类也有IFeatureClass接口。

 

  (4)接口调用。两个接口之间是否可以相互调用要满足一个条件:它们要同属于一个类,如类FeatureLayer包含IFeatureLayer接口和IDataset接口。如果已知IFeatureLayer的指针,则通过以下语句就可得到IDataset的指针:

ipFeatureLayer->QueryInterface(__uuidof(IDataset), (void**)&ipDataset);

 

  (5)接口继承。如IMapFrame接口和IMapSurroundFrame接口继承于IFrameElement接口,则父类接口IFrameElement所具有的方法和属性对派生接口ImapFrameIMapSurroundFrame都有效。

 

       4 基于ArcObjects数据建库与应用

       4.1 ArcObjects开发模式探讨

       1ODEOpen Development Environment)开发

      ODEOpen Development Environment)是在ArcObjects组件技术的基础上提供给用户的一种开发方式。它作为Custom ActiveX Control,可嵌入VBVC, Delphi等开发环境中,通过ActiveX控件与ArcGIS交互。它为开发者提供的是一组可编程的对象,包括可视的用户化控件。在ODE环境中,ArcGIS中的所有命令和函数都封装在arcplot.ocx arcedit.ocxgrid.ocxarc.dllstring.dll控件和动态连接库中,用户通过ODE对象来间接调用和实现ArcGIS的各个功能。

 

       2VBA开发

      在基于ArcObjects的应用系统ArcMapArcCatalog中,内嵌了微软公司授权许可的Visual Basic for ApplicationVBA)。微软设计的VBA为整个应用程序提供了一个符合工业标准的无缝集成的开发环境。通过VBA能利用各种ArcObjects组件对象的接口,创建新的窗口和控件,实现用户所要求的特定功能;并可将工作保存在地图文档(MXD)文件和地图模板(MXT)文件中。

 

       3.客户应用的定制

      利用支持组件开发和应用的可视化开发环境,实现基于ArcObjects的应用。支持COM组件开发的常用开发环境有VCVBDelphi等,这些开发环境中可以通过嵌入ActiveX控件、组件引用等方式,访问ArcObjects的组件对象功能,实现自身的应用。

 

       下面将简要介绍基于VB环境中,利用ArcObjects组件对象库实现客户化应用的开发过程,并介绍一个基于VBArcObjects的应用系统开发

 

      4.2 VB中开发基于ArcObjects的应用

      VB是微软公司提供的一个可视化的应用程序开发环境,可以方便的实现基于Windows的应用,可以加载第三方控件、动态库、组件对象、应用程序接口等,实现客户的应用功能。相对而言,VB的开发语言比较简单,可视化的开发方式便于用户定制的实现。

VB环境中开发基于ArcObjects的客户应用,基本流程为:

  (1 创建VB应用工程,定制确定用户的基本程序框架;

  (2 引用ArcObjects组件对象及其地图显示和操作控件,加载ArcObjects开发环境(如图2);

  (3 定制、编辑系统运行界面,包括系统菜单、工具条、运行窗口等;

  (4 实现客户化应用程序代码,根据ArcObjects各组件的功能,在VB中实现客户应用流程。

 

       a. 地图控件的引用 b. ArcObjects组件对象的引用

 

2 VBArcObjects组件和控件的引用

       Fig.2 Reference of ArcObjects Component and Control in VB

 

      在实际项目的开发中,需要根据定制系统的功能,合理的设计系统运行的界面与操作,保证操作的友好与简便,提高系统应用的效果。

 

       4.3 基于ArcObjects的数据库管理管理系统的实现

      数据建库是ArcGIS系统的一项重要功能,是建立完善的GIS系统的基础。在ArcGIS的发展中,数据建库可以是文件形式,如CoverageShapefile等,也可以是空间数据库GeoDatabase。从当前空间数据管理的发展和应用看来,GeoDatabase的空间数据管理已经成为主流,在许多行业的空间数据建库中得到了实现,提供了更加完善的空间数据管理和应用能力。下面将简要介绍利用ArcObjects实现长沙城市基础空间数据库管理系统的实现过程,及其开发成果。

 

       1.空间数据库的设计

       长沙城市基础空间数据库是一个大型的空间数据库,涉及城市空间的地形图、管网图、规划图、遥感影像图等多种空间数据内容,其比例尺有15001100012000等多种,还有相应的属性数据。此外,为了数据查询的方便,还设计了相应的空间数据查询与索引,提供多种方式的数据查询方法。

 

       由于空间数据种类多,内容复杂,在数据库设计时,要充分考虑其层次组织结构。系统采用多数据集(Feature Datasets)来管理各比例尺地形图和规划图、管网图、影像图,在每个数据集下建立多个要素类(Feature Classes)实现一类地物的存储,在要素类中又通过设置属性编码区分不同子类别(如图3)。

 

       2.系统功能设计

       系统以实现空间数据的建库管理为目标,完成快速的空间数据转换建库功能,减少建库操作的难度,提高建库的效率。此外,实现基本的空间数据查询、分析和应用服务,基于统一的空间数据平台,向用户提供数据服务。

 

  系统主要功能包括:

  (1 数据入库与更新:实现各种空间数据的批量入库与更新。地形图数据根据分幅范围,可以一次入库和更新多个图幅;规划数据以规划范围为基准,可以多个规划同时入库与更新;管网数据和遥感影像图数据也实现了批量的入库与更新。此外还实现了索引图、测量控制点等数据资料的快速入库。

 

  (2 数据查询与显示:系统实现了根据索引进行查询等多种数据查询方式,实现了不同数据之间(如地形图与影像图、地形图与规划图等)的叠加显示,便于对空间数据的对比分析。此外还实现了图形属性之间的相互查询,以及简单的数据统计分析。

 

  (3 符号化与打印:系统实现了根据地物编码进行符号自动处理,实现了地图数据的分幅打印输出。

 

  (4 数据转换输出:数据应用和共享是系统建设的最终目标。系统实现了基于要求的空间数据输出,为用户提供数据服务。

 

       以上是系统的主要功能,在未来的应用中,还可以根据系统预留的接口,实现更多的专业分析应用,提高系统应用的价值。

 

       3.系统实现介绍

       长沙城市基础空间数据库管理系统以ArcGIS9为基础,基于最新的ArcObjects组件对象库,利用VB6开发语言实现。系统采用Client/Server的体系结构,服务器端采用Oracle数据库和ArcSDE引擎,实现空间数据的存储;客户端在ArcObjects的基础上,实现了空间数据的入库、编辑、管理、查询、分析等应用。

 

  图4是系统运行的主界面,显示了系统组成部分的,并显示了地形图数据与正射影像图数据的叠加分析。

 

4 系统运行主界面

Fig.4 Main Interface of Changsha Database Management System

 

       5 结论与展望

       ArcGIS作为全球性的GIS系统软件,以其强大的数据建库管理与分析应用功能,以及方便的客户应用开发功能,为越来越多的用户所采用。其组件化的开发方式,与传统的开发方式相比,可以降低开发难度,提高开发效率,增强系统的灵活性和开放性。

 

       本文介绍了基于ArcObjects组件对象模型,实现长沙城市基础空间数据管理系统的应用,是在城市勘测规划数据管理中的一个有益探索。在后续的研究和应用中,需要进一步完善空间数据管理功能,实现更多基于ArcObjects提供的空间数据分析服务,提高空间数据应用的价值。

      京ICP备2025132830号-1 京公网安备 号