gis二次开发第1课

上传人:gu****n 文档编号:240743618 上传时间:2024-05-04 格式:PPT 页数:108 大小:9.95MB
返回 下载 相关 举报
gis二次开发第1课_第1页
第1页 / 共108页
gis二次开发第1课_第2页
第2页 / 共108页
gis二次开发第1课_第3页
第3页 / 共108页
点击查看更多>>
资源描述
GIS二次开发二次开发主讲:张云鹏主讲:张云鹏学习基础学习基础n掌握掌握GIS基本原理。基本原理。n掌握掌握C+/C#程序程序设计语言。言。n熟悉熟悉ArcGISDesktop应用用软件。件。n掌握空掌握空间数据数据库基基础知知识,了解,了解Geodatabase和和ArcSDE。教材与参考教材与参考材料材料n基于基于ArcObjects与与C#.NET的的GIS应用开用开发,兰小机小机等等编著著nArcGISEngine开开发从入从入门到精通到精通,邱洪,邱洪钢等等编著著n插件式插件式GIS应用框架的用框架的设计与与实现,蒋波涛蒋波涛等等编著著nArcGIS开开发工具包,包括工具包,包括ArcGIS开开发帮助、帮助、组件帮助、件帮助、对象模型象模型图和示例和示例nESRIDeveloperNetwork:http:/ GISGIS二次开发基础二次开发基础nArcGIS产品体系产品体系nArcObjects基础基础n组件对象模型组件对象模型n.NET组件与组件与COM组件的互操作组件的互操作n基于基于ArcGIS的开发方式的开发方式nArcGISVisualStudioIDEIntegrationFrameworknArcGIS开发资源开发资源ArcGIS 产品体系ArcGIS 产品体系nArcGISDesktop高级高级GIS应用程序的一个集成套件。应用程序的一个集成套件。nArcGISEngine通过多种应用程序接口建立自定义应用程序的嵌通过多种应用程序接口建立自定义应用程序的嵌入式入式GIS组件库。组件库。nArcGISServer为企业和为企业和Web计算框架建立服务器端计算框架建立服务器端GIS应用程应用程序的一个平台,可用于建立序的一个平台,可用于建立Web服务和服务和Web应用程序。应用程序。nArcIMS通过开放通过开放Internet协议发布地图、数据和元数据的协议发布地图、数据和元数据的GISWeb服务器。服务器。ArcObjects 与 ArcGIS EnginenArcObjects(简称(简称AO)是)是ESRI公司公司ArcGIS系列产品的基系列产品的基础。础。nArcObjecs是基于是基于MicrosoftCOM技术技术所构建的所构建的GIS组件。组件。nArcGISEngine(简(简称称AE)是)是ArcObjects的子集。的子集。ArcObjects基础nArcObjects是一套庞大的是一套庞大的COM组件集合,组件集合,ArcGIS各版本各种各版本各种COM类型统计见下表。类型统计见下表。COM类型类型EnumStructInterfaceCoclassTotalArcGIS9.062835302923226014ArcGIS9.193336391830437930ArcGIS9.2110040479838329770ArcGIS9.31195515206405010502ArcGIS10.01053935555408110782ArcObjects基础n为了更好地管理为了更好地管理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.Resourcesn组件库是对一个或多个组件库是对一个或多个COM组件中的类、接口、方法和类型的描组件中的类、接口、方法和类型的描述。所有的这些组件库组件都位于述。所有的这些组件库组件都位于com文件夹文件夹中,而其真正的实现在中,而其真正的实现在bin文件夹的众多文件夹的众多DLL文件中。文件中。nArcObjects10的组件库的组件库共共65个个(65assemblies),详细内容参见详细内容参见LearningArcObjects、ArcObjectsSDKAPIReferencen如果不记得某个接口或如果不记得某个接口或对象属于哪个命名空间对象属于哪个命名空间的时候,可以通过开发的时候,可以通过开发帮助查找帮助查找。ArcObjects基础ArcGISEngine组件组件基本服务基本服务由核心ArcObjects构成,几乎所有GIS应用程序都需要,如要素几何体和显示。数据存取数据存取用于对栅格和矢量格式进行存取,包括强大而灵活的地理数据库。地图表达地图表达用于创建和显示带有符号体系和标注功能的ArcObjects,及包括创建自定义的专题制图功能的ArcObjects。开发组件开发组件用于快速应用程序开发的高级用户接口控件和用于高效开发的一个综合帮助系统。运行时选项运行时选项运行时可以与标准功能或其他高级功能一起部署。ArcGISEngine组件组件理解对象模型图nESRI提供多种方法让用户了解提供多种方法让用户了解ArcObjects组件及组件之间的关系。组件及组件之间的关系。对象浏览器对象浏览器(ESRI Object Browser)(ESRI Object Browser)ESRIESRI提供的一系列提供的一系列OMDOMD的的PDFPDF文件文件开发帮助开发帮助n通过阅读通过阅读ArcObjects的对象模型图的对象模型图(ObjectModelDiagram,OMD),可以快速了解,可以快速了解ArcObjects的结构和不同组件之间的关系。的结构和不同组件之间的关系。nOMD是基于是基于UML(UnifiedModelingLanguage,统一建模语言,统一建模语言)基基础上的,它补充了在对象浏览器中看不到的信息。础上的,它补充了在对象浏览器中看不到的信息。OMD好比城好比城市的道路图,可以帮助程序员来了解类之间的关系,如何从一个市的道路图,可以帮助程序员来了解类之间的关系,如何从一个类到另一个类,选择正确的接口,获取需要的属性和方法等。类到另一个类,选择正确的接口,获取需要的属性和方法等。理解对象模型图nESRI提供了多种方法让用户了解提供了多种方法让用户了解ArcObjects组件及不组件及不同组件之间的关系同组件之间的关系ESRI提供的一系列提供的一系列OMD的的PDF文件文件开开发帮助、帮助、APIReferencenVS.NET中的对象浏览器中的对象浏览器VS 中的对象浏览器ArcObjects的对象模型(OMD)FeatureLayerMapMxDocumentApplicationArcMap*LayerFeatureDataset*GeodatabaseFeatureClassTableDataSet0.1Map Layer类与对象n在在ArcObjects中存在三种类型的类中存在三种类型的类抽象类抽象类(Abstract Class)(Abstract Class)组件类组件类(CoClass)(CoClass)普通类普通类(Class)(Class)n抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。n组件类是一个可以直接用组件类是一个可以直接用new创建对象实例的类,它的实例对象创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。理。n普通类不能够直接产生一个对象,但它可以用其他的普通类或组普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用件类的方法产生,而不是使用new关键字来完成。关键字来完成。类与对象nArcObjects的类之间存在四种关系的类之间存在四种关系依赖关系依赖关系关联关系关联关系组合关系组合关系类型继承类型继承 对象模型示例WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve什么是组件对象模型n软件重用和开发效率始终是软件开发的核心问题。软件重用和开发效率始终是软件开发的核心问题。在早期(面向过程语言),人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,让其他软件开发人员调用。它为应用开发者提供了方便,但是重用的粒度太小。面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位是类,它封装了数据成员和函数成员,将最小组件的粒度提高了一个等级。但是,一个类提供很多种方法和属性,使用和管理很不方便。COM技术(接口)的出现,解决了以上问题,将类的内部属性和方法进行分类。例如在Map类中有好几个接口,在这些接口中定义不同功能组的方法和属性,Map实现了这些接口,这样就可以使用接口进行定义。什么是组件对象模型n组件技术标准有组件技术标准有COM、JavaBean和和CORBA,但微软提出的,但微软提出的COM使用最为广泛。使用最为广泛。n微软的微软的COM模型是一种二进制标准,它允许任意两个组件按照一模型是一种二进制标准,它允许任意两个组件按照一定规则互相通信。定规则互相通信。nCOM(ComponentObjectModel)的核心是的核心是接口接口(Interface)。接口是一种用来定义程序的协定。实现接口的类要与接口的定义严格一致。接口可以继承多个父接口,而类可以实现多个接口,一个接口也可以被多个类实现。接口可以包含方法、属性、事件和索引器。COM知识要点nCOM是一种二进制级别的组件通信标准。它告诉组件之间该如何是一种二进制级别的组件通信标准。它告诉组件之间该如何通信、一个通信、一个COM对象之间的不同接口如何查询等。对象之间的不同接口如何查询等。nCOM对象也是基于面向对象标准的。对象也是基于面向对象标准的。COM对象能够对象能够以以DLL或者或者EXE文件形式存在文件形式存在,它包含着接口的具体实现。使用者可以通过,它包含着接口的具体实现。使用者可以通过接口来获取它内部的方法、属性。接口来获取它内部的方法、属性。COM对象的接口一旦被公布,对象的接口一旦被公布,就不能再修改就不能再修改。nCOM对象必须实现对象必须实现IUnknown接口,它负责管理接口,它负责管理COM对象生命周对象生命周期并在运行时刻提供类型查询,当期并在运行时刻提供类型查询,当COM对象不使用的时候,是这对象不使用的时候,是这个接口定义的方法负责释放内存。个接口定义的方法负责释放内存。COM知识要点nQI(QueryInterface),即所谓查询接口,即所谓查询接口由于一个由于一个COMCOM对象有很多个接口,不同的接口管理着对象有很多个接口,不同的接口管理着COMCOM的不同类型的方法、的不同类型的方法、属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属性方法的过程称为性方法的过程称为QIQI。这个过程也是由。这个过程也是由IUnknownIUnknown接口管理的。接口管理的。IMap pMap;IMap pMap;IActiveView pActiveView;IActiveView pActiveView;pMap=axMapControl1.Map;/pMap=axMapControl1.Map;/获取控件中的地图获取控件中的地图 pActiveView=pMap pActiveView=pMap asas IActiveView;/QI IActiveView;/QI (或者或者 pActiveView=(IActiveView)pMap;)pActiveView=(IActiveView)pMap;)COM知识要点n每个组件都有一个独一无二的标识每个组件都有一个独一无二的标识GUID。接口的接口的GUID称为称为IID,而而组件类的组件类的GUID称为称为CLSID。CLSID还有一个文本别名,即所谓还有一个文本别名,即所谓的的ProgID,它是一个由项目名加组件类类名组成的字符串。,它是一个由项目名加组件类类名组成的字符串。n一个一个COM对象可以有多个接口,一个接口也可以被多个对象可以有多个接口,一个接口也可以被多个COM对对象实现。象实现。n接口分为两种,即内向接口和外向接口。接口分为两种,即内向接口和外向接口。内向接口内向接口(Inbound Interface)(Inbound Interface)是组织是组织COMCOM对象相关的方法和属性,对象相关的方法和属性,COMCOM对象对象必须实现所有的接口内容;必须实现所有的接口内容;外向接口外向接口(Outbound Interface)(Outbound Interface)是用于组织是用于组织COMCOM对象相关的事件,开发人员对象相关的事件,开发人员根据需要实现事件接口。根据需要实现事件接口。COM知识要点n接口可以从多个父接口继承接口可以从多个父接口继承接口继承机制非常有用,在很多时候程序员可以将一个子接口类型的对象接口继承机制非常有用,在很多时候程序员可以将一个子接口类型的对象定义为父接口类型的对象,从而实现一般化的操作,如:定义为父接口类型的对象,从而实现一般化的操作,如:nPrivate void CreateGeometry(IPolygon pPolygon)nPrivate void CreateGeometry(IGeometry pPolygon)nCOM对象的接口一旦被公布,就不能再修改,但可以增加新接口,对象的接口一旦被公布,就不能再修改,但可以增加新接口,在在ArcObjects中有很多以中有很多以“2”、“3”结尾的接口,都是这样发结尾的接口,都是这样发展的产物。展的产物。nCOM组件必须被注册后才能使用。组件必须被注册后才能使用。COM知识要点nCOM的缺陷的缺陷由于由于COMCOM对象可以被重用,这样多个程序可能共用一个对象可以被重用,这样多个程序可能共用一个COMCOM对象,如果这个对象,如果这个COMCOM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况称为能运行的情况,这种情况称为“DLL HELLDLL HELL”(DLL(DLL灾难灾难)。n.NET的解决方案的解决方案在在.Net.Net产生前,使用唯一的产生前,使用唯一的GuidGuid来标识每一个来标识每一个COMCOM组件,为了运行组件,为了运行COMCOM组件组件就必须在组册表中对其进行注册。多个应用程序可以共享相同的就必须在组册表中对其进行注册。多个应用程序可以共享相同的COMCOM组件,组件,当当COMCOM组件版本升级时,可能导致原来引用此组件版本升级时,可能导致原来引用此COMCOM组件的程序不能正确运行组件的程序不能正确运行。在在.Net.Net中,微软引入了的解决方案:中,微软引入了的解决方案:强命名程序集(强命名程序集(Strong NameStrong Name),以及,以及与之配套的与之配套的全局程序集缓存(全局程序集缓存(GAC-Global Assembly Cache GAC-Global Assembly Cache)来解决这来解决这个问题。个问题。.NET组件与COM组件的互操作COMModel.NETModelTypelibrariesMetadataDLLAssembliesInterfacebasedObjectbasedGUIDsStrongnamesQueryInterfaceCastReferencecountingMemorymanagement(Garbagecollection)RegistryGlobalAssemblyCacheCOM包装(COM Wrappers)n为了实现传统的为了实现传统的COM程序与程序与.NET程序之间的相互调用,程序之间的相互调用,.NET提供了两个包装提供了两个包装类:类:运行时可调用包装(运行时可调用包装(runtimecallablewrapper,RCW)和和COM可调用包可调用包装(装(COMcallablewrapper,CCW)。每当一个。每当一个.NET客户程序调用一个客户程序调用一个COM对象的方法时就会创建一个对象的方法时就会创建一个RCW对象;相反,每当一个对象;相反,每当一个COM客户程序调用一客户程序调用一个个.NET对象的方法时就会创建一个对象的方法时就会创建一个CCW对象。对象。COM包装(COM Wrappers)COM包装(COM Wrappers)ESRI提供的Primary Interop AssembliesnPrimaryinteropassemblies(PIAs,主互操作程序集),主互操作程序集)是是COM软软件厂商提供的为其件厂商提供的为其COM组件在组件在.NET环境下运行的互操作程序集,环境下运行的互操作程序集,PIAs暴露暴露COM组件中的所有类、接口和常量,作为组件中的所有类、接口和常量,作为.NET托管类。托管类。nESRI为所有的为所有的ArcObjects类型库提供了类型库提供了PIAs,ArcGIS的的.NET开开发人员只能使用这些安装在发人员只能使用这些安装在GAC(GlobalAssemblyCache,缺省,缺省安装目录为安装目录为C:WINDOWSassembly)下的下的PIAs。这些。这些PIAs的公钥标的公钥标记(记(publickey)为)为8FC3CC631E44AD86。向COM公开.NET对象n注册注册.NET组件组件定制定制.NET.NET组件来扩展组件来扩展ArcGISArcGIS桌面应用程序,需要在桌面应用程序,需要在COMCOM注册表中注册注册表中注册.NET.NET组件,并将组件,并将.NET.NET的程序集的程序集(assemblies)(assemblies)输出为输出为COMCOM的类型库的类型库(tlb)(tlb),这一工作可以通过以下,这一工作可以通过以下2 2个途径:个途径:n使用.NET Framework提供的程序集注册工具(Regasm.exe)regasm PATH*.dll/tlb:*tlbn使用Visual Studio.NET开发环境(Register for COM Interop)n在在COM组件类目中注册组件类目中注册.NET类类大部分定制的大部分定制的ArcGISArcGIS组件必须注册到适合的组件必须注册到适合的COMCOM组件类目中才能正常组件类目中才能正常使用,这一工作可以通过以下使用,这一工作可以通过以下2 2个途径:个途径:n通过ArcGIS的Customize对话框直接添加TLB文件。n使用组件类目管理工具Component Catesories Manager(Categories.exe)n使用COM注册函数(COMRegisterFunction)n在在VisualStudio.NET开发环境中,通过下列步骤来来自动完成开发环境中,通过下列步骤来来自动完成.NET组件的注册:组件的注册:在在“解决方案资源管理器解决方案资源管理器”中,鼠标右键点击要注册的项目(即中,鼠标右键点击要注册的项目(即正在开发的正在开发的.NET.NET组件),组件),然后点击然后点击“属性属性”;在项目在项目“属性页属性页”对话框中,点击对话框中,点击“生成生成”,在右边的窗格中,在右边的窗格中,选中选中“为为COM InteropCOM Interop注册注册”,点击,点击“确定确定”按钮,即可完成按钮,即可完成.NET.NET组件的自动注册。组件的自动注册。(a)注册.NET组件(b)在COM组件类目中注册.NET类n大量的大量的ArcGIS扩展都依赖扩展都依赖COM组件类目。事实上,大部分定制组件类目。事实上,大部分定制的的ArcGIS组件必须注册到合适的组件必须注册到合适的COM组件类目中才能正常使用。组件类目中才能正常使用。例如:所有的例如:所有的ArcMap命令和工具必须注册到命令和工具必须注册到“ESRIMxCommands”组件类目中。组件类目中。可以通过下列途径将可以通过下列途径将.Net类注册到类注册到COM组件类目中。组件类目中。自定义对话框自定义对话框组件类目管理工具组件类目管理工具使用使用COMCOM注册函数(注册函数(COMRegisterFunctionCOMRegisterFunction)自定义对话框n在在.NET环境下自定义的环境下自定义的ArcGIS命令和工具可以通过命令和工具可以通过ArcGIS的的Customize对话框中的对话框中的AddFromFile按钮快速地添加到工具条中。按钮快速地添加到工具条中。n在这种情况下,只需要简单地浏览一下在这种情况下,只需要简单地浏览一下TLB并打开它。并打开它。ArcGIS框框架会自动地将从类型库中选中的类添加到合适的组件类目中。架会自动地将从类型库中选中的类添加到合适的组件类目中。组件类目管理工具n使用使用ComponentCatesoriesManager(Categories.exe),浏览类),浏览类型库,并选择合适的类目。型库,并选择合适的类目。使用COM注册函数(COMRegisterFunction)n添加注册代码到添加注册代码到.NET类中,这样每当注册类中,这样每当注册.NET组件的时候,会在组件的时候,会在特定的组件类目中自动注册特定的组件类目中自动注册.NET类。类。.NET Framework.NET Framework类库中包含两个属性类(类库中包含两个属性类(ComRegisterFunctionComRegisterFunction和和ComUnregisterFunctionComUnregisterFunction),它们允许用户指定方法注册或注销),它们允许用户指定方法注册或注销.NET.NET类。类。在组件类目内注册一个组件类,需要程序员知道组件类目的唯一在组件类目内注册一个组件类,需要程序员知道组件类目的唯一IDID(CATIDCATID)。)。n为了帮助程序员简化这一注册过程,为了帮助程序员简化这一注册过程,ESRI提供了提供了utility程序集程序集(ESRI.ArcGIS.ADF.dll),其中包含),其中包含ESRI.ArcGIS.ADF.CATIDs名称空间,这个名称空间中包含代表名称空间,这个名称空间中包含代表ArcGIS组件类组件类目的类,这些类知道组件类目的目的类,这些类知道组件类目的CATID,并提供两个静态方法,并提供两个静态方法(RegisterandUnregister)来添加或删除组件类。来添加或删除组件类。Guid(d36096cd-4680-42d6-8e5a-8c88cf86170b)publicsealedclassPanTool:BaseTool#regionComponentCategoryRegistrationComRegisterFunction()staticvoidReg(stringregKey)MxCommands.Register(regKey);ComUnregisterFunction()staticvoidUnreg(stringregKey)MxCommands.Unregister(regKey);#endregion.示例:使用COM注册函数COM到.NET的类型转换n命名空间:命名空间:ESRI.AICGIS加上库名。加上库名。例如例如GeometryGeometry库的命名空间是库的命名空间是ESRI.ArcGIS.GeometryESRI.ArcGIS.Geometry。所有类型。所有类型通过它们的完整的命名空间和类型名识别。通过它们的完整的命名空间和类型名识别。n所有的所有的COM组件类被转换成为托管类;托管类的类名为起初的组件类被转换成为托管类;托管类的类名为起初的类名加上类名加上“Class”,例如,例如,PointPoint组件类的运行时可调用包装(组件类的运行时可调用包装(RCWRCW)为)为 PointClassPointClass,MapMap组件类的运行时可调用包装为组件类的运行时可调用包装为MapClass.MapClass.nC中不支带参数的属性。中不支带参数的属性。ILayer pLayer=axMapControl1.get_Layer(0);ILayer pLayer=axMapControl1.get_Layer(0);在上例中带参数的在上例中带参数的LayerLayer属性,在属性,在C#C#中是不支持的,所以改用中是不支持的,所以改用get_Layerget_Layer()()方法。方法。基于ArcGIS的开发方式nArcGIS桌面应用程序定制桌面应用程序定制/扩展方式扩展方式使用使用VBA/Python VBA/Python 脚本,定制脚本,定制/扩展扩展ArcGISArcGIS桌面应用程序桌面应用程序nArcGIS10ArcGIS10后续版本不再支持后续版本不再支持VBAVBA定制定制开发插件开发插件(add-in)(add-in),定制,定制/扩展扩展ArcGIS ArcGIS 桌面应用程序桌面应用程序nArcGIS10ArcGIS10新推出的扩展桌面应用程序的方式新推出的扩展桌面应用程序的方式开发定制组件,扩展开发定制组件,扩展ArcGIS ArcGIS 桌面应用程序桌面应用程序n功能最强大的扩展功能最强大的扩展ArcGISArcGIS桌面应用程序的方式桌面应用程序的方式nArcGISEngine开发开发nArcGISServer开发开发nMobileGIS开发开发使用Pyhton脚本nPython是一种免费的、跨平台的开源编程语言,它功能强大且简是一种免费的、跨平台的开源编程语言,它功能强大且简单易学,已经得到广泛的应用和支持。单易学,已经得到广泛的应用和支持。nESRI已将已将Python完全纳入完全纳入ArcGIS,成为一种用于,成为一种用于数据分析、数据分析、数据转换、数据管理和地图自动化数据转换、数据管理和地图自动化的语言。的语言。易于学习,非常适合初学者,也特别适合专家使用易于学习,非常适合初学者,也特别适合专家使用可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本)可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本)可移植,跨平台可移植,跨平台可嵌入(使可嵌入(使 ArcGIS ArcGIS 可脚本化)可脚本化)稳定成熟稳定成熟用户社区规模大用户社区规模大Python在ArcGIS中的发展ArcGIS中的PythonArcGIS中的PythonArcPynArcPy-ArcGIS新的新的Python库库由由arcgisscripting升升级而来而来包含有函数包含有函数(Function)、类(Class)和模)和模块(Module)n功能实现功能实现能能访问所有所有gp工具工具数据数据转换、数据管理、数据管理数据分析数据分析自自动化制化制图ArcPyArcPy详细参考详细参考:ArcGISArcGIS DesktopDesktop 1010帮助帮助专业库专业库地理处理地理处理ArcPyArcPy站点包站点包nArcPy模块模块模模块为通常包含函数和通常包含函数和类的的Python文件。文件。有一系列模有一系列模块支持支持ArcPy,包括制,包括制图模模块(arcpy.mapping)、SpatialAnalyst模模块(arcpy.sa)和和GeostatisticalAnalyst模模块(arcpy.ga)。nArcPy类类ArcPy类,如,如SpatialReference和和Extent类,通常用作地理,通常用作地理处理理工具参数工具参数设置的快捷方式,否置的快捷方式,否则的的话,这些参数会使用更加复些参数会使用更加复杂的字符串。的字符串。nArcPy函数函数函数是用于函数是用于执行某行某项特定任特定任务程序程序单元。元。在在ArcPy中,所有地理中,所有地理处理工具均以函数形式提供,但并非所有理工具均以函数形式提供,但并非所有函数都是地理函数都是地理处理工具。理工具。除工具之外,除工具之外,ArcPy还提供多种函数来提供多种函数来更好地支持更好地支持Python地理地理处理工作流。理工作流。函数或方法可用于列出某些函数或方法可用于列出某些数据集、数据集、检索数据集的属性、在将表添加到地理数据索数据集的属性、在将表添加到地理数据库之前之前验证表名称,或表名称,或执行其他行其他许多有用的脚本任多有用的脚本任务。n独立的独立的Python脚本脚本Python脚本是可以脚本是可以执行的行的.py文件。独立文件。独立Python脚本可通脚本可通过两种方式两种方式执行:通行:通过操作系操作系统提示或开提示或开发应用程序(如用程序(如PythonWin),或在),或在Windows资源管理器中双源管理器中双击.py文件。文件。nPython脚本工具脚本工具Python脚本工具是已添加到地理脚本工具是已添加到地理处理工具箱的理工具箱的Python脚本。脚本。添加添加为脚本工具后,便可以像使用其他地理脚本工具后,便可以像使用其他地理处理工具一理工具一样使使用此脚本工具用此脚本工具-可以从工具可以从工具对话框打开和框打开和执行、可以在行、可以在Python窗口和窗口和ModelBuilder中使用,并可以从其他脚本和中使用,并可以从其他脚本和脚本工具中脚本工具中调用。用。nPython窗口窗口ArcGIS10使用使用Python窗口代替原来的命令行窗口窗口代替原来的命令行窗口,通通过Python窗窗口,用口,用户可以快捷地在可以快捷地在ArcGIS内部使用内部使用Python,从而以交互方,从而以交互方式运行地理式运行地理处理工具和功能以及充分利用其他理工具和功能以及充分利用其他Python模模块和和库。此窗口此窗口还为用用户学学习Python提供了一个途径提供了一个途径。Python窗口提供了智能感知和代窗口提供了智能感知和代码自自动完成功能完成功能.可以直接从可以直接从CatalogCatalog中拖放中拖放过来过来即时的帮助即时的帮助信息信息简单实例:nArcGIS引入了后台地理处理引入了后台地理处理(BackgroundGeoprocessing)的概念,允许的概念,允许Geoprocessing工具、工具、ArcGIS操作同时运行操作同时运行(使用多核使用多核CPU)。开发定制组件nAdd-in是一种能够快速扩展桌面应用程序功能的全新扩展方式是一种能够快速扩展桌面应用程序功能的全新扩展方式更加容易创建更加容易共享更加安全更易安装管理nArcGIS10Add-in所支持的类型所支持的类型按钮和工具组合框菜单和右键菜单Multi-items工具条Tool palettes可停靠窗体Application extensionsEditor extensionsXML Metadata(Config.esriaddinx)nAdd-in的部署的部署复制/邮件发送编译好的esriaddin文件到需要部署机器上(已经安装好ArcGIS 桌面);在部署机器上双击esriaddin文件,弹出Add-in安装界面,让用户查看该插件的一些元信息,然后让用户决定是否安装该插件;安装插件是不需要重启任何ArcGIS Desktop应用程序的。安装完之后,就可以通过相应ArcGIS Desktop应用程序的Add-in Manager来查看已安装的Add-in,也可以通过它来卸载。一些Add-in所包含的对象,例如Command、Tool、Toolbar,是需要用户通过Customize窗口定制添加到界面上的。Extension对象,则需要用户通过Extensions窗口勾选加载。ArcGIS10中的Add-InAdd-in共享与安全n实现局域网内共享实现局域网内共享n设置共享目录、设置安全级别设置共享目录、设置安全级别Add-in 数字签名n工具:工具:ESRISignAddin.exenC:ProgramFilesCommonFilesArcGISbinESRISignAddIn.exe开发定制组件n使用使用C#,VB.NET,Java,C+等等语言,言,调用用ArcObjects,可以构,可以构建建扩展展ArcGIS桌面桌面应用程序的用程序的组件(件(DLL)。)。nDLL即即动态链接接库(DynamicLinkLibrary),它是它是Windows平台平台下的一种下的一种类的文件的文件编译格式。格式。该格式文件可以被任何支持格式文件可以被任何支持COM规则的的语言所支持和引用。言所支持和引用。ArcObjects组件本身文件就是件本身文件就是DLL文件。文件。定制DLL组件“放大视图一倍”工具n实现实现ICommand接口接口n主要步骤主要步骤新建项目:项目类型为新建项目:项目类型为-类库类库引用引用ESRIESRI对象库对象库 新建新建ZoomInZoomIn命令类命令类添加命名空间引用添加命名空间引用实现实现ICommandICommand接口接口为为ICommandICommand的成员添加代码的成员添加代码设置命令图标设置命令图标 Expose the ZoomInCsharp class to COMExpose the ZoomInCsharp class to COM添加添加COMCOM类目(类目(COM categoryCOM category)注册函数)注册函数编译项目编译项目在在ArcMapArcMap中使用创建的命令中使用创建的命令 基于ArcGIS Engine的开发nArcGISEngine是一个完整的嵌入是一个完整的嵌入GIS组件库和工具,开发人员可组件库和工具,开发人员可以用来创建新的独立的以用来创建新的独立的GIS应用程序或者在自定义的应用程序或应用程序或者在自定义的应用程序或已经存在的应用程序中嵌入已经存在的应用程序中嵌入GIS功能。功能。nArcGISEngine是是ArcObjects的子集,主要用于独立的的子集,主要用于独立的GIS应用开应用开发,它不依赖于发,它不依赖于ArcGISDesktop。nArcGISEngine由两部分组成:一个软件开发包由两部分组成:一个软件开发包(SDK)和一个可分和一个可分发的运行时发的运行时(Runtime)。除此之外,应用程序的功能可以使用可选。除此之外,应用程序的功能可以使用可选的扩展模块来进行扩展。的扩展模块来进行扩展。基于ArcGIS Engine的开发基于ArcGIS Engine的开发nArcGISEngine支持支持Windows平台及跨平台开发。平台及跨平台开发。nWindows平台开发,有以下平台开发,有以下APIs:.NETVC+n跨平台开发,有以下跨平台开发,有以下APIs:JavaC+forWindowsC+forSolaris/Linux基于ArcGIS Engine的开发使用ArcGIS Engine控件开发独立的GIS应用nUsingtheWinformsArcGISEnginecontrolsnUsingArcGISEngineControlsinWPF(NewinArcGIS10)基于ArcGIS Server的开发nArcGISServer是功能强大的基于服务器的是功能强大的基于服务器的GIS产品,用于构建产品,用于构建集中管理的、支持多用户的、具备高级集中管理的、支持多用户的、具备高级GIS功能的企业级功能的企业级GIS应用应用与服务。与服务。开发者使用开发者使用ArcGISServer可以构建可以构建Web应用、应用、Web服务、服务、以及其它运行在标准的以及其它运行在标准的.NET和和J2EEWeb服务器上的企业应用服务器上的企业应用。nArcGISServer包含包含2个主要部分:个主要部分:GIS服务器和多种的开发框架。服务器和多种的开发框架。基于ArcGIS Server的开发nArcGISServer提供的开发环境提供的开发环境ArcGIS Server SDK for.NET and JavaArcGIS Server SDK for.NET and JavaArcGIS JavaScript ArcGIS JavaScript APIAPIArcGIS JavaScript extension for the Google Maps APIArcGIS JavaScript extension for the Google Maps APIArcGIS JavaScript extension for Bing MapsArcGIS JavaScript extension for Bing MapsArcGIS API for Microsoft Silverlight/Windows Presentation ArcGIS API for Microsoft Silverlight/Windows Presentation Foundation(WPF)Foundation(WPF)ArcGIS API for FlexArcGIS API for FlexArcGIS Server Representational State Transfer(REST)APIArcGIS Server Representational State Transfer(REST)APIArcGIS Server Simple Object Access Protocol(SOAP)SDK ArcGIS Server Simple Object Access Protocol(SOAP)SDK 基于ArcGIS Server的开发Mobile GIS开发nArcGIS技术可以部署到一系列移动设备上,包括技术可以部署到一系列移动设备上,包括PDA、笔记本电、笔记本电脑以及平板电脑等。在野外中使用脑以及平板电脑等。在野外中使用GIS,主要依靠将应用程序定制,主要依靠将应用程序定制成简单的移动工作任务以及对中心成简单的移动工作任务以及对中心WebGIS服务器无线访问。服务器无线访问。nArcGIS为用户提供了三种移动为用户提供了三种移动GIS解决方案。解决方案。使用使用ArcGIS DesktopArcGIS Desktop和和ArcGIS EngineArcGIS Engine建立的应用程序:这种方案常建立的应用程序:这种方案常部署在用于野外的笔记本电脑或者平板电脑上。部署在用于野外的笔记本电脑或者平板电脑上。ArcPadArcPad:ArcPadArcPad为使用为使用Windows CEWindows CE兼容设备的野外工作人员提供了兼容设备的野外工作人员提供了一个以一个以GISGIS为中心的解决方案。为中心的解决方案。ArcGIS MobileArcGIS Mobile SDKSDK:ArcGIS Server ArcGIS Server 包含的一个软件开发包,可以包含的一个软件开发包,可以被用于智能手机、被用于智能手机、PocketPCPocketPC等设备上的应用开发。等设备上的应用开发。n为了提高软件开发效率,为了提高软件开发效率,ArcGIS开发包为开发人员提供了集成开发包为开发人员提供了集成于于VS环境的模板、向导、命令、代码段等。环境的模板、向导、命令、代码段等。nArcGIS开发包的安装开发包的安装1.ArcGIS桌面开桌面开发包包ArcObjects(AO)2.ArcGISEngine开开发包包-ArcGISEngine(AE)3.ArcGISServer开开发包包nArcGIS开发包安装后开发包安装后1.VSIDE集成框架(开集成框架(开发环境元素)境元素)2.开开发类库3.开开发文档文档ArcGIS Visual Studio IDE Integration FrameworknArcGISVisualStudioIDEIntegrationFrameworkforadd-ins(NewinArcGIS10)nArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsnArcGISVisualStudioIDEIntegrationFrameworkforserverobjectextensionsnWebMappingApplicationArcGIS Visual Studio IDE Integration FrameworkArcGIS Visual Studio IDE Integration Framework for ArcGIS Visual Studio IDE Integration Framework for add-insadd-insn在在VS环境下开发:环境下开发:创建解决方案(Solution)一到多个项目(Projects)一到多个类(Classes)nArcGISVSIDE集成框架元素:集成框架元素:1.ArcGISProjecttemplates(项目模板目模板)nArcGIS Project wizard 2.ArcGISItemtemplates(类模板模板)nArcGIS Add Class wizard3.ArcGISSnippets4.ArcGISReferencedialogbox5.ArcGISComponentCategoryRegistrardialogbox6.ArcGISLicenseInitializerdialogbox7.ArcGISToolboxReferencedialogbox8.ArcGIS.NetCodeConverter9.ToolboxconfigurationArcGIS Visual Studio IDE Integration Framework for ArcGIS Visual Studio IDE Integration Framework for extending ArcObjectsextending ArcObjectsArcGIS Project templates(项目模板)nThefollowingaretheavailableprojecttemplates:Desktop:Desktop:Windows Application Console Application Class Library(General)Class Library(ArcMap)Class Library(ArcCatalog)Class Library(ArcScene)Class Library(ArcGlobe)Engine:Engine:Windows Application Console Application Class Library(General)MapControl Application GlobeControl Application server object extensions server object extensions REST SOAPServer Web ApplicationServer Web ApplicationWeb Mapping ApplicationnToolboxconfiguration:AddsArcGIScontrolsintheVisualStudioToolboxwindow.ArcGIS Project wizard(项目向导)n当使用当使用ArcGIS项目模板来创建一个新项目时,项目模板来创建一个新项目时,ArcGIS项目向导项目向导会自动打开,通过自动添加会自动打开,通过自动添加ArcGIS引用及许可初始化代码,来帮引用及许可初始化代码,来帮助你高效地搭建新的助你高效地搭建新的ArcGIS定制项目。定制项目。ClassClass LibraryLibrary (ArcMapArcMap )WindowsWindows ApplicationApplication (Desktop)(Desktop)Windows Application(Engine)Windows Application(Engine)ArcGIS item templates Add-in组件模板组件模板类模板类模板ArcGIS Add Class(最通用的类模板)Wizardn当选择当选择“ArcGISClass”模板后,模板后,添加类向导添加类向导会自动显示,指导会自动显示,指导你完成类的创建。你完成类的创建。nArcGISAddClassWizardincludethefollowing3steps:1.BaseImplementationoption2.ComponentCategoryoption3.OptionalInterfacesoptionArcGIS Add Class(最通用的类模板)WizardBaseImplementationoptionnCustomization group nBase component ComponentCategoryoptionnCategories nCategory properties OptionalInterfacesoptionnAvailable optional interfaces nSelected interfaces ArcGIS Reference dialog box ArcGIS Reference dialog box ArcGIS Component Category Registrar dialog box ArcGIS Component Category Registrar dialog box ArcGIS License Initializer dialog boxArcGIS License Initializer dialog boxn不管是不管是ArcGIS桌面应用程序还是独立的桌面应用程序还是独立的GIS应用程序,在访问应用程序,在访问ArcObjects组件之前,需要组件之前,需要明确地明确地使用合适的使用合适的ArcGIS产品许可产品许可进行初始化。进行初始化。n开发人员可以使用开发人员可以使用“ArcGISLicenseInitializerdialogbox”来产来产生并添加许可初始化代码到项目中的适当位置。生并添加许可初始化代码到项目中的适当位置。n但如果选用项目模板,创建过程中包含选择合适的产品许可选但如果选用项目模板,创建过程中包含选择合适的产品许可选项。项。ArcGIS Toolbox Reference dialog box ArcGIS Toolbox Reference dialog box nThisdialogboxallowsyoutocreateamanagedassemblyforacustomArcGIStoolbox,withoneclassrepresentingeachgeoprocessingtoolinthetoolbox.Youcanthenusetheseclassestosetupandrungeoprocessingtools.Snippets in ArcGIS for.NET developersSnippets in ArcGIS for.NET developersn为了帮助为了帮助ArcGIS软件开发人员进一步提高软件的开发效率,软件开发人员进一步提高软件的开发效率,“ArcGISVisual
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!