第十一章 GIS组件开发_第1页
第十一章 GIS组件开发_第2页
第十一章 GIS组件开发_第3页
第十一章 GIS组件开发_第4页
第十一章 GIS组件开发_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章第十一章 GIS组件开发组件开发第一节第一节 ComGIS的基本概念的基本概念什么是组件式什么是组件式GIS? 组件式GIS,是将复杂的GIS功能按照对象、功能、应用等层次分解为可以互操作和自我管理的组件,这些组件由一种特定的平台或语言开发且能够在其它的平台或语言中重复使用。 简单地说,组件式组件式GIS就是采用了面向对象技术就是采用了面向对象技术和组件式软件的和组件式软件的GIS系统系统(包括基础平台和应用系统)宋关福等,1999。第一节第一节 ComGIS的基本概念的基本概念什么是组件式什么是组件式GIS? 组件式GIS分为COM组件和CORBA组件两种,分别由Microsoft和

2、OMG开发。COM是公共对象模型(Common Object Model)的英文缩写,微软官方称之为组件对象模型(Component Object Model) ,它是OLE(Object Linking & Embedding)和ActiveX共同的基础。基于分布式环境下的COM被称作DCOM(Distributed COM),它实现了COM对象与远程计算机上的另一个对象之间直接进行交互。 第一节第一节 ComGIS的基本概念的基本概念什么是组件式什么是组件式GIS? CORBA是公共对象请求代理体系结构(Common Object Request Broker Architectu

3、re)的英文缩写,是由对象管理工作组(OMG)开发的一个组件软件标准。OMG是由成千上百个公司组成的组织,他们致力于构建分布式对象计算的标准体系结构。CORBA基于对象管理体系结构,为厂商提供一个标准框架,使他们使用不同的语言、操作系统和硬件开发出来的应用系统,仍然具有可移植性和互操作性。 第一节第一节 ComGIS的基本概念的基本概念什么是什么是ComGIS? ComGIS是基于COM组件构建的组件式GIS。COM不是一种面向对象的语言,而是一种二进制标准,它建立的是一个软件模块与另一个软件模块之间的链接,当这种链接建立之后,模块之间就可以通过被称之为“接口”的机制来进行通信。COM标准增加

4、了保障系统和组件完整的安全机制,扩展到分布式环境的DCOM则支持分布式计算、交互操作和有限的移植。第一节第一节 ComGIS的基本概念的基本概念什么是什么是ComGIS? OLE是基于COM的可以使软件组件进行即插即用互操作的一种技术,其中使用了OCX控件。 ActiveX是一套基于COM的可以使软件组件在网络环境中进行互操作而不管该组件是用何种语言创建的技术集。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。此外,ActiveX一般具有界面。ActiveX 控件是ActiveX技

5、术中使用的一种可编程、可重用的基于COM的对象。第一节第一节 ComGIS的基本概念的基本概念什么是什么是ComGIS? ComGIS的基本思想是把GIS的各大功能模块划分为几个组件,每个组件完成不同的功能。各个GIS组件之间,以及GIS组件与其它非GIS组件之间,都可以方便地通过可视化的软件开发工具集成起来,形成最终的GIS基础平台以及应用系统。组件如同一堆各式各样的积木,它们分别实现不同的功能(包括GIS和非GIS功能),根据需要把实现各种功能的 “积木”搭建起来,就构成应用系统。第一节第一节 ComGIS的基本概念的基本概念为什么要使用为什么要使用ComGIS? 传统GIS虽然在功能上已

6、经比较成熟,但是它们多是属于独立封闭的系统。同时,由于GIS软件变得日益庞大,不仅用户难以掌握,而且费用昂贵,阻碍了GIS的普及和应用。ComGIS的出现为传统GIS面临的多种问题提供了全新的解决思路,已经成为当今软件技术的潮流之一比尔.盖茨,1997,为了适应这种技术潮流,“GIS软件象其它软件一样,已经或正在发生着革命性的变化,即由过去厂家提供了全部系统或者具有二次开发功能的软件,过渡到提供组件由用户自己再开发的方向上来”徐冠华, 1997。第二节第二节 ComGIS的特点的特点小巧灵活、价格便宜小巧灵活、价格便宜。在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,组件化的GIS

