slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
GIS 应 用 开 发 Developing GIS Applications with ArcObjects using C#.NET 江西省研究生优质课程 PowerPoint Presentation
Download Presentation
GIS 应 用 开 发 Developing GIS Applications with ArcObjects using C#.NET 江西省研究生优质课程

Loading in 2 Seconds...

  share
play fullscreen
1 / 181
Download Presentation

GIS 应 用 开 发 Developing GIS Applications with ArcObjects using C#.NET 江西省研究生优质课程 - PowerPoint PPT Presentation

rusk
464 Views
Download Presentation

GIS 应 用 开 发 Developing GIS Applications with ArcObjects using C#.NET 江西省研究生优质课程

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. GIS 应 用 开 发 • Developing GIS Applications with ArcObjects using C#.NET • 江西省研究生优质课程 • 主讲:兰小机 GIS博士、教授 • Email : landcom8835@163.com • QQ :305333315 • 课件: ftp://218.87.136.94/

  2. 兰小机简历 • 兰小机,男,1965年12月生,博士,教授,硕士生导师,江西省百千万人才工程人选,江西省高校中青年学科带头人,江西省优秀研究生指导教师 ;地理学学科带头人、负责人。 • 主要经历 • 1988年7月毕业于南方冶金学院工程测量专业,获学士学位,并留校任教 • 1994年6月毕业于武汉测绘科技大学工程测量专业,获硕士学位,回校任教 • 2005年6月毕业于南京师范大学地图学与地理信息系统专业,获理学博士学位,回校任教

  3. 主要研究方向 • GIS应用开发 • 物联网、无线传感器网络与GIS • 分布式并行计算环境下空间数据的存储管理 • 空间数据库理论与空间数据挖掘

  4. 在研项目 • 江西省安监局科技项目--江西省重大危险源在线监控及应急救援信息系统,150万元,主持 • 国家自然科学基金项目--面向GML的时空关联规则及序列模式挖掘研究(编号:40971234) ,35万元,主持 • 国家自然科学基金项目--本原GML空间数据库理论及GMLGIS与传统GIS集成研究(编号:40761017) ,16万元,主持 • 江西省自然科学基金项目--分布式海量GML 空间数据并行存取与处理关键问题研究,2万元,兰小机主持 • 江西省教育厅科技项目--云计算环境下海量GML空间数据分布式存储管理关键问题,2万元,兰小机主持 • 萍乡市基础地理信息系统研究与开发,22万元,主持 • 城市公众地理信息服务系统研究与开发,10万元,主持

  5. GIS基础平台软件 桌面的 GIS软件 Web的 移动设备 GIS应用系统 GIS组件 OpenSourceGIS

  6. Open Source GIS Desktop Applications • GRASS (Geographic Resources Analysis Support System)   • Quantum GIS ,QGIS • OpenJUMP  • SharpMap • MapWindow  • gvSIG • uDig 

  7. Open Source Geospatial Libraries • JTS: Java Topology Suite • GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS) • NTS: Net Topology Suite, A C#/.NET port of JTS Topology Suite • Geotools • GeoAPI • OpenMap • GDAL: Geospatial Data Abstraction Library • DotSpatial: for MapWindow • FDO: Feature Data Object • MetaCRS • OSSIM: Open Source Software Image Map • Rasdaman: raster data manager

  8. Open SourceSpatial Database • PostGIS:is a spatial extension to PostgreSQL • MySQL Spatial:is a spatial extension to MySQL • SpatiaLite:is a spatial extension to SQLite

  9. Open SourceWeb Mapping • deegree • geomajas • GeoMoose • GeoServer • Mapbender • MapBuilder • MapFish • MapGuide Open Source • MapServer • OpenLayers • ZOO-Project

  10. Open SourceGIS Simulation and Analysis • UrbanSim • GeoDa,PySal is a python library that builds on the work done with GeoDa

  11. http://www.osgeo.org/:开源地理空间基金会(Open Source Geospatial Foundation,简称OSGeo)为全球性非营利性组织,目标是支持全球性的合作,建立和推广高品质的空间信息开源软件。 • SourceForge.net,又称SF.net,是开源软件的开发者进行开发管理的集中式场所,也是全球最大开源软件开发平台和仓库。

  12. 教学目标 • 《GIS应用开发》课程是我校地图学与地理信息系统、测绘科学与技术、测绘工程等专业研究生的核心课程,也是一门专业知识综合性很强的课程。该门课程的学习不仅要求学生具有GIS方面的专业知识,而且要求学生具有较强的软件开发能力。通过课程的学习,要求学生了解ArcGIS软件体系结构及ArcObjects组件构成,并能熟练使用ArcObjects进行应用型GIS开发;掌握应用型GIS开发的基本思路、技术方法;为硕士论文研究打下基础。

  13. 教学内容及时间安排

  14. 教材及参考材料 • 教材: • 《基于ArcObjects与C#.NET的GIS应用开发》,兰小机、刘德儿等编著,冶金工业出版社,2011年12月;2013年7月第二次印刷 • 最新课件 • 参考材料: • ArcObjects Help for .NET developers (http://resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/) • http://resources.arcgis.com/zh-cn/help/main/10.1/ • ArcGIS 开发工具包中的文档,包括ArcGIS开发帮助、组件帮助、对象模型图和示例 • http://www.osgeo.org/:开源地理空间基金会 • http:// SourceForge.net/:开源软件仓库

  15. 学习基础 • 熟练掌握ArcGIS Desktop(ArcMap、ArcCatalog)基本操作; • 了解Geodatabase、ArcSDE基本概念; • 会用C#进行程序设计。

  16. 课程考核 • 开发一个小型的GIS应用系统,按GIS软件工程的要求进行设计,并提供完整的设计开发方案,开发的小系统应具备GIS的基本功能,主要包括: • 打开、保存地图文档、添加数据 • 自定义命令、工具、菜单 • 空间数据符号化 • 空间数据管理 • 空间查询与空间分析 • 空间数据编辑功能:基本编辑功能、高级编辑功能

  17. 计算机组件技术 组件GIS 组件式的GIS应用开发

  18. Chap.1 GIS应用开发基础 • ArcObjects基础 • 组件对象模型 • .NET平台概述 • .NET组件与COM组件的互操作 • ArcGIS 系列产品与开发方式 • ArcGIS Visual Studio IDE Integration Framework • ArcGIS开发资源

  19. §1ArcObjects基础 • ArcObjects简介 • ArcObjects的组件库 • 理解对象模型图

  20. §1.1 ArcObjects简介 • ArcObjects是 ESRI公司ArcGIS系列产品的开发平台,它是基于Microsoft COM技术所构建的GIS组件产品,是一套可重用的通用的二次开发组件产品,它可以用于大量开发框架中,包括流行的像.NET 、Visual C++、Java等开发环境。 • ArcObjects不是为最终用户而是专门为开发人员提供的二次开发组件。 • ArcObjects是ArcGIS系列产品的基础,大部分ArcGIS产品都是由ArcObjects构建的。

  21. §1.2ArcObjects的组件库 • ArcObjects是一套庞大的COM组件集合,ArcGIS 各版本各种COM类型统计见下表:

  22. 为了更好地管理ArcObjects中数目众多的COM对象,ESRI将它们放置在不同的组件库中。对于.NET来说,一个组件库就是一个程序集(assembly),一个程序集可包含多个不同的命名空间(NameSpace)。如ESRI.ArcGIS.ADF.Local程序集的命名空间包括:为了更好地管理ArcObjects中数目众多的COM对象,ESRI将它们放置在不同的组件库中。对于.NET来说,一个组件库就是一个程序集(assembly),一个程序集可包含多个不同的命名空间(NameSpace)。如ESRI.ArcGIS.ADF.Local程序集的命名空间包括: • ESRI.ArcGIS.ADF.BaseClasses • ESRI.ArcGIS.ADF.CATIDs • ESRI.ArcGIS.ADF.COMSupport • ESRI.ArcGIS.ADF. Serialization

  23. ArcObjects10的组件库共65个(65 assemblies ),详细内容参见Learning ArcObjects、ArcObjectsSDKAPIReference • 如果不记得某个接口或对象属于哪个命名空间的时候,可以通过开发帮助查找。

  24. §1.3理解对象模型图 • ESRI提供了多种方法让用户了解ArcObjects组件及不同组件之间的关系 • ESRI提供的一系列OMD的PDF文件 • 开发帮助、APIReference • VS.NET中的对象浏览器

  25. 通过阅读ArcObjects的对象模型图 (Object Model Diagram,OMD) ,可以快速了解ArcObjects的结构和不同组件之间的关系。 • OMD使用UML(Unified Modeling Language,统一建模语言)描述,它补充了在对象浏览器中看不到的信息,可以帮助程序员了解类之间的关系,如何从一个类到另一个类,选择正确的接口,获取需要的属性和方法等。

  26. VS 中的对象浏览器

  27. §1.3.1 类与对象 • 在ArcObjects中存在三种类型的类: • 抽象类(Abstract Class) • 组件类(CoClass) • 普通类(Class) • 抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。 • 组件类是一个可以直接用new创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。 • 普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用new关键字来完成。

  28. §1.3.2类与类的关系 • ArcObjects的类之间存在四种关系 • 依赖关系 • 关联关系 • 组合关系 • 类型继承

  29. Map WorkspaceFactory * Workspace Layer MapControl Curve Map Segment Path PolyCurve

  30. §2组件对象模型 • 软件开发历史 • 什么是组件对象模型

  31. §2.1 软件开发历史 • 软件重用和开发效率始终是软件开发的核心问题。 • 在早期(面向过程语言),人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,让其他软件开发人员调用。它为应用开发者提供了方便,但是重用的粒度太小。 • 面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位是类,它封装了数据成员和函数成员 ,将最小组件的粒度提高了一个等级。但是,一个类提供了很多种方法和属性,使用和管理很不方便。

  32. COM技术(接口)的出现,解决了以上问题,将类的内部属性和方法进行分组。例如在Map类中有好几个接口,在这些接口中定义不同功能组的方法和属性,Map实现了这些接口,这样就可以使用接口进行定义。但COM也存在一个严重的问题:DLL灾难。COM技术(接口)的出现,解决了以上问题,将类的内部属性和方法进行分组。例如在Map类中有好几个接口,在这些接口中定义不同功能组的方法和属性,Map实现了这些接口,这样就可以使用接口进行定义。但COM也存在一个严重的问题:DLL灾难。 • .NET 技术的出现解决了“DLL灾难”问题。

  33. §2.2什么是组件对象模型 • 组件技术已经成为当今软件技术的潮流之一, 它已彻底改变软件生产和开发的模式。 • 组件技术是计算机软件业从手工作坊走向工业化成熟产业的转折点,它给整个GIS技术体系和应用模式带来了巨大影响。 • 用户可根据自己的需求灵活购买软件组件,只需编写一些“胶水代码”将各个组件“粘”起来,便可构建自己的应用系统,就如同组装计算机一样简单。

  34. 组件技术标准 • COM(DCOM):微软的组件对象模型((Distributed) Component Object Model ) • JavaBean:Sun公司的基于Java的组件技术 • CORBA:对象管理组织(Object Management Group,OMG)的组件技术标准,公共对象请求代理结构(Common Object Request Broker Architecture,CORBA)。

  35. COM知识要点 • COM是一种二进制级别的组件通信标准--接口(Interface),它定义了组件之间应该如何通信、一个COM对象的不同接口之间如何查询等。 • COM对象也是基于面向对象标准的。COM对象可以以DLL或者EXE文件形式存在,它包含着接口的具体实现。使用者可以通过接口来访问它内部的方法、属性。 • COM对象必须实现IUnknown接口,它负责管理COM对象生命周期并在运行时刻提供类型查询,当COM对象不使用的时候,是这个接口定义的方法负责释放内存。

  36. QI,即所谓查询接口 • 由于一个COM对象有很多个接口,不同的接口管理着COM的不同类型的方法、属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属性方法的过程称为QI。这个过程也是由IUnknown接口管理的。 IMap pMap ; IActiveView pActiveView ; pMap = axMapControl1.Map; //获取控件中的地图 …… pActiveView = pMap as IActiveView; //QI (Or pActiveView = (IActiveView)pMap ; ) ………

  37. 每个组件都有一个独一无二的标识GUID。接口的GUID称为IID,而组件类的GUID称为CLSID。CLSID还有一个文本别名,即所谓的ProgID,它是一个由项目名加组件类类名组成的字符串。每个组件都有一个独一无二的标识GUID。接口的GUID称为IID,而组件类的GUID称为CLSID。CLSID还有一个文本别名,即所谓的ProgID,它是一个由项目名加组件类类名组成的字符串。 • 一个COM对象可以有多个接口,一个接口也可以被多个COM对象实现。 • 接口分为两种,即内向接口和外向接口。 • 内向接口(Inbound Interface)是组织COM对象相关的方法和属性,COM对象必须实现所有的接口内容; • 外向接口(Outbound Interface)是用于组织COM对象相关的事件,开发人员根据需要实现事件接口。

  38. 接口可以从多个父接口继承(C# 类呢) • 接口继承机制是非常有用的,在很多时候程序员可以将一个子接口类型的对象定义为父接口类型的对象,从而实现更一般化的操作,如: • Private void CreateGeometry (IPolygon pPolygon) • Private void CreateGeometry (IGeometry pPolygon) • COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物。 • COM组件必须被注册后才能使用。

  39. COM的缺陷:由于COM对象可以被重用,这样多个程序可能共用一个COM对象,如果这个COM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况被称为“DLL HELL”(DLL灾难)。

  40. §3 .NET平台概述 • 针对Windows平台存在的缺陷,微软提出了全新的.NET技术体系,其主要包括 • .NET Framework • Visual Studio.NET

  41. Visual Studio .NET 是一套完整的开发工具,用于创建各种类型的应用程序,包括 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。 • .NET Framework 是生成、部署和运行 各种应用程序的平台。 .NET Framework 具有两个主要组成部分: • 通用语言运行时(Common Language Runtime--CLR),是 .NET Framework 的基础 • .NET Framework 类库。

  42. Windows Forms Web Applications Web Services Web Forms ASP .NET Mobile Data Classes (ADO.NET, XML, SQL) Base Class Library (System.IO, System.Drawing,System.Threading) Common Language Runtime (CTS, JIT, Memory Management) Operating System .NET Framework体系结构

  43. Visual Studio .NET VB C++ C# J# … Common Language Specification Windows Forms Web Applications Web Services Web Forms ASP .NET Mobile Data Classes (ADO.NET, XML, SQL) Base Class Library (System.IO, System.Drawing,System.Threading) Common Language Runtime (CTS, JIT, Memory Management) Operating System

  44. §3.1 通用语言运行时(CLR) • 通用语言运行时管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。 • CLR处于.NET Framework的最底层,是.NET Framework的基础,它为C#.NET、VB.NET、C++、J#等多种语言提供了统一的运行环境,使得用某种高级语言编写的应用程序可以在不同的操作系统和硬件上运行,而不需要按照特定环境重写应用程序。