ArcGIS平台及开发.ppt
课程组成部分,Who,What,Why,How,GIS起源于人口普查,土地调查和自动制图,1960年,加拿大测量学家R.F.Tomlinson(诺基尔.汤姆林逊/罗杰汤姆林森)提出了把地图变成数字形式的地图,1963年,又提出GIS这一术语,并建立了第一个GIS加拿大GIS(CGIS),随后GIS以燎原之势在全世界迅速发展起来。,英国诺丁汉大学和加拿大阿卡迪亚大学两所学校的双学士 加拿大麦吉尔大学的硕士学位 英国伦敦大学学院的哲学博士学位 1933年,出生在英国剑桥 1963年,在加拿大建立了第一个GIS系统CGIS 1977年,于加拿大安大略省的渥太华,创立有关地理学方面的咨询公司 1995年,获美国地理学家联盟颁发的James R.Anderson应用地理学奖 1996年,获得GIS世界颁发的GIS终身成就奖 1997年,成为第一个赢得Esri终身成就奖的人物 2004年,获得加拿大最高公民荣誉勋章 2010年,获得美国国家地理学会最高荣誉奖,罗杰汤姆林森出席2010年Esri中国华北区用户大会,地理学、地图学家,遥感应用与地理信息系统专家 1920年2月28日生于江西萍乡。1941年毕业于浙江大学史地系。1980年当选为中国科学院学部委员(院士)。1992年当选为第三世界科学院院士。中国科学院遥感应用研究所名誉所长、地理科学与资源研究所研究员。20世纪50年代积极推动我国国家地图集的编制。60年代倡导航空像片系列制图与计算机辅助制图。70年代致力于开拓遥感应用,组织自然资源与城市环境航空遥感实验。80年代负责研制我国资源与环境信息系统国家规范,筹建资源与环境信息系统国家重点开放实验室,设计黄河、长江中下游洪涝灾情评估信息系统。90年代积极参与地球信息科学、全球变化及数字地球战略研究。代表作有地学的探索、六卷石坚文存、遥感地学分析和地理信息系统导论。获国家自然科学奖二等奖2次、国家科技进步奖一等奖、航天部科技进步奖一等奖。,Jack Dangermond在全球GIS领域享有极高的声望,被公认为是GIS业界的先驱和技术领导者。他曾说:“我一生只做了一件事,就是GIS。”Jack Dangermond先生在加州工学院(California Polytechnic College,Pomona,California)获得环境科学的学士学位;在明尼苏达大学科技学院(Institute of Technology at the University of Minnesota)获得城市规划硕士学位,同时还在哈佛大学获得了城市景观建筑的硕士学位。作为GIS和制图技术的权威,Dangermond在摄影测量、计算机技术、环境科学以及制图学等领域发表过多部专著。因为其对GIS技术的卓越贡献,Dangermond被授予各种荣誉,获得过美国副总统戈尔的接见。Jack Dangermond现任ESRI公司总裁,还是很多政府机构顾问委员会的成员,这些机构包括:美国环境保护署、美国国家航空和宇宙航行局、NCGIA以及美国国家科学院和美国国家科学基金。,ESRI,What,美国环境系统研究所(Environmental Systems Research Institute,ESRI),成立于1969年,是世界上最大的地理信息系统技术提供商。,ESRI致力于为全球各行业的用户提供先进的GIS技术和全面的GIS解决方案。ESRI其多层次、可扩展,功能强大、开放性强的ArcGIS解决方案已经迅速成为提高政府部门和企业服务水平的重要工具。全球200多个国家超过百万用户单位正在使用ESRI公司的GIS技术,以提高他们组织和管理业务的能力。在美国ESRI被认为是紧随微软、Oracle和IBM之后,美国联邦政府最大的软件供应商之一。,ESRI公司关注中国空间信息技术的发展已有二十多年的历史。目前,ESRI公司的ArcGIS系列软件已成为中国用户群体最大,应用领域最广的GIS技术平台。,ESRI,What,ESRI,What,ESRI,What,ESRI,What,ESRI,What,ESRI产品发展,What,ESRI产品发展,What,ESRI产品发展,What,ESRI产品发展,What,ESRI产品发展,What,MapGIS产品发展,What,1991,1995,2003,研发出中国第一套彩色地图编辑出版系统MAPCAD,开创我国计算机制图新纪元,2004,2007,基于“零编程,巧搭建”思想的搭建式平台,第四代分布式大型GISMAPGIS7.0研制成功;“教育部GIS软件及其应用工程研究中心”建设成功,武汉中地通过ISO9001质量体系认证,在第八次全国GIS软件测评中,MAPGIS保持第一;MAPGIS成功应用于“神舟五号首次载人飞船”航天工程中,研制开发出微机地理信息系统MAPGIS,被评为具有国际先进水平的国产软件,2009,GIS新纪元MapGIS K9诞生,2011,云端遨游MapGIS K9 SP3,What,ArcGIS,ArcGIS是由ESRI早期的GIS产品Arc/Info演变而成的。1981年ESRI发布了它的第一套商业GIS软件ARC/INFO,严格的矢量数据拓扑结构,强大的空间处理算法,使它迅速占据了测绘、自动化制图和地学研究等领域的应用市场。随着计算机技术的飞速发展以及GIS技术的不断成熟,ESRI的GIS产品不断更新扩展,形成适应各种用户和机型使用的系列产品。1998年推出了ARC/INFO的最终版本:Arc/Info 8。,Arc/Info产品功能强大,但是人机交互一直停留在DOS界面,1999年的4月ESRI开始推出ArcGIS 8.1,不仅保留了Arc/Info产品强大的处理功能(ArcGISWorkstation),同时极大地丰富了在Windows桌面上的应用(ArcMap,ArcCatalog)。一经推出,就成为世界上应用广泛的GIS软件之一。目前,ArcGIS的最高版本是ArcGIS 10。,What,ArcGIS,ArcGIS是Esri公司集40余年地理信息系统(GIS)咨询和研发经验,奉献给用户的一套完整的GIS平台产品,具有强大的地图制作、空间数据管理、空间分析、空间信息整合、发布与共享的能力。,ArcGIS不但支持桌面环境,还支持移动平台、Web平台、企业级环境、以及云计算架构。,ArcGIS同时为开发人员提供了丰富多样、基于IT标准的开发接口与工具,让您轻松构建个性化的GIS应用。,What,ArcGIS,What,ArcGIS,What,ArcGIS,What,ArcGIS,What,ArcGIS,What,ArcGIS,What,ArcGIS,What,ArcGIS,总的来说,从功能上看,ArcGIS是一个处理地图和地理信息的系统。用户通过ArcGIS软件能够完成以下工作:创建和使用地图 编辑地理数据 管理数据库中得地理信息 分析地理信息 共享和显示地理信息 在一系列应用程序中使用地图和地理信息,What,ArcGIS桌面应用程序,ArcMap,What,ArcGIS桌面应用程序,ArcMap,What,ArcGIS桌面应用程序,ArcMap,What,ArcGIS桌面应用程序,ArcMap,What,ArcGIS桌面应用程序,ArcCatalog,What,ArcGIS桌面应用程序,ArcCatalog,What,ArcGIS桌面应用程序,ArcCatalog,What,ArcGIS桌面应用程序,ArcCatalog,What,ArcGIS桌面应用程序,ArcGlobe,What,ArcGIS桌面应用程序,ArcGlobe,What,ArcGIS桌面应用程序,ArcScene,What,ArcGIS桌面应用程序,ArcScene,What,ArcGIS桌面应用程序,ArcScene与ArcGlobe之间的功能区别,What,ArcGIS桌面应用程序,扩展模块,What,ArcGIS桌面应用程序,扩展模块,What,ArcGIS桌面应用程序,扩展模块,What,ArcObject(AO),组件技术对GIS的影响直接导致了组件式地理信息系统(Component GIS)的产生。ESRI在2001年推出的GIS软件平台ArcGIS8.1全面采用了COM技术,是组件式GIS的典型代表。在ArcGIS8.x中,用户不仅可以对软件本身进行功能和界面定制,而且可以使用通用编程语言(VB,VC+,Java),从底层扩展其数据模型和系统功能。,Arc/Info与COM技术的结合,诞生了一个重要的GIS“工业化”产物ArcObject。它是一套ArcGIS的可重用的通用的二次开发组件集。现在,ArcGIS的所有软件产品都是通过ArcObject提供的“零部件”搭建而成的。从桌面到服务器软件,它们的心脏只有一个:ArcObject。,开发人员使用AO不仅可以对ArcGIS软件本身进行功能和界面定制,而且可以使用通用编程语言,为自己的应用定制和扩展GIS软件的功能。,What,ArcObject(AO),What,ArcGIS Engine(AE),ArcGIS Engine(AE)是用于构建定制应用的一个完整的嵌入式GIS组件库,它可以为用户提供针对GIS解决方案的定制应用。用它开发的程序不需要安装桌面版程序,它运行只需要购买单独的Runtime就可以了。这套产品在灵活性和费用上都比较有优势。除此之外,AE还提供了JAVA API供JAVA程序员使用,这点是使用Desktop版本的AO开发所不支持的。,由于桌面版的AO开发出来的程序仍然无法脱离ArcGIS平台,处于产品战略上的考虑,ESRI认识到只有让终端用户得到更多的实惠才能够更进一步的拓展市场,于是将AO中的一些组件单独打包出来,命名为ArcGIS Engine(AE)。,AO提供了56个类库,AE提供了21个类库,AE包含的类库是AO提供的类库的一个子集。,What,ArcGIS Engine(AE),AE提供的类库中几乎没有以“UI”结尾的类库(除了SystemUI)。这意味着,在AE开发环境中,没有多少界面组件可供使用,比如在ArcMap中用于浏览和选择数据的GxDialog,在AE中是无法使用的。比如编辑器Editor,安装在机器上根本就没有相应的类库。,AE提供的类库集中在界面和控件(3个:System,SystemUI以及Controls)、可视化显示(5个:Carto,Display,Geometry,SpatialAnalyst,GlobeCore)、数据访问(5个:DataSourceFile,DataSourcesGDB,DataSourcesOleDB,DataSourcesRaster,GeoDatabase和GeoDatabaseDistributed),以及分析(3个:3DAnalyst,GeoAnalyst,NetworkAnalysis)等方面。这些对象库限定了AE开发平台能够实现的功能。,AE界面主要是通过TocControl和ToolbarControl这两个界面控件来搭建。,What,ArcGIS Engine(AE),Why,为什么使用AE?,Why,为什么使用AE?,Why,为什么使用AE?,标准的GIS架构。AE提供了大量的功能组件,并且具有可扩展性,这些充足的组件提供了基本的GIS功能函数,开发者只需把主要精力集中在开发解决复杂具体的GIS应用问题上。,为用户定制特定的GIS应用提供了一个低成本、轻量级的选择。,高效使用。AE开发需要每台计算机有一个license,但同一台电脑可运行多种ArcGIS应用程序。,可视开发控件。AE提供了一组可视的开发控件,普通用户只需简单培训就可以快速开发出应用系统。,Why,为什么使用AE?,可扩展选项。AE提供了附加的运行选项功能,包括Geodatabase更新选项、3D分析、空间分析以及网络分析等功能组件的扩展接口。,支持多种开发语言。COM,net,Java,C+,丰富的开发资源。AE提供了对象模型图(OMD)、示例代码、开发应用工具,以及帮助文档来辅助用户开发。,跨平台特性。AE及其组件可以在包含Windows,UNIX和Linux的各种平台上运行,用户不需要改变其计算机基本配置就可使用。,How,AE开发的相关资源,帮助文档可以得到较详细的书面解释,包括单机版和在线版,How,AE开发的相关资源,OMD对象模型图,以图解的形式统筹大局,How,AE开发的相关资源,ESRI官方网站技术支持中心、资源中心,How,AE开发的相关资源,网络论坛ESRI中国社区、GIS帝国、GIS论坛等等,畅所欲言,How,使用OMD解决编程问题,AE使用的类和接口都是通过几十个对象模型图来描述和展现的。,开发步骤,OMD使用的各种图示都是基于统一建模语言(UML)的图示。UML是一种面向对象分析和设计的工业制图标准,用来书写各种COM构造文档,进行某些修改。,定义编程任务,正确定位相关对象模型,浏览对象模型图,How,使用OMD解决编程问题OMD查看,How,使用OMD解决编程问题OMD查看,How,使用OMD解决编程问题,How,使用OMD解决编程问题,蛋,鸟,翅膀,羽毛,2,Abstract,Class,Class,Class,小鸡,CoClass,巢,CoClass,*,How,使用OMD解决编程问题,MxDocument,Map,Layer,*,*,FeatureLayer,Application,How,使用OMD解决编程问题,抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。例如动物对于猫和狗而言是一个抽象类,自然界没有存在过具体的“动物”对象,而是说猫或者狗是一种动物。,Dim pLayer As ILayerSet pLayer=New FeatureLayer,How,使用OMD解决编程问题,Creatable:Use the New keywordDim pMap As IMapSet pMap=New MapInstantiable:Obtain from other objectsDim pMap As IMapSet pMap=pMxDocument.FocusMap,组件类是一个可以直接创建对象实例的类,它的实例对象不依赖其它对象的存在而存在,其生存周期也不用其它的对象管理。,How,使用OMD解决编程问题,普通类不能够直接产生一个对象,但它可以用其它的普通类或组件类的方法产生,而不是使用New关键字来完成。如鸡蛋不能自己创建自己,而只能由募集下蛋这种行为产生。,Dim pNewRow As IRowSet pNewRow=pTable.CreateRow,How,使用OMD解决编程问题,Property哑铃形状的图标Method,How,使用OMD解决编程问题,Property Put:Most ArcObjects propertiesProperty holds a value or a copy of an objectDo not use Set keyword Property Put by Reference:Some ArcObjects propertiesProperty holds a reference to an objectMust use the Set keyword如果引用对象发生了变化,对象的属性将同步受到影像,pLayer.Name=“Port Moresby”No Set keyword,传值方式,Set pLayer.FeatureClass=pMoresbyData Must use Set!,引用赋值,How,使用OMD解决编程问题,这些接口也是有效的。但是详细的属性和方法必须在其它地方浏览。(e.g.,Object Browser).,该接口被本类使用.所有的属性和放都列表在类图中.,继承接口是有效的,How,使用OMD解决编程问题,FeatureLayer on Map Layer OMD,概念上,这是一个对象模型事实上,被分别在几张图表里存放虫洞表现了图表与图表间的连接关系,Element on ArcMap OMD,虫洞,Wormholes,How,定义编程任务,分清子任务,使用ArcGIS术语描述需要解决的问题,E.g.将一个名为States的数据集添加到ArcMap中ArcGIS术语描述为:访问一个个人数据库(Personal Geodatabase)中名为States的要素类(Feature Class),然后将其添加到ArcMap中。,尽可能细化任务,区分子任务最简单的方式就是找出任务描述中隐藏的动词、名词(谓语、宾语),或者有关的操作,在这里,称这些词为关键词。E.g.(1)访问个人数据库(access,database)(2)找到States要素类(find,feature,class)(3)创建新图层(create,layer)(4)添加新图层到MapControl中(add,layer,mapcontrol),搜索相关示例代码或推荐的方法,确定编码的起始点,(1)代码编写和测试阶段VBA。可以方便组织、测试和调试,能够使用所有的类和接口。代码测试结束后可以作为VBA宏保存,也可以移植到其他编程环境中。这是一种快捷有效的代码编写和调试方法。(2)创建ArctiveX COM组件。如果想要将AO功能打包进DLL、EXE或OCX等,就必须在VBA之外的编程环境中进行。(3)独立运行程序。,How,定义编程任务,尽可能查找所有可用的资源,如帮助文档、OMD、论坛查找关键词对应的英文单词!,How,正确定位对象模型图(OMD),分清子任务,提取关键词,E.g.(1)访问个人数据库(access,database)(2)找到States要素类(find,feature,class)(3)创建新图层(create,layer)(4)添加新图层到mapControl中(add,layer,mapcontrol),查找正确的对象模型图(帮助文档内类库参考中的OMD,AllOMD.pdf),利用关键词在帮助文档中查找相应的类和类库,然后通过类库名找到OMD!例如:通过Access找到AccessWorkspacefactory Class,在该类的描述页中名称下的括号中DataSourcesGDB即为类库名。,How,正确定位对象模型图(OMD),How,正确定位对象模型图(OMD),阅读帮助文档及OMD的概要部分,(1)OMD概要提供了每个OMD中包含的重要的类的背景信息。基于这些信息,可以进一步提取出新的关键词,甚至与子任务相关的类名称。这些关键词可能是原先没有想到的,将这些关键词添加到已有关键词的列表中,可以增加研究OMD时候的线索。e.g.基于Geodatabase概要页,将会进一步发现以下关键词:Access,Feature Class workspace,Factory(2)通过阅读概要页,可以了解每个OMD中存在哪些重要的类,都是用来干什么的。某些概要页中还提供了示例代码,演示了某些关键类和接口的用法。通过阅读可以逐步加深对它们的理解,这一步是整个问题解决指南中最为重要的环节。,How,正确定位对象模型图(OMD),阅读帮助文档及OMD的概要部分,How,浏览对象模型图(OMD),通过以上方法找到相关类库的OMD,如GeoDatabase,How,浏览对象模型图(OMD),通过浏览OMD的说明来理解OMD的组织方式和组织结构,结合帮助文档内提供的示例来理解OMD中各种图示的含义,How,浏览对象模型图(OMD),追踪类之间的使用流程,由此组织代码,根据子任务提取的关键词查找OMD,在定位可能会有牵连的类之后,通过ArcGIS开发帮助查找相关帮助专题,在充分理解上面各步骤中获得的帮助资料的基础上,进行代码编写。,接着在帮助文档中查找与AccessWorkspaceFactory相关的说明、示例代码、支持的接口等资源。,How,浏览对象模型图(OMD),追踪类之间的使用流程,由此组织代码,How,浏览对象模型图(OMD),追踪类之间的使用流程,由此组织代码,How,浏览对象模型图(OMD),子任务一:访问数据库Dim pWSF as IWokspaceFactorySet pWSF=new AccessWorkspaceFactoryDim pWS as IWorkspaceSet pWS=pWSF.OpenFromFile(“C:DataUS.mdb”,0)此时涉及到IWorkspace接口,How,浏览对象模型图(OMD),通过查看帮助文档或浏览OMD,Workspace类同时也支持IFeatureWorkspace,子任务二:找到State要素类Dim pFWS as IFeatureWorkspaceSet pFWS=PWS接口查询,QI:从对象的一个接口查询 另一个接口定义的属性和方法Dim pFC as IFeatureClassSet pFC=pFWS.OpenFeatureClass(“State”)此时涉及到IFeatureClass接口,How,浏览对象模型图(OMD),按照以上方法,在帮助文档中查找子任务三的关键字Create、Layer,找到一个示例“How to add a layer to a map from a layer file”,从示例中可以获得任务需要的接口(IMap)和与子任务四的关键字(add Layer,mapcontrol)相关的方法(AddLayer),How,浏览对象模型图(OMD),按照前面介绍的方法,进一步查找MapControl,可以找到MapControl Class,并能通过该类的方法获得一个Map对象。,在帮助文档或通过前面介绍的方法找到的OMD中,也看到AddLayer方法,在该方法中需要传递进去一个ILayer参数,接下来考虑如何将之前获得的IFeatureClass对象与ILayer关联,How,浏览对象模型图(OMD),查找Ilayer对应的OMD或者在帮助文档里面查找实现该接口的类,会找到FeatureLayer类与提取的关键字比较接近,继续查找会找到IFeatureLayer。,子任务三:创建新图层Dim pFL as IFeatureLayerSet pFL=new FeatureLayerSet pFL.FeatureClass=pFC 新图层与要素类建立关系子任务四:添加新图层到MapControl中Dim pMap as ImapSet pMap=pMC.map pMC为控件名称pMap.AddLayer pFL,