7、平台集中提供空间数据管理能力并且能以灵活的方式与数据库系统连接。在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统GIS开发工具的十分之一甚至更少。这样,用户便能以较好的性能价格比获得或开发GIS应用系统;第二节第二节 ComGIS的特点的特点高效无缝的系统集成高效无缝的系统集成。由于组件生产建立在严格的标准之上,因此,ComGIS可以嵌入通用的开发环境(如VB、VC、Delphi、PowerBuilder、Notes、Foxpro、Access等)中实现GIS功能,专业模型则可以使用这些通用开发环境来实现,也可以插入其它的专业性模型分析控件,这与传统GIS专门性开发环境相比,是一种质的

8、飞跃;专业模型ComGIS控件其他控件GIS应用集成系统Visual Basic 等可视集成开发环境第二节第二节 ComGIS的特点的特点强大的强大的GIS功能功能。新的GIS组件都是基于32位系统平台的,采用InProc直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统GIS软件逊色。小小的GIS组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力;第二节第二节 ComGIS的特点的特点大众化大众化。组件式技术已经成为业界标准,用户可以象使用其它ActiveX控件一样使用ComGIS组件,使非专业的普通用户也能够开发和集成GIS应用系统,推动了GIS

9、大众化进程。ComGIS 的出现使GIS不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的的可视化工具。第二节第二节 ComGIS的特点的特点开发简捷开发简捷。ComGIS不需要额外的GIS二次开发语言,只需按照Microsoft的ActiveX控件标准开发接口实现GIS的基本功能函数,这不仅有利于减轻GIS软件开发者的负担,而且增强了GIS软件的可扩展性。GIS应用开发人员只需熟悉基于Windows平台的通用集成开发环境,以及组件式GIS各个控件的属性、方法和事件,就可以像管理数据库表一样熟练地管理地图等空间数据,完成应用系统的开发和集成,无须对开发人员进行特殊的培训。C

10、omGIS与用户的交互与用户的交互 传统GIS软件与用户或者二次开发者之间的交互一般通过菜单或工具条按钮、命令以及二次开发语言进行,ComGIS与用户和客户程序之间则主要通过属性、方法和事件交互。ComGIS 控件(ActiveX 服务器)集成开发环境(ActiveX 容器)与其他COM组件方法事件属性第三节第三节 ComGIS开发方法开发方法ComGIS开发平台的结构开发平台的结构 ComGIS开发平台通常可设计为基础组件、高级通用组件和行业性组件三级结构。 基础组件处于平台最低层,是整个系统的基础,主要面向空间数据管理,提供基本的交互过程,并能以灵活的方式与数据库系统连接。第三节第三节 C

11、omGIS开发方法开发方法ComGIS开发平台的结构开发平台的结构 高级通用组件由基础组件(如显示工具组件、选择工具组件、编辑工具组件、属性浏览器组件等)构造而成,面向通用功能,简化用户开发过程,它们之间的协同控制消息都被封装起来,使二次开发更为简单(如一个编辑查询系统,若用基础平台开发,需要编写大量的代码,而利用高级通用组件,只需几句程序就够了)。第三节第三节 ComGIS开发方法开发方法ComGIS开发平台的结构开发平台的结构 行业性组件抽象出行业应用的特定算法并固化到组件中,进一步加速开发过程。以GPS监控为例。对于GPS应用,除了需要地图显示、信息查询等一般的GIS功能外,还需要特定的

12、应用功能(如动态目标显示、目标锁定、轨迹显示等)。这些GPS行业性应用功能组件被封装起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的颜色、锁定的目标以及调用、接受数据的方法等。第三节第三节 ComGIS开发方法开发方法ComGIS的实现形式的实现形式 目前,ComGIS主要有两种实现形式。 一种形式是由可以实现制图与一般GIS功能的ActiveX控件集构成的ComGIS,这些控件既可以通过属性、事件、方法等接口与应用程序进行交互,也可以在可视化开发环境中集成构成应用系统。国内外具有代表性的有:ESRI公司出品的MapObject、MapInfo公司推出的MapX、武汉吉奥公司研发的

