GIS二次开发方法与实现

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中图分类号:TP311.52文献标识码:A文章编号:1009-2552(2008)08-0065-03
GIS二次开发方法与实现
杨宏鹏,王阿川,王妍玮
(东北林业大学信息与计算机工程学院,哈尔滨150040)
摘要:介绍了地理信息系统二次开发的三种方法:独立二次开发、单纯二次开发和集成二次开发。

随后比较各自的优缺点。

采用ESRI公司提供的ArcObjects组件库和M apControl控件以及Scene View er C ontrol控件。

用VisualC++6.0在ArcGIS8.3环境下进行了G IS的二次开发。

关键词:地理信息系统;ArcO bjects;二次开发
Method and implementation of GIS secondary development
YA NG Hong2peng,WA NG A2chuan,W AN G Yan2w ei
(School of Information and Computer Engineer ing,Nor theast For estr y University,Harbin150040,China) Abstract:The paper introduces three methods of GIS sec ondary development,they are independent secondary development,simple secondary development and integrated secondary development.Then it c ompares the advantages and disadvantages of each ing A rcO bjects component library and M apControl controls and Scene View er Control controls provided by ESRI company,this paper makes secondary development of GIS under ArcGIS8.3environment based on VisualC++6.0.
Key w or ds:GI S;ArcObjects;secondary development
20世纪中叶以后,伴随着计算机科学、现代数学、计算机图形学和虚拟现实技术的发展,地理信息系统(GIS)应运而生,该技术将数字地图和地理分析功能以及数据库操作集合在一起,可对地理信息进行综合分析和处理。

现有的地理信息系统软件主要集中于描述二维空间信息,将实际的三维事物采用二维的方式表示,具有很大的局限性,大量的多维空间信息无法得到利用。

而且在许多实际应用中,诸如:环境仿真、设施管理、森林防火的模型分析与辅助决策,用户需要三维可交互GIS的支持,以便三维可视化、动态交互地处理、分析、显示他们的多种地理相关数据。

现有的GIS系统已经不能满足用户在个别领域的专项研究,因此对地理信息系统进行二次开发,尤其是进行三维可视化的开发与设计就具有非常重要的意义。

目前,在软件开发领域,一场新的革命正在悄悄兴起,这是由日趋成熟的组件技术引发的[1]。

组件化技术从根本上改变了传统的软件开发思想,实现了软件的复用和健壮更新。

1GIS的开发方法
应用型GIS的二次开发通常有三种方法[2]:独立二次开发、单纯二次开发和集成二次开发。

1.1独立二次开发
独立二次开发是指不依赖任何GIS工具软件,从空间数据的采集、编辑到数据的处理分析及结果输出,所有的算法都由开发者独立设计,然后选用某种程序设计语言,如Visual C++,D elphi,C++Builder, VJ++等,在一定的操作系统平台上编辑实现。

这种方式的好处在于无需依赖任何商业GIS工具软件,减少了开发成本,同时程序员可以对程序的各个方面进行总体控制。

因此,系统各个组成部分之间的联系最为紧密,综合程度和操作效率最高。

但由于地理信息系统的复杂性,开发的工作量是十分庞大的,开发周期长。

对于大多数开发者来说,能力、时间、财力方面的限制使其开发处理的产品很难在功能上与商业化GIS工具软件相比。

1.2单纯二次开发
单纯二次开发指完全借助于地理信息系统工具
收稿日期:2007-12-18
作者简介:杨宏鹏(1982-),男,东北林业大学信息与计算机工程学院硕士研究生,主要研究方向为人工智能与智能控制。

)
65
)
软件提供的二次开发语言进行应用系统开发。

目前,商业化的地理信息系统工具已经相当成熟,它们大多提供了可供用户进行二次开发的宏语言,如ESRI的Arcvie w提供了Avenue语言,MapInf o公司研制的M apInfo Professional提供了MapBasic语言等。

用户可以利用这些语言,以原G IS工具软件为开发平台,针对不同应用对象,开发出自己的应用程序。

具体开发时,可首先采用可视化开发平台开发动态链接库(D LL),以实现地理信息系统工具软件未提供或难以实现的功能,然后在二次开发宏语言中调用此动态链接库,从而充分利用二次开发语言操纵地图对象的强大功能,又避免了二次开发语言功能上的不足。

这种开发方式省时省心,但进行二次开发的宏语言作为编程语言只能算是二流,功能极弱,用来开发应用程序仍然不尽如人意。

