您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > GIS二次开发第1课
主讲:张云鹏学习基础掌握GIS基本原理。掌握C++/C#程序设计语言。熟悉ArcGISDesktop应用软件。掌握空间数据库基础知识,了解Geodatabase和ArcSDE。教材与参考材料《基于ArcObjects与C#.NET的GIS应用开发》,兰小机等编著《ArcGISEngine开发从入门到精通》,邱洪钢等编著《插件式GIS应用框架的设计与实现》,蒋波涛等编著ArcGIS开发工具包,包括ArcGIS开发帮助、组件帮助、对象模型图和示例ESRIDeveloperNetwork:提供有关ArcGIS开发的最新信息,包括更新的示例和技术文档第一课GIS二次开发基础ArcGIS产品体系ArcObjects基础组件对象模型.NET组件与COM组件的互操作基于ArcGIS的开发方式ArcGISVisualStudioIDEIntegrationFrameworkArcGIS开发资源ArcGIS产品体系ArcGIS产品体系ArcGISDesktop—高级GIS应用程序的一个集成套件。ArcGISEngine—通过多种应用程序接口建立自定义应用程序的嵌入式GIS组件库。ArcGISServer—为企业和Web计算框架建立服务器端GIS应用程序的一个平台,可用于建立Web服务和Web应用程序。ArcIMS—通过开放Internet协议发布地图、数据和元数据的GISWeb服务器。ArcObjects与ArcGISEngineArcObjects(简称AO)是ESRI公司ArcGIS系列产品的基础。ArcObjecs是基于MicrosoftCOM技术所构建的GIS组件。ArcGISEngine(简称AE)是ArcObjects的子集。ArcObjects基础ArcObjects是一套庞大的COM组件集合,ArcGIS各版本各种COM类型统计见下表。COM类型EnumStructInterfaceCoclassTotalArcGIS9.062835302923226014ArcGIS9.193336391830437930ArcGIS9.2110040479838329770ArcGIS9.31195515206405010502ArcGIS10.01053935555408110782ArcObjects基础为了更好地管理ArcObjects中数目众多的COM对象,ESRI将它们放置在不同的组件库中,对于.NET来说,一个组件库就是一个assembly(程序集),一个assembly有多个不同的命名空间。如ESRI.ArcGIS.ADFAssembly的Namespaces:ESRI.ArcGIS.ADF,ESRI.ArcGIS.ADF.BaseClasses,ESRI.ArcGIS.ADF.CATIDs,ESRI.ArcGIS.ADF.COMSupport,ESRI.ArcGIS.ADF.Resources组件库是对一个或多个COM组件中的类、接口、方法和类型的描述。所有的这些组件库组件都位于ArcGIS安装目录\com文件夹中,而其真正的实现在ArcGIS安装目录\bin文件夹的众多DLL文件中。ArcObjects10的组件库共65个(65assemblies),详细内容参见LearningArcObjects、ArcObjectsSDKAPIReference如果不记得某个接口或对象属于哪个命名空间的时候,可以通过开发帮助查找。ArcObjects基础ArcGISEngine组件基本服务—由核心ArcObjects构成,几乎所有GIS应用程序都需要,如要素几何体和显示。数据存取—用于对栅格和矢量格式进行存取,包括强大而灵活的地理数据库。地图表达—用于创建和显示带有符号体系和标注功能的ArcObjects,及包括创建自定义的专题制图功能的ArcObjects。开发组件—用于快速应用程序开发的高级用户接口控件和用于高效开发的一个综合帮助系统。运行时选项—运行时可以与标准功能或其他高级功能一起部署。ArcGISEngine组件理解对象模型图ESRI提供多种方法让用户了解ArcObjects组件及组件之间的关系。对象浏览器(ESRIObjectBrowser)ESRI提供的一系列OMD的PDF文件开发帮助通过阅读ArcObjects的对象模型图(ObjectModelDiagram,OMD),可以快速了解ArcObjects的结构和不同组件之间的关系。OMD是基于UML(UnifiedModelingLanguage,统一建模语言)基础上的,它补充了在对象浏览器中看不到的信息。OMD好比城市的道路图,可以帮助程序员来了解类之间的关系,如何从一个类到另一个类,选择正确的接口,获取需要的属性和方法等。理解对象模型图ESRI提供了多种方法让用户了解ArcObjects组件及不同组件之间的关系ESRI提供的一系列OMD的PDF文件开发帮助、APIReferenceVS.NET中的对象浏览器VS中的对象浏览器类与对象在ArcObjects中存在三种类型的类抽象类(AbstractClass)组件类(CoClass)普通类(Class)抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。组件类是一个可以直接用new创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用new关键字来完成。类与对象ArcObjects的类之间存在四种关系依赖关系关联关系组合关系类型继承对象模型示例WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve什么是组件对象模型软件重用和开发效率始终是软件开发的核心问题。在早期(面向过程语言),人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,让其他软件开发人员调用。它为应用开发者提供了方便,但是重用的粒度太小。面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位是类,它封装了数据成员和函数成员,将最小组件的粒度提高了一个等级。但是,一个类提供很多种方法和属性,使用和管理很不方便。COM技术(接口)的出现,解决了以上问题,将类的内部属性和方法进行分类。例如在Map类中有好几个接口,在这些接口中定义不同功能组的方法和属性,Map实现了这些接口,这样就可以使用接口进行定义。什么是组件对象模型组件技术标准有COM、JavaBean和CORBA,但微软提出的COM使用最为广泛。微软的COM模型是一种二进制标准,它允许任意两个组件按照一定规则互相通信。COM(ComponentObjectModel)的核心是接口(Interface)。接口是一种用来定义程序的协定。实现接口的类要与接口的定义严格一致。接口可以继承多个父接口,而类可以实现多个接口,一个接口也可以被多个类实现。接口可以包含方法、属性、事件和索引器。COM知识要点COM是一种二进制级别的组件通信标准。它告诉组件之间该如何通信、一个COM对象之间的不同接口如何查询等。COM对象也是基于面向对象标准的。COM对象能够以DLL或者EXE文件形式存在,它包含着接口的具体实现。使用者可以通过接口来获取它内部的方法、属性。COM对象的接口一旦被公布,就不能再修改。COM对象必须实现IUnknown接口,它负责管理COM对象生命周期并在运行时刻提供类型查询,当COM对象不使用的时候,是这个接口定义的方法负责释放内存。COM知识要点QI(QueryInterface),即所谓查询接口由于一个COM对象有很多个接口,不同的接口管理着COM的不同类型的方法、属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属性方法的过程称为QI。这个过程也是由IUnknown接口管理的。IMappMap;IActiveViewpActiveView;pMap=axMapControl1.Map;//获取控件中的地图……pActiveView=pMapasIActiveView;//QI(或者pActiveView=(IActiveView)pMap;)………COM知识要点每个组件都有一个独一无二的标识GUID。接口的GUID称为IID,而组件类的GUID称为CLSID。CLSID还有一个文本别名,即所谓的ProgID,它是一个由项目名加组件类类名组成的字符串。一个COM对象可以有多个接口,一个接口也可以被多个COM对象实现。接口分为两种,即内向接口和外向接口。内向接口(InboundInterface)是组织COM对象相关的方法和属性,COM对象必须实现所有的接口内容;外向接口(OutboundInterface)是用于组织COM对象相关的事件,开发人员根据需要实现事件接口。COM知识要点接口可以从多个父接口继承接口继承机制非常有用,在很多时候程序员可以将一个子接口类型的对象定义为父接口类型的对象,从而实现一般化的操作,如:PrivatevoidCreateGeometry(IPolygonpPolygon)PrivatevoidCreateGeometry(IGeometrypPolygon)COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物。COM组件必须被注册后才能使用。COM知识要点COM的缺陷由于COM对象可以被重用,这样多个程序可能共用一个COM对象,如果这个COM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况称为“DLLHELL”(DLL灾难)。.NET的解决方案在.Net产生前,使用唯一的Guid来标识每一个COM组件,为了运行COM组件就必须在组册表中对其进行注册。多个应用程序可以共享相同的COM组件,当COM组件版本升级时,可能导致原来引用此COM组件的程序不能正确运行。在.Net中,微软引入了的解决方案:强命名程序集(StrongName),以及与之配套的全局程序集缓存(GAC--GlobalAssemblyCache)来解决这个问题。.NET组件与COM组件的互操作COMModel.NETModelTypelibrariesMetadataDLLAssembliesInterfacebasedObjectbasedGUIDsStrongnamesQueryInterfaceCastReferencecountingMemorymanagement(Garbagecollection)RegistryGlobalAssemblyCacheCOM包装(COMWrappers)为了实现传统的COM程序与.NET程序之间的相互调用,.NET提供了两个包装类:运行时可调用包装(runtimecallablewrapper,RCW)和COM可调用包装(COMcallablewrapper,CCW)。每当一个.NET客户程序调用一个COM对象的方法时就会创建一个RCW对象;相反,每当一个COM客户程序调用一个.NET对象的方法时就会创建一个CCW对象。COM包装(COMWrappers)COM包装(COMWrappers)ESRI提供的PrimaryInteropAssembliesPrimaryinteropassemblies(PIAs,主互操作程序集)是COM软件厂商提供的为其COM组件在.NET环境下运行的互操作程序集,PIAs暴露COM组件中的所有类、接口和常量,作为.NET托管类。ESRI为所有的ArcObjects类型库提供了PIAs,ArcGIS的.NET开发人员只能使用这些安装在GAC(Glob
本文标题:GIS二次开发第1课
链接地址:https://www.777doc.com/doc-5043960 .html