13、GeoMap等。第三节第三节 ComGIS开发方法开发方法ComGIS的实现形式的实现形式 另一种形式的ComGIS是基于Microsoft COM技术构建一系列COM组件集,用户可以利用这些组件开发各种GIS功能并在此基础上构建GIS应用系统。这种开发模式更为底层,开发也较为复杂,功能更为强大,以ESRI公司的ArcObjects(简称AO)组件或ArcEngine (简称AE)为典型。 以上两种开发实现形式的软件都具有地图显示、图层控制、数据查询、地图符号化、专题地图等基本功能。第三节第三节 ComGIS开发方法开发方法基于基于ActiveX控件的控件的ComGIS开发方法开发方法 以Ac

14、tiveX控件形式设计ComGIS,需要根据功能划分为多个控件。划分控件需要根据不同的数据结构和系统模型进行具体分析,要考虑以下几个方面的问题:(1) 控件间差别最大、控件内差别最小;(2) 纯设计用模块与将随集成系统发布的模块分开(例如地图符号编辑、线型编辑器应与空间查询分析等模块分开);(3) 相同显示窗口的模块尽可能设计在同一个控件里;(4) 处理相同数据文件的模块尽可能设计在同一个控件里;(5) 剔除空间查询分析控件中不必要的内容,减少Internet下载的数据量。第三节第三节 ComGIS开发方法开发方法基于基于ActiveX控件的控件的ComGIS开发方法开发方法 考虑到以上因素,

15、 基于ActiveX控件的ComGIS可以划分为数据采集与编辑控件、图像处理控件、三维控件、数据转换控件、地图符号编辑/线性编辑控件、空间查询分析控件等。其中一些无须进行二次开发的模块不一定以组件方式提供,比如数据采集、数据转换、符号编辑/线型编辑等模块可以用独立运行程序方式提供,数据转换模块还可以编译成动态连接库。第三节第三节 ComGIS开发方法开发方法基于基于ActiveX控件的控件的ComGIS开发方法开发方法 基于ActiveX控件的ComGIS开发还要注意几个方面的问题:(1)代码优化和算法高效。尽管COM技术的二进制通信效率很高,但与独立运行程序比较运行速度上仍有差距,采用高效的

16、算法并精心优化代码可以使软件整体效率有较大改善;(2)数据结构紧凑、简练。在能够充分表达地理信息并能有效进行各种处理、分析的前提下,软件数据结构要尽可能紧凑,这不仅可以加快数据存取速度,同时也为适应Internet传递的需要;(3)数据引擎通用。除提供与各种GIS数据文件格式的数据转换程序外,ComGIS被设计为可以直接访问多种数据格式,可以提高数据共享方面的能力(例如Intergraph的GeoMedia可以直接访问ArcView、MGE等著名软件的数据格式)。第三节第三节 ComGIS开发方法开发方法基于基于AO/AE的的ComGIS开发方法开发方法 在VB开发环境中,首先通过Refere

17、nces将ESRI Object Library(esriCore.olb库)引用进来。然后根据应用,选择或查找相关的AO/AE组件类及其接口和要使用的方法与属性,编写实现代码。如在MapControl控件中添加一个空的Feature 图层,其操作为:Dim pLayer As IFeatureLayer/定义接口变量Set pLayer = New FeatureLayer/实例化变量mapControl1.ActiveView.FocusMap.AddLayer pLayer/添加图层第三节第三节 ComGIS开发方法开发方法基于基于AO/AE的的ComGIS开发方法开发方法 在VC+开发

18、环境中,也需要引用AO/AE组件的核心库,在相应工程的.h头文件中添加如下语句:#import “C:arcgisarcexe92binesriCore.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids , exclude (OLE_COLOR, OLE_HANDLE),就可运用AO/AE提供的接口编程。但是,VC中的定义方式与VB中不同,VC采用智能指针来定义接口,接口定义时须在接口名后添加“Ptr”,实例化既可同时进行也可以另行定义。以上例中的功能为例,主要代码如下: 第三节第三节 ComGIS开发方法

