资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,ComGIS,基本概念,ComGIS,特点,ComGIS,开发方法,ComGIS,开发实践,以,ArcObjects/ArcEngine,为例,第十一章,GIS,组件开发,1,第一节,ComGIS,的基本概念,什么是组件式,GIS,?,组件式,GIS,,是将复杂的,GIS,功能按照对象、功能、应用等层次分解为可以互操作和自我管理的组件,这些组件由一种特定的平台或语言开发且能够在其它的平台或语言中重复使用。,简单地说,,组件式,GIS,就是采用了面向对象技术和组件式软件的,GIS,系统,(包括基础平台和应用系统)宋关福等,1999。,2,第一节,ComGIS,的基本概念,什么是组件式,GIS,?,组件式,GIS,分为,COM,组件和,CORBA,组件两种,分别由,Microsoft,和,OMG,开发,。COM,是公共对象模型,(Common Object Model),的英文缩写,,微软官方称之为组件对象模型(,Component Object Model),,它是,OLE(Object Linking&Embedding),和,ActiveX,共同的基础,。,基于分布式环境下的,COM,被称作,DCOM(Distributed COM),,它实现了,COM,对象与远程计算机上的另一个对象之间直接进行交互。,3,第一节,ComGIS,的基本概念,什么是组件式,GIS,?,CORBA,是公共对象请求代理体系结构(,Common Object Request Broker Architecture),的英文缩写,,是由对象管理工作组(,OMG),开发的一个组件软件标准。,OMG,是由成千上百个公司组成的组织,他们致力于构建分布式对象计算的标准体系结构。,CORBA,基于对象管理体系结构,为厂商提供一个标准框架,使他们使用不同的语言、操作系统和硬件开发出来的应用系统,仍然具有可移植性和互操作性。,4,第一节,ComGIS,的基本概念,什么是,ComGIS,?,ComGIS,是基于,COM,组件构建的组件式,GIS。COM,不是一种面向对象的语言,而是一种二进制标准,它建立的是一个软件模块与另一个软件模块之间的链接,当这种链接建立之后,模块之间就可以通过被称之为,“,接口,”,的机制来进行通信。,COM,标准增加了保障系统和组件完整的安全机制,扩展到分布式环境的,DCOM,则支持分布式计算、交互操作和有限的移植。,5,第一节,ComGIS,的基本概念,什么是,ComGIS,?,OLE,是基于,COM,的可以使软件组件进行即插即用互操作的一种技术,其中使用了,OCX,控件,。,ActiveX,是一套基于,COM,的可以使软件组件在网络环境中进行互操作而不管该组件是用何种语言创建的技术集。作为针对,Internet,应用开发的技术,,ActiveX,被广泛应用于,WEB,服务器以及客户端的各个方面。同时,,ActiveX,技术也被用于方便地创建普通的桌面应用程序。此外,,ActiveX,一般具有界面。,ActiveX,控件是,ActiveX,技术中使用的一种可编程、可重用的基于,COM,的对象。,6,第一节,ComGIS,的基本概念,什么是,ComGIS,?,ComGIS,的基本思想是把,GIS,的各大功能模块划分为几个组件,每个组件完成不同的功能。各个,GIS,组件之间,以及,GIS,组件与其它非,GIS,组件之间,都可以方便地通过可视化的软件开发工具集成起来,形成最终的,GIS,基础平台以及应用系统。组件如同一堆各式各样的积木,它们分别实现不同的功能(包括,GIS,和非,GIS,功能),根据需要把实现各种功能的,“,积木,”,搭建起来,就构成应用系统。,7,第一节,ComGIS,的基本概念,为什么要使用,ComGIS,?,传统,GIS,虽然在功能上已经比较成熟,但是它们多是属于独立封闭的系统。同时,由于,GIS,软件变得日益庞大,不仅用户难以掌握,而且费用昂贵,阻碍了,GIS,的普及和应用。,ComGIS,的出现为传统,GIS,面临的多种问题提供了全新的解决思路,已经成为当今软件技术的潮流之一比尔.盖茨,1997,为了适应这种技术潮流,,“,GIS,软件象其它软件一样,已经或正在发生着革命性的变化,即由过去厂家提供了全部系统或者具有二次开发功能的软件,过渡到提供组件由用户自己再开发的方向上来,”,徐冠华,1997。,8,第二节,ComGIS,的特点,小巧灵活、价格便宜,。在组件模型下,各组件都集中地实现与自己最紧密相关的系统功能,组件化的,GIS,平台集中提供空间数据管理能力并且能以灵活的方式与数据库系统连接。在保证功能的前提下,系统表现得小巧灵活,而其价格仅是传统,GIS,开发工具的十分之一甚至更少。这样,用户便能以较好的性能价格比获得或开发,GIS,应用系统;,9,第二节,ComGIS,的特点,高效无缝的系统集成,。由于组件生产建立在严格的标准之上,因此,,ComGIS,可以嵌入通用的开发环境(如,VB、VC、Delphi、PowerBuilder、Notes、Foxpro、Access,等,),中实现,GIS,功能,专业模型则可以使用这些通用开发环境来实现,也可以插入其它的专业性模型分析控件,这与传统,GIS,专门性开发环境相比,是一种质的飞跃;,10,第二节,ComGIS,的特点,强大的,GIS,功能,。新的,GIS,组件都是基于32位系统平台的,采用,InProc,直接调用形式,所以无论是管理大数据的能力还是处理速度方面均不比传统,GIS,软件逊色。小小的,GIS,组件完全能提供拼接、裁剪、叠合、缓冲区等空间处理能力和丰富的空间查询与分析能力;,11,第二节,ComGIS,的特点,大众化,。组件式技术已经成为业界标准,用户可以象使用其它,ActiveX,控件一样使用,ComGIS,组件,使非专业的普通用户也能够开发和集成,GIS,应用系统,推动了,GIS,大众化进程。,ComGIS,的出现使,GIS,不仅是专家们的专业分析工具,同时也成为普通用户对地理相关数据进行管理的的可视化工具。,12,第二节,ComGIS,的特点,开发简捷,。,ComGIS,不需要额外的,GIS,二次开发语言,只需按照,Microsoft,的,ActiveX,控件标准开发接口实现,GIS,的基本功能函数,这不仅有利于减轻,GIS,软件开发者的负担,而且增强了,GIS,软件的可扩展性。,GIS,应用开发人员只需熟悉基于,Windows,平台的通用集成开发环境,以及组件式,GIS,各个控件的属性、方法和事件,就可以像管理数据库表一样熟练地管理地图等空间数据,完成应用系统的开发和集成,无须对开发人员进行特殊的培训。,13,ComGIS,与用户的交互,传统,GIS,软件与用户或者二次开发者之间的交互一般通过菜单或工具条按钮、命令以及二次开发语言进行,,ComGIS,与用户和客户程序之间则主要通过属性、方法和事件交互。,14,第三节,ComGIS,开发方法,ComGIS,开发平台的结构,ComGIS,开发平台通常可设计为基础组件、高级通用组件和行业性组件三级结构。,基础组件处于平台最低层,是整个系统的基础,主要面向空间数据管理,提供基本的交互过程,并能以灵活的方式与数据库系统连接。,15,第三节,ComGIS,开发方法,ComGIS,开发平台的结构,高级通用组件由基础组件(如显示工具组件、选择工具组件、编辑工具组件、属性浏览器组件等)构造而成,面向通用功能,简化用户开发过程,它们之间的协同控制消息都被封装起来,使二次开发更为简单(如一个编辑查询系统,若用基础平台开发,需要编写大量的代码,而利用高级通用组件,只需几句程序就够了)。,16,第三节,ComGIS,开发方法,ComGIS,开发平台的结构,行业性组件抽象出行业应用的特定算法并固化到组件中,进一步加速开发过程。以,GPS,监控为例。对于,GPS,应用,除了需要地图显示、信息查询等一般的,GIS,功能外,还需要特定的应用功能(如动态目标显示、目标锁定、轨迹显示等)。这些,GPS,行业性应用功能组件被封装起来后,开发者的工作就可简化为设置显示目标的图例、轨迹显示的颜色、锁定的目标以及调用、接受数据的方法等。,17,第三节,ComGIS,开发方法,ComGIS,的实现形式,目前,,ComGIS,主要有两种实现形式。,一种形式是由可以实现制图与一般,GIS,功能的,ActiveX,控件集构成的,ComGIS,,这些控件既可以通过属性、事件、方法等接口与应用程序进行交互,也可以在可视化开发环境中集成构成应用系统。国内外具有代表性的有:,ESRI,公司出品的,MapObject、MapInfo,公司推出的,MapX、,武汉吉奥公司研发的,GeoMap,等。,18,第三节,ComGIS,开发方法,ComGIS,的实现形式,另一种形式的,ComGIS,是基于,Microsoft COM,技术构建一系列,COM,组件集,用户可以利用这些组件开发各种,GIS,功能并在此基础上构建,GIS,应用系统。这种开发模式更为底层,开发也较为复杂,功能更为强大,以,ESRI,公司的,ArcObjects(,简称,AO),组件或,ArcEngine(,简称,AE),为典型。,以上两种开发实现形式的软件都具有地图显示、图层控制、数据查询、地图符号化、专题地图等基本功能。,19,第三节,ComGIS,开发方法,基于,ActiveX,控件,的,ComGIS,开发方法,以,ActiveX,控件形式设计,ComGIS,,需要根据功能划分为多个控件。划分控件需要根据不同的数据结构和系统模型进行具体分析,要考虑以下几个方面的问题:(1)控件间差别最大、控件内差别最小;(2)纯设计用模块与将随集成系统发布的模块分开(例如地图符号编辑、线型编辑器应与空间查询分析等模块分开);(3)相同显示窗口的模块尽可能设计在同一个控件里;(4)处理相同数据文件的模块尽可能设计在同一个控件里;(5)剔除空间查询分析控件中不必要的内容,减少,Internet,下载的数据量。,20,第三节,ComGIS,开发方法,基于,ActiveX,控件,的,ComGIS,开发方法,考虑到以上因素,基于,ActiveX,控件的,ComGIS,可以划分为数据采集与编辑控件、图像处理控件、三维控件、数据转换控件、地图符号编辑/线性编辑控件、空间查询分析控件等。其中一些无须进行二次开发的模块不一定以组件方式提供,比如数据采集、数据转换、符号编辑/线型编辑等模块可以用独立运行程序方式提供,数据转换模块还可以编译成动态连接库。,21,第三节,ComGIS,开发方法,基于,ActiveX,控件,的,ComGIS,开发方法,基于,ActiveX,控件的,ComGIS,开发还要注意几个方面的问题:(1)代码优化和算法高效。尽管,COM,技术的二进制通信效率很高,但与独立运行程序比较运行速度上仍有差距,采用高效的算法并精心优化代码可以使软件整体效率有较大改善;(2)数据结构紧凑、简练。在能够充分表达地理信息并能有效进行各种处理、分析的前提下,软件数据结构要尽可能紧凑,这不仅可以加快数据存取速度,同时也为适应,Internet,传递的需要;(3)数据引擎通用。除提供与各种,GIS,数据文件格式的数据转换程序外,,ComGIS,被设计为可以直接访问多种数据格式,可以提高数据共享方面的能力(例如,Intergraph,的,GeoMedia,可以直接访问,ArcView、MGE,等著名软件的数据格式)。,22,第三节,ComGIS,开发方法,基于,AO/AE,的,ComGIS,开发方法,在,VB,开发环境中,首先通过,References,将,ESRI Object Library(esriCore.olb,库)引用进来。然后根据应用,选择或查找相关的,AO/AE,组件类及其接口和要使用的方法与属性,编写实现代码。如在,MapControl,控件中添加一个空的,Feature,图层,其操作为:,Dim pLayer As IFeatureLayer,/,定义接口变量,Set pLayer=New FeatureLayer,/,实例化变量,mapControl1.ActiveView.FocusMap.AddLayer pLayer,/,添加图层,23,第三节,ComGIS,开发方法,基于,AO/AE,的,ComGIS,开发方法,在,VC+,开发环境中,也需要引用,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,”,,,实例化既可同时进行也可以另行定义。以上例中的功能为例,主要代码如下:,24,第三节,ComGIS,开发方法,基于,AO/AE,的,ComGIS,开发方法,IFeatureLayerPtr pLayer(CLSID_ FeatureLayer);,/,定义接口并实例化,IMapPtr pMap;,pMap.CreateInstance(CLSID_Map);,/,以上两句与,“,IMapPtr pMap(CLSID_Map);,”,等价,pMap-AddLayer(pLayer);,在实际开发中,编程语言的选择,根据具体的需要来定。一般来说,用,VB,开发效率高,投入少,周期短,更适合功能紧凑的中小型应用系统;采用,VC,开发,功能强大,可扩展性好,执行效率高,但系统花销较大,开发周期较长,适合功能齐备、深度开发的大型应用系统。,25,第三节,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.PageLayoutControl,ESRI.ArcGIS.System,ESRI.ArcGIS.SystemUI,26,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件简介,AO,组件是,ESRI,公司推出的,ArcGIS,家族中应用程序,ArcMap、ArcCatalog,和,ArcScene,的开发平台,是基于微软的组件对象模型(,COM),技术开发的一系列,COM,组件集,它提供了1800多个单独的基于,COM,的组件、几百个具有良好文档说明的接口及数千个方法,其中囊括了,ArcInfo,和,ArcView,中实现的所有功能,开发人员可以使用任何一种兼容,COM,的编程语言扩展,AO,组件,定制符合自己要求的组件。因为基于,COM,工业标准,用,AO,开发的应用程序与主流,IT,是兼容的、开放的、可移植的,很容易融合到一个机构的系统中。,27,ArcGIS,三大应用程序模块,28,AO,基本体系结构,29,AO,应用程序接口,30,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件简介,在目前常用的,ArcGIS 9.X,版本的,AO,开发中,有,MapControl,和,PageLayoutControl,2个主要的高级通用控件,它们由,AO,基础组件集成而成,向用户提供地图视图窗口。,MapControl,控件提供了类似,ArcMap,中的数据视图(,Data View),的视图窗口,该窗口可以使地图数据布满整个客户区,便于对地图数据进行操作(如地图显示、要素编辑、空间和属性数据查询、地图数据分析等)。,PageLayoutControl,控件提供了类似,ArcMap,中的版面视图(,Layout View),的视图窗口,该窗口主要用于制图输出,可以进行制图版面设置、辅助要素设置、制图数据操作、地图整饰操作等操作。通过以上两个控件可以实现,ArcMap,中的绝大部分功能。,31,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件简介,另外,,ArcGIS 9.X,版本还提供了,SceneViewer,控件,主要为,ArcGIS 3D,分析扩展模块提供三维可视化视图窗口,同样可应用于,AO,组件编程。,用,ArcGIS,进行二次开发,先学,AO,还是直接学,AE,?,32,用,ArcGIS,进行二次开发,先学,AO,还是直接学,AE,?,刚接触,ArcGIS,二次开发时都会有这种疑惑。其实,AO,和,AE,的区别不大,它们只是少数地方不同而已(最主要的区别是极个别,AO,中的接口在,AE,中不能用,做二次开发时间长了就能真正理解了),所以刚开开始学的时候不要过于计较到底是学,AO,还是,AE,。无论是,AO,开发还是,AE,开发,主要就是学习要实现的功能用什么接口去实现,而它们两个的接口大多数情况下用法是一样的。学习,ArcGIS,二次开发只靠一本书是不行的,要想快速提高还是要多写代码、多上网看资料、多到论坛问问题,还有学会看帮助文档和,OMD(,对象模型图,),,因为这样可以让你举一反三更加灵活地进行二次开发。,建议:,(,1),学习,ArcGIS,二次开发前熟练操作,ArcMap,(非常必要),这样可以更深入更形象地了解接口;,(2),学习,ArcGIS,二次开发前至少要对类、对象和接口有个基本的认识。,33,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件简介,AO,是随,ArcGIS,产品一同发布的,必须在,ArcGIS Desktop,上才能利用,AO,提供的组件对象来进行应用开发。,ArcGIS Engine,是在,ArcGIS9,系列中发布的一个基于,AO,的新产品,实现了比,AO,更好的封装,是一个独立的产品。,34,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,的特点,1.,采用面向对象思想、基于组件技术;,2.,支持广泛的空间数据格式,如,ESRI Shape files,、,ArcInfo Coverages,、,AutoCAD,的,DXF,和,DWG,、,ArcSDE layers,、,ESRI Geodatabase,、,VPF,及各种栅格图像等;,3.,具有强大的,GIS,功能,可以实现从空间数据编辑到三维显示与分析等一系列操作和空间数据管理。,35,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,的功能,ArcMap,、,ArcCatalog,和,ArcScene,这三个应用程序都是由,AO,搭建起来的,因此从理论上讲这些应用程序能完成的任务,通过,AO,同样可以完成(空间数据显示、查询检索、编辑和分析,创建各种专题图和统计报表,高级制图和输出,空间数据管理和维护以及三维可视化)。具体地说,主要有:,36,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,的功能,1.,强大的符号库系统;,2.,方便高效的地图显示功能;,3.,强大灵活的空间数据编辑功能;,4.,强大的制图功能;,5.,强大的空间分析功能;,6.,丰富的三维显示和三维分析功能;,7.,强大的空间数据管理功能;,8.,对动态目标的追踪功能。,37,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件开发类型,VBA,的开发方式。利用嵌入,ArcCatalog,和,ArcMap,中的,VBA,宏进行嵌入式开发,可以快速地实现针对特殊需求的功能扩展和界面的定制。这是最简单快速的方法,是有效利用现有平台与数据的首选开发方式,缺点是不能脱离桌面软件独立运行;,38,利用,VBA,对,ArcMap,进行定制,39,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件开发类型,创建自己的,COM,组件。采用任意一种支持,COM,的高级语言(如,VC、VB、Delphi,等),在,AO/AE,组件的基础上进一步创建自己的,COM,组件,定义自己的接口、属性、方法,底层功能调用,AO/AE,组件加以实现以满足各种特殊的需求。这种方法生成的,COM,组件具有很大的灵活性,可以应用在由任何支持,COM,的语言开发的独立应用程序中,但这种开发方法需要较高的组件开发技术;,40,基于,COM,的二次开发,41,基于,COM,的二次开发,42,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,组件开发类型,开发独立的应用程序。在支持,COM,的高级编程语言环境下,应用,AO/AE,组件提供的强大功能,自行开发符合要求的专业化,GIS,系统。这种开发方式首先要引用,AO/AE,组件的核心库,esriCore.olb,,然后根据,COM,编程的特点,利用接口编写代码。其优点是:开发人员可以根据系统的实际需要,从组件库中选择需要应用的组件快速整合系统,所生成的应用程序不依赖于,ArcGIS,桌面版软件而独立运行,为专业人士提供了方便、友好的操作方式。缺点是该方式开发难度较大。,43,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,开发需要的技术基础,面向对象技术,COM,技术,支持,COM,的各种开发工具及其环境(如,VB,、,VC,、,DEPHI,等),AO,各组件对象的层次组织和相互关系,44,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,开发方法,AO/AE,组件提供了3种类型的类,普通类(,Class)、,抽象类(,AbstractClass),和组件类(,CoClass)。,普通类可以通过其它类的实例化而不能直接创建对象,其对象可以作为其它类的一个属性。抽象类不能创建对象,只能作为其它类的父类,其,主要目的是为其子类定义公共接口,。组件类可以显式地创建对象。,AO/AE,中的,Dataset,或,Geometry classes,是抽象类,它不能创建,Geometry,类的对象,而,Polyline,是组件类,可以创建,Polyline,类的对象。这个,Polyline,对象实际上在类的基础上实现了,Geometry,中定义的接口,因此在基类对象中被定义的接口可以从,coclass,来访问。,45,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,开发方法,AO/AE,组件是基于,COM,标准定义的,在实现上也完全遵循该规范,每个功能都需要通过接口来实现。,接口设计必须满足:,1.必须直接或间接地从,IUNKNOWN,接口继承(该接口在,AO,中是省缺的);,2.接口必须有唯一的标识符号;,3.接口不变性,即一旦分配和公布了,ID,,接口定义的任何因素都不能改变。,46,第四节,ComGIS,开发实践,以,AO/AE,为例,AO,开发工具包,ADK(ArcObjects Developer Kit),ADK,是进行基于,AO,应用程序开发所必需的(在,AE,下称为,SDK,),可以选择在安装,ArcGIS Desktop,时或在任何时候使用光盘安装,安装后的目录结构包括:,Help,包含开发帮助文件,AODev.chm、ArcObjects.chm,等,Kits,附加的开发者素材,诸如投影引擎头文件,类别,ID,文件和,ESRI,示例命令的源代码(在,9.x,版本中,该代码位置有所变化),Object Model Diagrams,包括所有的,PDF,格式对象模型图,Samples,包含所有示例工程文件的源代码,Utilities,包含,ESRI,对象浏览器等工具,47,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,运行库,Runtime,Runtime,是编译调试程序所必循的运行环境,开发时要使用,runtime+sdk,,部署时用户那里只需要,runtime,和开发的程序。,48,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,开发资源,1.ArcObjects Developer Help,,这是,AO,开发的首选资源,不管是,AO,的基础,COM,、,AO,的对象层次图都提供了说明,此外还提供了大量的开发示例;,2.ArcObjects Online,,提供了最新的,AO,组件库文档,其中有一个关于,AO,的技术论坛,非常实用;3.,Exploring ArcObjects,,一本很不错的,AO,技术文档,对,AO,的开发进行了很好的组织,而且有大量的示例,可以随时复制利用;,49,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,开发资源,4.Building a Geodatabase,,应用都是围绕数据来展开的,这本书主要是用来设计和创建,Geodatabase,的,但理解和掌握,Geodatabase,的层次和建模方法,对,AO,开发是很好的补充;,5.Microsoft MSDN,,即使你的,AO,开发工具不是微软的,也建议安装一套完整的,MSDN,,想多了解和应用,COM,进行设计开发,,MSDN,是个宝藏。,50,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,的核心组件库,esriSystem.olb,、esriSystemUI.olb,、,esriGeometry.olb,、,esriDisplay.olb,、,esriGeoDatabase.olb,、,esriCarto.olb,、,esriDataSourcesFile.olb,、,ToolbarControl.ocx,、,TOCControl.ocx,、,MapControl.ocx,、,PageLayoutControl.ocx,、,ArcReaderControl.ocx,。,51,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,控件、类、接口之间的关系,52,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,中的核心类与接口,1.,与,MapControl,控件相关的核心类与接口,(1)Map,组件类:功能是作为显示和操作地图数据的容器,其主要接口是,IMap,,它是,AO/AE,各种功能类与接口在,MapControl,控件上进行体现的入口,通过它可以访问各种不同来源的图层数据,可以添加、删除图层数据,可以关联比例尺、图例等各种图面要素,可以获得感兴趣区域、地图坐标单位和空间参考等有关地图的各种属性信息;,53,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,中的核心类与接口,1.,与,MapControl,控件相关的核心类与接口,(2)MapControl,组件类:在封装,Map,类基础上扩展了属性、方法和事件,通过,IMapControl,接口可以控制地图的基本表现形式、显示属性和地图控件的属性,可以添加并管理与控件关联的图层数据,可以导入地图文档,可以将其它应用中的地图数据拖放到当前应用中来。,54,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,中的核心类与接口,2.,与,SceneViewer,控件相关的核心类与接口,(1)Scene,组件类:功能是作为在三维场景中显示和操作地图数据的容器,其主要接口是,IScene,,它是,AO/AE,各种功能类与接口在,SceneViewer,控件上进行体现的入口,通过它可以访问三维场景中各种不同来源的图层数据,可以添加、删除三维场景中的图层数据,可以设置背景色等三维场景的一些基本属性,可以设置场景的空间参考属性;,55,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,中的核心类与接口,2.,与,SceneViewer,控件相关的核心类与接口,(2)SceneGraph,组件类:功能是作为存储三维场景中的空间数据和与三维场景相关事件的容器,其主要接口是,ISceneGraph,,它提供了控制和操纵,SceneGraph,的方法和属性。,56,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,应用开发的基本过程,一个基于,AO/AE,应用开发,首先要将控件与相应的核心类、接口联系起来,然后通过核心类、接口连接相关的功能类和接口,从而实现需要的,GIS,功能。,57,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,应用开发的基本过程(,VC+6.0,),1.,基于,MapControl,控件的开发,void CAoExView:OnInitialUpdate(),CFormView:OnInitialUpdate();,GetParentFrame()-RecalcLayout();,ResizeParentToFit();,/,获取,MapControl,指针,m_ipMapControl=GetDlgItem(IDC_MAPCONTROL1)-GetControlUnknown();,58,第四节,ComGIS,开发实践,以,AO/AE,为例,AO/AE,应用开发的基本过程(,VC+6.0,),2.,基于,SceneViewer,控件的开发,hr=m_SceneViewerCtrl.GetSceneGraph()-GetScene(,59,第四节,ComGIS,开发实践,以,AO/AE,为例,地图图层控制和地图浏览操作,添加图层数据,(,shp,文件、,CAD,文件和影像文件,),图层控制,(添加与删除、层间关系调整和显示控制),地图浏览,(放大、缩小与漫游),60,第四节,ComGIS,开发实践,以,AO/AE,为例,地图图层控制和地图浏览操作(,VC+6.0,),首先建立以窗口视图类FormView为基类的MFC项目,在Form窗体中利用右键快捷菜单项,Insert ActiveX Controls,添加,ESRI LicenseControl,和,ESRI MapControl,两个控件,,然后通过修改,ESRI MapControl,的属性加载一个地图文档或图层。,在StdAfx.h中添加头文件#include atlbase.h以及如下代码:,61,第四节,ComGIS,开发实践,以,AO/AE,为例,地图图层控制和地图浏览操作(,VC+6.0,),/AO,引入库,#pragma warning(push),#pragma warning(disable:4192),#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,named_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,62,第四节,ComGIS,开发实践,以,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_native_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_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,63,第四节,ComGIS,开发实践,以,AO/AE,为例,地图图层控制和地图浏览操作(,VC+6.0,),#import C:Program FilesArcGISbinTOCControl.ocx raw_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,#import 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),64,第四节,ComGIS,开发实践,以,AO/AE,为例,地图图层控制和地图浏览操作(,VC+6.0,),定义地图控件变量并使窗口初始化:,IMapControl3P
展开阅读全文