早期的商用GI S软件是以解释语言方式执行的,基本上提供了自己的二次开发方法和语言,它们的二次开发环境有明显的不足:
(1)语言千差万别,不易学习和掌握。

每种GIS 软件,都按照自己的习惯和自定义的语法规则提供二次开发环境,对于已熟悉一种开发环境的人来说,要重新学习新的开发环境的困难较大。

(2)解释执行,程序运行速度慢。

早期的GIS开发环境着眼于交互操作,对于速度并无太多的要求。

随着GIS应用的提高,要求提高软件处理的自动化程度,这就要求GIS下的应用程序能处理较大的数据量。

集成化要求的发展,要求GIS下的应用程序不仅要能处理交互任务,同时也要能处理相关的设计与计算。

(3)功能单一,综合处理功能差。

随着GIS应用层次的提高,不仅要求应用程序能进行图形交互,同时也应具备与操作系统交互的能力,甚至要求GIS的应用程序可以访问处于分布环境的数据。

1.3集成二次开发
集成二次开发是指利用专业G IS工具软件或其提供的组件来实现G IS的基本功能,同时,采用通用软件开发工具,尤其是可视化开发工具,如Delphi, VisualC++,Visual Basic,Power B uilder等作为开发平台,进行二者的集成开发。

集成二次开发目前主要有OL E P D DE方式和组件式开发两种开发方式。

(1)OL E P D DE开发方式
DD E起初是作为一种基于消息的协议在Windows(3.X)中实现的,用于在不同的Window s应用程序之间交换信息。

随着Windo w3.0的发布, DD E在很大程度上得到了简化,组合到应用程序的工作也变得较为容易。

对象链接与嵌入(Object Linking E mbedding,OL E)相比DD E出现得较晚,它是一个服务可控制、结构可扩展、基于对象集成的、统一的服务环境,是应用程序共享对象的工业标准,其实质是在应用程序中嵌入其它程序提供的对象和数据,从而获得特定功能的程序设计方法。

采用O LE自动化技术或利用D DE技术进行G IS集成二次开发的思路是:用软件开发工具开发前台可执行应用程序,以O LE自动化方式或D DE方式启动G IS工具软件在后台执行,利用回调技术动态取其返回信息,实现应用程序中的地理信息处理功能。

采用这种方法能够充分利用GIS工具软件强大的地理空间数据和属性数据管理能力以及可视化开发平台,实现地理信息开发。

(2)组件式GIS开发方式
组件式GIS(Components GIS,以下简称ComG IS)是指基于组件对象平台,具有标准的接口,允许跨语言应用,因而使GIS软件的可配置性、可扩展性和开放性更强,使用更灵活,二次开发更方便。

其基本思想是把G IS的各主要功能模块划分为几个组件,每个组件完成不同的功能。

各个GIS组件之间,以及G IS组件与其它非G IS组件之间,可以方便地通过可视化的软件开发工具集成起来,以形成最终的G IS应用。

目前的ComGIS基本上是采用ActiveX组件或者其前身O LE组件[3]。

本文接下来会提到基于E SRI公司的以C O M技术规范为基础的A rc Objects组件集。

基于C O M技术的组件式GIS的二次开发环境具有如下优越性:大众化,易操作;无须专门GIS 开发语言;强大的GI S功能;良好的可扩展性。

2基于ArcObjects的地理信息系统二次开发
Arc GIS是ES RI公司推出的地理信息系统处理软件系列,而ArcO bjec ts是实现ArcGIS的基础组件库。

ArcObjects组件具有层次关系,如图1所示。

Application处于A rcO bjects框架的最高层,拥有Display(显示)、Document(文档)、E xtension(扩展功能)三个组成部分。

D ocument位于稍微低的一个层次,但它可同时拥有几个下一级的M ap对象,每个M ap对象又可以拥有多个Layer对象。

Arc Objects提供的M apControl控件和SceneviewerControl控件位于M ap(Scene)层。

各级的各个对象(类)都有其自身的接口、属性、方法[4]。

2.1MapControl控件及相关类与接口
M apControl控件提供了类似Arc Map中的数据视图窗口,通过它用户可完成以下功能:显示图层地图;放大、缩小、漫游;标注地图元素;识别地图上被选中的元素,进行空间或属性查询。

将实现跟M apControl控件相关的GIS功能的各种类、接口与
)
66
)
图1ArcObjec ts组件的层次关系
M apControl控件挂接起来的两个核心类是M ap, M apControl两个组件类。