19、开发方法基于基于AO/AE的的ComGIS开发方法开发方法IFeatureLayerPtr pLayer(CLSID_ FeatureLayer); /定义接口并实例化IMapPtr pMap;pMap .CreateInstance (CLSID_Map);/以上两句与“IMapPtr pMap(CLSID_Map);”等价pMap-AddLayer(pLayer);在实际开发中,编程语言的选择,根据具体的需要来定。一般来说,用VB开发效率高,投入少,周期短,更适合功能紧凑的中小型应用系统;采用VC开发,功能强大,可扩展性好,执行效率高,但系统花销较大,开发周期较长,适合功能齐备、深度开发的

20、大型应用系统。第三节第三节 ComGIS开发方法开发方法基于基于AO/AE的的ComGIS开发方法开发方法 在VC#开发环境中,可通过直接引用如下AO/AE组件的核心库进行接口编程:ESRI.ArcGIS.ReaderControl, ESRI.ArcGIS.Carto,ESRI.ArcGIS. Controls, ESRI.ArcGIS.MapControl,ESRI.ArcGIS.DataSourceFile, ESRI.ArcGIS.Display,ESRI.ArcGIS.Geodatabase, ESRI.ArcGIS.Geometry,ESRI.ArcGIS.PageLayoutCo

21、ntrol, ESRI.ArcGIS.System,ESRI.ArcGIS.SystemUI第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件简介组件简介 AO组件是ESRI公司推出的ArcGIS家族中应用程序ArcMap、ArcCatalog和ArcScene的开发平台,是基于微软的组件对象模型(COM)技术开发的一系列COM组件集,它提供了1800多个单独的基于COM的组件、几百个具有良好文档说明的接口及数千个方法,其中囊括了ArcInfo和ArcView中实现的所有功能,开发人员可以使用任何一种兼容COM的编程语言扩展AO组件,定制符合自己要求的组件。因为基于

22、COM工业标准,用AO开发的应用程序与主流IT是兼容的、开放的、可移植的,很容易融合到一个机构的系统中。ArcGIS三大应用程序模块三大应用程序模块AO基本体系结构基本体系结构AO应用程序接口应用程序接口第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件简介组件简介 在目前常用的ArcGIS 9.X版本的AO开发中,有MapControl和PageLayoutControl 2个主要的高级通用控件,它们由AO基础组件集成而成,向用户提供地图视图窗口。MapControl控件提供了类似ArcMap中的数据视图(Data View)的视图窗口,该窗口可以使地图数据布满整

23、个客户区,便于对地图数据进行操作(如地图显示、要素编辑、空间和属性数据查询、地图数据分析等)。PageLayoutControl控件提供了类似ArcMap中的版面视图(Layout View)的视图窗口,该窗口主要用于制图输出,可以进行制图版面设置、辅助要素设置、制图数据操作、地图整饰操作等操作。通过以上两个控件可以实现ArcMap中的绝大部分功能。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件简介组件简介 另外,ArcGIS 9.X版本还提供了SceneViewer控件,主要为ArcGIS 3D分析扩展模块提供三维可视化视图窗口,同样可应用于AO组件编程。用用

24、ArcGIS进行二次开发,先学进行二次开发,先学AO还是直接学还是直接学AE?用用ArcGIS进行二次开发,先学进行二次开发,先学AO还是直接学还是直接学AE?刚接触刚接触ArcGIS二次开发时都会有这种疑惑。其实二次开发时都会有这种疑惑。其实AO和和AE的的区别不大,它们只是少数地方不同而已(最主要的区别是极区别不大,它们只是少数地方不同而已(最主要的区别是极个别个别AO中的接口在中的接口在AE中不能用,做二次开发时间长了就能中不能用,做二次开发时间长了就能真正理解了),所以刚开开始学的时候不要过于计较到底是真正理解了),所以刚开开始学的时候不要过于计较到底是学学AO还是还是AE。无论是。无

25、论是AO开发还是开发还是AE开发,主要就是学习开发,主要就是学习要实现的功能用什么接口去实现,而它们两个的接口大多数要实现的功能用什么接口去实现,而它们两个的接口大多数情况下用法是一样的。学习情况下用法是一样的。学习ArcGIS二次开发只靠一本书是二次开发只靠一本书是不行的,要想快速提高还是要多写代码、多上网看资料、多不行的,要想快速提高还是要多写代码、多上网看资料、多到论坛问问题,还有学会看帮助文档和到论坛问问题,还有学会看帮助文档和OMD(对象模型图对象模型图),因为这样可以让你举一反三更加灵活地进行二次开发。因为这样可以让你举一反三更加灵活地进行二次开发。建议:建议:(1)学习学习Arc

26、GIS二次开发前熟练操作二次开发前熟练操作ArcMap(非常必(非常必要),这样可以更深入更形象地了解接口;要),这样可以更深入更形象地了解接口;(2)学习学习ArcGIS二次开发前至少要对类、对象和接口有个基本的认识。二次开发前至少要对类、对象和接口有个基本的认识。 第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件简介组件简介 AO是随ArcGIS产品一同发布的,必须在ArcGIS Desktop上才能利用AO提供的组件对象来进行应用开发。ArcGIS Engine是在ArcGIS9系列中发布的一个基于AO的新产品,实现了比AO更好的封装,是一个独立的产品。第四

27、节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE的特点的特点 1.采用面向对象思想、基于组件技术; 2.支持广泛的空间数据格式,如ESRI Shape files、 ArcInfo Coverages、AutoCAD的DXF和DWG、ArcSDE layers、ESRI Geodatabase、VPF及各种栅格图像等; 3.具有强大的GIS功能,可以实现从空间数据编辑到三维显示与分析等一系列操作和空间数据管理。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE的功能的功能 ArcMap、ArcCatalog和ArcScene这三个应用程序都是由AO

28、搭建起来的,因此从理论上讲这些应用程序能完成的任务,通过AO同样可以完成(空间数据显示、查询检索、编辑和分析,创建各种专题图和统计报表,高级制图和输出,空间数据管理和维护以及三维可视化)。具体地说,主要有:第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE的功能的功能 1.强大的符号库系统; 2.方便高效的地图显示功能; 3.强大灵活的空间数据编辑功能; 4.强大的制图功能; 5.强大的空间分析功能; 6.丰富的三维显示和三维分析功能; 7.强大的空间数据管理功能; 8.对动态目标的追踪功能。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件

29、开发类型组件开发类型VBA的开发方式。利用嵌入ArcCatalog和ArcMap中的VBA宏进行嵌入式开发,可以快速地实现针对特殊需求的功能扩展和界面的定制。这是最简单快速的方法,是有效利用现有平台与数据的首选开发方式,缺点是不能脱离桌面软件独立运行;利用利用VBA对对ArcMap进行定制进行定制第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件开发类型组件开发类型创建自己的COM组件。采用任意一种支持COM的高级语言(如VC、VB、Delphi等),在AO/AE组件的基础上进一步创建自己的COM组件,定义自己的接口、属性、方法,底层功能调用AO/AE组件加以实现以

30、满足各种特殊的需求。这种方法生成的COM组件具有很大的灵活性,可以应用在由任何支持COM的语言开发的独立应用程序中,但这种开发方法需要较高的组件开发技术;基于基于COM的二次开发的二次开发基于基于COM的二次开发的二次开发第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE组件开发类型组件开发类型开发独立的应用程序。在支持COM的高级编程语言环境下,应用AO/AE组件提供的强大功能,自行开发符合要求的专业化GIS系统。这种开发方式首先要引用AO/AE组件的核心库esriCore.olb,然后根据COM编程的特点,利用接口编写代码。其优点是:开发人员可以根据系统的实际需要,

31、从组件库中选择需要应用的组件快速整合系统,所生成的应用程序不依赖于ArcGIS桌面版软件而独立运行,为专业人士提供了方便、友好的操作方式。缺点是该方式开发难度较大。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE开发需要的技术基础开发需要的技术基础面向对象技术COM技术支持COM的各种开发工具及其环境(如VB、VC、DEPHI等)AO各组件对象的层次组织和相互关系第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE开发方法开发方法 AO/AE组件提供了3种类型的类普通类(Class) 、抽象类(AbstractClass) 和组件类(CoClas

32、s)。普通类可以通过其它类的实例化而不能直接创建对象,其对象可以作为其它类的一个属性。抽象类不能创建对象,只能作为其它类的父类,其主要目的是为其子类定义公共接口。组件类可以显式地创建对象。 AO/AE中的Dataset或Geometry classes是抽象类,它不能创建Geometry类的对象,而Polyline是组件类,可以创建Polyline类的对象。这个Polyline对象实际上在类的基础上实现了Geometry中定义的接口,因此在基类对象中被定义的接口可以从coclass来访问。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE开发方法开发方法 AO/AE组件