2.2SceneVie wer控件及相关类与接口
Scene View er控件提供了类似于A rcScene中的三维显示和分析窗口。

通过这个控件可实现如下功能:在三维场景中显示、操作空间数据;创建数字高层模型;进行基于数字高层模型的三维分析。

当用户向VC工程中加载Scene View er控件后,工程将自动加载一个与之对应的类CScene Vie werCtrl。

该类提供了各种基本的三维场景操作方法和属性。

将实现跟SceneViewer控件相关的GIS功能的各种类、接口与Scene Vie wer控件挂接起来的核心类是Scene, SceneG raph两个类[5]。

2.3Arc Objects结合VC++开发的具体过程
一个基于ArcObjects的VC++应用开发程序,首先要进行开发环境的配置,其次要将控件与相应的核心类、接口联系起来,然后通过核心类、接口连接相关的功能类和接口,从而实现需要的GI S功能。

2.3.1VC++环境配置
在VC++6.0下新建一个M FC工程[6],在stdafx.h 文件中添加导入如下组件文件:
#import d C:\arcgis\arce xe83\bin\esriC ore. olb d ra w interf aces only,ra w native types,no namespace,named guids,exclude(d OL E CO L OR d,d OL E HAND L E d)
2.3.2MapC ontrol控件的开发过程
首先,要将MapControl控件添加到VC++工程中,可使用VisualC++的Component Gallery来添加M apControl控件。

其次,若要实现MapControl控件与对应得核心类、接口的连接就需要在VC++工程的初始化函数中进行相应的挂接。

先将M apControl控件拖到对话框上,然后在对话框初始函数中添写如下代码: CWnd*pWndCal=GetDlgItem(IDC M A PC ON2 TROL1);
LP UN KN OW N pUnk=pW ndCal y G etControlUn2 kno wn();
pUnk y Q ueryInterface(IID I M apC ontrol2,(L PV OI D *)&m ipM apControl);
m ipMapControl y get Map(&m ipM ap);
上述代码中,m ipM ap是I M ap接口的一个对象,m ipMapC ontrol是I MapControl接口的一个对象。

经过上述过程,用户就可以通过I Map接口进行二维地图的显示和操作了。

2.3.3Scene View er控件的开发过程
首先,要将SceneVie wer控件添加到VC++工程中,按照上述添加M apControl控件的操作即可。

其次,若要实现SceneVie wer控件与对应得核心类、接口的连接就需要在V C++工程的初始化函数中进行相应的挂接。

先将Scene View er控件拖到对话框上,然后在对话框初始函数中添写如下代码:
m ipSceneG rap=m SceneVie werCtrl.Ge tScene2 Graph();
hr=m ipSceneGrap y get Scene(&m ip2 Scene);
上述代码中,m Scene Vie werCtrl是SceneViewer 控件对应的一个成员变量,m ipScene是I Scene接口的一个对象,m ipSceneG rap是ISceneGrap接口的一个对象。

经过上述过程,用户便可以进行三维显示和分析。

3结束语
在系统介绍了地理信息系统(GI S)的三种开发模式及各自的优缺点之后,对基于Arc Objects组件集的地理信息系统二次开发进行详细阐述。

随后采用Visual C++加载Arc Objects实现了GIS的二维和三维的二次开发。

这种C omGIS开发方法脱离了Arc GIS软件环境,不受ArcM ap,ArcCatalog,ArcScene 的限制,不需要额外的二次开发语言,只需熟悉基于Windo ws平台的通用集成开发环境(如Visual C++, Visual Basic,Delphi等)以及C omG IS各个控件(如M apControl,SceneVie werControl),用户就可以根据需要自定义系统的界面和GIS功能。

参考文献:
[1]周心铁,刘毓华.组件技术与GIS发展[EB P O L].http:P P w ww.gis2
P show.aspx?id=173&cid=26.20041
[2]刘仁义,刘南.ArcGIS开发宝典[M].北京:科学出版社,2006:
9-22.
[3]边前卫.基于视觉感受的三维地形生成方法的组件式开发技术
研究[D].沈阳:沈阳工业大学,2006:12-15.
[4]韩鹏,徐占华.地理信息系统开发[M].武汉:武汉大学出版社,
2005:10-42.
[5]康红霞.基于ArcGIS的三维景观建模技术研究[D].西安:西安
科技大学,2006:22-24.
[6]李鑫,白雪.Visual C++6.0编程基础与范例[M].北京:电子工
业出版社,2000:8-14.
责任编辑:肖滨
)
67
)。

相关文档
最新文档