33、是基于COM标准定义的,在实现上也完全遵循该规范,每个功能都需要通过接口来实现。 接口设计必须满足:1.必须直接或间接地从IUNKNOWN接口继承(该接口在AO中是省缺的);2.接口必须有唯一的标识符号;3.接口不变性,即一旦分配和公布了ID,接口定义的任何因素都不能改变。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO开发工具包开发工具包ADK(ArcObjects Developer Kit) ADK是进行基于AO应用程序开发所必需的(在AE下称为SDK),可以选择在安装ArcGIS Desktop时或在任何时候使用光盘安装,安装后的目录结构包括:Help包含开发帮助文

34、件AODev.chm、ArcObjects.chm等 Kits附加的开发者素材,诸如投影引擎头文件,类别ID文件和ESRI 示例命令的源代码(在9.x版本中,该代码位置有所变化) Object Model Diagrams包括所有的PDF格式对象模型图Samples包含所有示例工程文件的源代码Utilities包含ESRI 对象浏览器等工具第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE运行库运行库Runtime Runtime是编译调试程序所必循的运行环境,开发时要使用runtime+sdk,部署时用户那里只需要runtime和开发的程序。 第四节第四节 ComGI

35、S开发实践开发实践以以AO/AE为例为例AO/AE开发资源开发资源1.ArcObjects Developer Help,这是AO开发的首选资源,不管是AO的基础COM、AO的对象层次图都提供了说明,此外还提供了大量的开发示例;2.ArcObjects Online,提供了最新的AO组件库文档,其中有一个关于AO的技术论坛,非常实用;3.Exploring ArcObjects,一本很不错的AO技术文档,对AO的开发进行了很好的组织,而且有大量的示例,可以随时复制利用;第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE开发资源开发资源4.Building a Geoda

36、tabase,应用都是围绕数据来展开的,这本书主要是用来设计和创建Geodatabase的,但理解和掌握Geodatabase的层次和建模方法,对AO开发是很好的补充;5.Microsoft MSDN,即使你的AO开发工具不是微软的,也建议安装一套完整的MSDN,想多了解和应用COM进行设计开发,MSDN是个宝藏。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE的核心组件库的核心组件库esriSystem.olb、esriSystemUI.olb、esriGeometry.olb、esriDisplay.olb、esriGeoDatabase.olb、esriCart

37、o.olb、esriDataSourcesFile.olb、ToolbarControl.ocx、TOCControl.ocx、MapControl.ocx、PageLayoutControl.ocx、ArcReaderControl.ocx。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE控件、类、接口之间的关系控件、类、接口之间的关系 第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE中的核心类与接口中的核心类与接口1.与MapControl控件相关的核心类与接口(1)Map组件类:功能是作为显示和操作地图数据的容器,其主要接口是IMap,

38、它是AO/AE各种功能类与接口在MapControl控件上进行体现的入口,通过它可以访问各种不同来源的图层数据,可以添加、删除图层数据,可以关联比例尺、图例等各种图面要素,可以获得感兴趣区域、地图坐标单位和空间参考等有关地图的各种属性信息;第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE中的核心类与接口中的核心类与接口1.与MapControl控件相关的核心类与接口(2)MapControl组件类:在封装Map类基础上扩展了属性、方法和事件,通过IMapControl接口可以控制地图的基本表现形式、显示属性和地图控件的属性,可以添加并管理与控件关联的图层数据,可以导入

39、地图文档,可以将其它应用中的地图数据拖放到当前应用中来。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE中的核心类与接口中的核心类与接口2.与SceneViewer控件相关的核心类与接口(1)Scene组件类:功能是作为在三维场景中显示和操作地图数据的容器,其主要接口是IScene,它是AO/AE各种功能类与接口在SceneViewer控件上进行体现的入口,通过它可以访问三维场景中各种不同来源的图层数据,可以添加、删除三维场景中的图层数据,可以设置背景色等三维场景的一些基本属性,可以设置场景的空间参考属性;第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为

40、例AO/AE中的核心类与接口中的核心类与接口2.与SceneViewer控件相关的核心类与接口(2)SceneGraph组件类:功能是作为存储三维场景中的空间数据和与三维场景相关事件的容器,其主要接口是ISceneGraph,它提供了控制和操纵SceneGraph的方法和属性。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE应用开发的基本过程应用开发的基本过程 一个基于AO/AE应用开发,首先要将控件与相应的核心类、接口联系起来,然后通过核心类、接口连接相关的功能类和接口,从而实现需要的GIS功能。第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/

41、AE应用开发的基本过程(应用开发的基本过程(VC+6.0) 1.基于MapControl控件的开发void CAoExView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();/ 获取MapControl指针 m_ipMapControl = GetDlgItem(IDC_MAPCONTROL1) -GetControlUnknown();第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例AO/AE应用开发的基本过程(应用开发的基本过程

42、(VC+6.0) 2.基于SceneViewer控件的开发 hr = m_SceneViewerCtrl.GetSceneGraph() -GetScene(&m_ipScene);第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作地图图层控制和地图浏览操作添加图层数据(shp文件、CAD文件和影像文件)图层控制(添加与删除、层间关系调整和显示控制)地图浏览(放大、缩小与漫游)第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0) 首先建立以窗口视图类FormView

43、为基类的MFC项目,在Form窗体中利用右键快捷菜单项Insert ActiveX Controls添加添加ESRI LicenseControl和和ESRI MapControl两个控件两个控件,然后通过修改ESRI MapControl的属性加载一个地图文档或图层。 在StdAfx.h中添加头文件#include atlbase.h以及如下代码:第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)/ AO引入库#pragma warning(push)#pragma warning(disable: 4192

44、)#pragma warning(disable: 4146)#import C:Program FilesArcGIScomesriSystem.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude(OLE_COLOR, OLE_HANDLE, VARTYPE, IStatusBar)#import C:Program FilesArcGIScomesriSystemUI.olb raw_interfaces_only, raw_native_types, no_namespace, nam

45、ed_guids, exclude(IProgressDialog), rename(ICommand,IESRICommand)#import C:Program FilesArcGIScomesriGeometry.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids#import C:Program FilesArcGIScomesriDisplay.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids第四节第四节 Com

46、GIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)#import C:Program FilesArcGIScomesriGeoDatabase.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids, rename(IRow,IESRIRow), rename(ICursor,IESRICursor)#import C:Program FilesArcGIScomesriCarto.olb raw_interfaces_only, raw_nati

47、ve_types, no_namespace, named_guids, exclude(UINT_PTR),rename(ITableDefinition,IESRITableDefinition) #import C:Program FilesArcGIScomesriDataSourcesFile.olb raw_interfaces_only, raw_native_types, no_namespace, named_guids#import C:Program FilesArcGIScomesriDataSourcesGDB.olb raw_interfaces_only, raw

48、_native_types, no_namespace, named_guids, exclude(OLE_COLOR, OLE_HANDLE)#import C:Program FilesArcGISbinToolbarControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)#import C:Program FilesArcGISbinTOCControl.ocx ra

49、w_interfaces_only raw_native_types no_namespace named_guids exclude(esriControlsMousePointer,esriControlsDragDropEffect,esriControlsDropAction,esriControlsAppearance,esriControlsBorderStyle)#import C:Program FilesArcGISbinMapControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#i

50、mport C:Program FilesArcGISbinPageLayoutControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#import C:Program FilesArcGISbinArcReaderControl.ocx raw_interfaces_only raw_native_types no_namespace named_guids#pragma warning(pop) 第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制

51、和地图浏览操作(VC+6.0) 定义地图控件变量并使窗口初始化:IMapControl3Ptr m_ipMapControl; / 地图控件地图控件void OnInitialUpdate() CFormView:OnInitialUpdate(); GetParentFrame()-RecalcLayout(); ResizeParentToFit(); / 获取MapControl指针 m_ipMapControl=GetDlgItem(IDC_MAPCONTROL1)-GetControlUnknown();第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地

52、图浏览操作(地图图层控制和地图浏览操作(VC+6.0) 地图控件随窗口改变大小:void OnSize(UINT nType, int cx, int cy) CFormView:OnSize(nType, cx, cy); / View窗口改变大小时改变MapControl大小 if(m_ipMapControl!=NULL) CRect rc; GetClientRect(rc); GetDlgItem(IDC_MAPCONTROL1)-MoveWindow(rc); 第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(V

53、C+6.0) 在工具栏内设置选择、平移、放大、缩小、全图五个按钮并添加一个标志当前鼠标操作状态的成员变量:esriARTool m_ARTool; / 鼠标当前状态鼠标当前状态上述五个按钮的响应函数如下:第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)/ 选择状态void OnMapArrow() m_ARTool = esriARToolNoneSelected; m_ipMapControl-put_MousePointer(esriPointerDefault);/ 地图平移void OnMapPan(

54、) m_ARTool = esriARToolMapPan; m_ipMapControl-put_MousePointer(esriPointerPan);第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)/ 地图放大void OnMapZoomin() m_ARTool = esriARToolMapZoomIn; m_ipMapControl-put_MousePointer(esriPointerZoomIn); / 地图缩小void OnMapZoomout() m_ARTool = esriARTo

55、olMapZoomOut; m_ipMapControl-put_MousePointer(esriPointerZoomOut);第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)/ 显示全图void OnMapFullextent() IActiveViewPtr ipActiveView; HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView); if (FAILED(hr) return; IEnvelopePtr ipEnvelope;

56、hr = ipActiveView-get_FullExtent(&ipEnvelope); if (FAILED(hr) return; ipActiveView-put_Extent(ipEnvelope); ipActiveView-Refresh();第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0) 工具栏按钮的鼠标事件(MapControl控件响应)函数如下:void OnonMouseDownMapcontrol1(long button, long shift, long x, long

57、 y, double mapX, double mapY) if(1 = button) / 鼠标左键按下 IActiveViewPtr ipActiveView; HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView); if (ipActiveView = NULL) return ; switch(m_ARTool) case esriARToolNoneSelected: break; 第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0) 工

58、具栏按钮的鼠标事件(MapControl控件响应)函数如下: case esriARToolMapZoomIn: / 地图放大 IEnvelopePtr ipEnvelope; hr = ipActiveView-get_Extent(&ipEnvelope); if (FAILED(hr) return ; hr = m_ipMapControl-TrackRectangle(&ipEnvelope); if (FAILED(hr) return ; if(ipEnvelope = NULL) return ; double XMin,YMin,XMax,YMax; XMin

59、=YMin=XMax=YMax=0.0; if(S_OK !=ipEnvelope-get_XMin(&XMin) XMin = 0.0; if(S_OK !=ipEnvelope-get_YMin(&YMin) YMin = 0.0; if(S_OK !=ipEnvelope-get_XMax(&XMax) XMax = 0.0; if(S_OK !=ipEnvelope-get_YMax(&YMax) YMax = 0.0;第四节第四节 ComGIS开发实践开发实践以以AO/AE为例为例地图图层控制和地图浏览操作(地图图层控制和地图浏览操作(VC+6.0)

60、工具栏按钮的鼠标事件(MapControl控件响应)函数如下: if(XMin!=XMax&YMin!=YMax) / 用户拉框选择区域放大 ipActiveView-put_Extent(ipEnvelope); ipActiveView-Refresh(); else / 用户点击进行放大 ipActiveView-get_Extent(&ipEnvelope); if (FAILED(hr) return ; IPointPtr ipPoint(CLSID_Point); ipPoint-put_X(mapX); ipPoint-put_Y(mapY); / 设置中心点为用户点击为主 ipEnvelope-CenterAt(ipPoint);第四节第四节 ComGIS开发实践开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论