ArcGIS-Engine二次开发入门1教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《ArcGIS-Engine二次开发入门1教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS Engine 二次开发 入门 教学 课件
- 资源描述:
-
1、Wuhan University School of Remote Sensing and Information Engineering张文张文、黄长青、黄长青武汉大学遥感信息工程学院武汉大学遥感信息工程学院基于C#.NET和AO/AE的GIS设计与开发12023年1月6日Wuhan University School of Remote Sensing and Information Engineering2Part 5:2023年1月6日35.1 ArcGIS Engine简介简介5.2 ArcGIS Engine开发起步开发起步 5.3 属性查询属性查询5.4 空间查询空间查询5.5
2、BaseCommand开发实例开发实例5.6 BaseTool开发实例开发实例5.7 通过代码添加图层通过代码添加图层5.8 构建一个简单的构建一个简单的GIS应用应用5.9 问题解决方法及帮助文档的使用问题解决方法及帮助文档的使用2023年1月6日5.1 ArcGIS Engine简介简介lArcGIS Engine的功能十分强大。作为ArcGIS Engine开发者,您可以实现以下列出的和其他更多的功能,这包括:用多个图层来显示地图,例如道路、水系、边界等地图的漫游和缩放地图上要素的确认地图上要素的查询和定位根据属性值显示注记根据航片或者卫片显示图像绘制几何图形,例如点、线、弧、多边形添加
3、描述性的文字42023年1月6日沿着线选择或者选择矩形、某一范围内、多边形等内部的要素选择距离在某一范围内的要素利用SQL语言来寻找和选择要素利用专题地图来渲染要素,如唯一值法、分级法和点状密度法动态显示实时地图或者时序数据根据地理编码来寻找位置转换您地图的坐标系根据几何操作来生成缓冲区、计算差值,或者进行求交、求并等运算编辑要素形状或者旋转地图创建并更新要素的几何形状及其属性52023年1月6日编辑要素(Editing Features)lArcGIS Engine开发包让您构建出能创建、修改和删除geodatabase中矢量要素或者shapefile文件的应用程序。标准的ArcGIS En
4、gine Runtime能够让编辑shapefile文件或者personal geodatabase中简单要素的程序运行。然而,要构建企业级geodatabase的全部功能,就需要ArcGIS Engine Runtime中的Geodatabase Update选项。62023年1月6日空间建模和分析l空间建模和通过增加ArcGIS Engine Runtime中的Spatial选项,您能够扩展ArcGIS Engine的功能。这个选项(Spatial选项)能提供一系列强劲的空间建模和分析功能。您能够创建、查询、表达和分析基于象元的栅格数据,能够集成栅格和矢量数据进行分析,能够从已有数据挖掘出
5、新的信息,能够从多层数据中查询信息,能够在ArcGIS Engine应用程序中完美集成基于象元的栅格数据和矢量数据。72023年1月6日三维可视化等lArcGIS Engine Runtime中的3D选项让您通过使用Scene和Globe控件来有效的表达和分析区域及全球数据。l例如,您能够:显示Scene和Globe文档展示交互性的透视图,包括漫游、缩放、旋转、倾斜、模拟飞行以便于表达和分析显示真实世界的表面要素,例如楼房展示视域和可见范围分析、场景高度内插、剖面分析和最短距离分析82023年1月6日l这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。如果您之前没有接触
6、过ArcGIS Engine的开发,那么这个例子是您迈入ArcGIS Engine二次开发大门的极好例子,如果您之前没有接触lC#.NET,也无需担心,这个例子将从零开始引导您一步一步完成任务。5.2 ArcGIS Engine开发起步第一个简单的地图显示程序92023年1月6日l首先打开Microsoft Visual Studio 2005,点击菜单栏中的“文件”“新建项目”,在弹出的对话框中选择新建一个C#的Windows应用程序,之后更改项目名称为“MapView”,更改文件的路径为个人实习文件夹,点击“确定”即可。创建一个新的工程图图23 新建项目对话框新建项目对话框102023年1
7、月6日l点击编译器最左侧的“工具箱”,在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的MapControl,之后在Form1的空白处单击鼠标左键不放并拖拽鼠标,直到调整MapControl到合适的大小再松开鼠标(您也可以直接在工具箱中双击MapControl,该控件则会自动加入到Form1中)。用同样的方法,再将LicenseControl添加到Form1中。添加控件及引用图图24 工具箱工具箱112023年1月6日l如果您在工具箱中找不到MapControl,则请依次尝试以下两种解决方案。首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出
8、菜单中选择“重置工具箱”。如果这一步操作之后仍然无法看到MapControl,则请滑动工具栏右侧的滚动条至最底部,找到“常规”选项卡,然后在“常规”选项卡上单击鼠标右键,在弹出菜单中单击“选择项(I)”,在弹出的对话框中找到“AxLicenseControl”和“AxMapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework组件”这个面板中找不到这两项,则选择“COM 组件”面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾)。图图25 重置工具箱重置工具箱122023年1月6日图图26 选择项选择项图图
9、27 选择工具箱项选择工具箱项132023年1月6日图图28 选择工具箱项选择工具箱项142023年1月6日添加好MapControl和LicenseControl之后,调整Form1和MapControl的位置与大小,如下图所示:图图29 窗体布局窗体布局152023年1月6日在MapControl上单击鼠标右键,选择“属性”,则会弹出MapControl的属性设置面板,在之前也介绍过,通过这个面板可以完成许多简单的工作。如图所示,点击“Map”面板,之后点击 按钮,在弹出的对话框中选择下图所示的路径(注:笔者的ArcGIS安装在D盘,若您的ArcGIS装在别的盘符,请做相应修改),再在此路
10、径下选择“States”,点击“Open”。之后在MapControl的属性页上点击“确定”即可。添加地图图图30 文件添加路径文件添加路径162023年1月6日l至此,我们已经完成了一个最简单的地图显示程序,下面一起来看一下成果吧。点击“启动调试”按钮(或者在“调试”菜单下选择相应命令,或者按键盘的F5键),可以得到如下的运行结果。图图31 “启动调试启动调试”按钮按钮172023年1月6日图图32 初次运行结果初次运行结果182023年1月6日l我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和
11、全图显示的功能。添加基本的代码图图33 MapControl控件支持的所有方法控件支持的所有方法192023年1月6日l双击MapControl控件,可以进入代码编辑界面。从窗口上方的下拉列表框中,我们能够看到MapControl能够响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统,第六章对帮助系统有更加详细的介绍)。双击MapControl进入代码编辑界面的时候,默认的是“OnMouseDown”事件,下一步就需要在这个事件中添加响应鼠标的相关代码。l请您在Private Sub AxMapControl1_OnMouseDown函数中添加如下代码:if(e.button=1)th
12、is.axMapControl1.Extent=this.axMapControl1.TrackRectangle();else if(e.button=2)this.axMapControl1.Extent=this.axMapControl1.FullExtent;202023年1月6日l再次运行程序,鼠标左键在地图上拉框可以实现地图的放大功能,而右键单击地图则会还原地图的全图显示。图图34 任意比例尺放大功能任意比例尺放大功能212023年1月6日l如果将代码替换如下,则能实现左键放大,右键漫游的功能。if(e.button=1)this.axMapControl1.Extent=thi
13、s.axMapControl1.TrackRectangle();else if(e.button=2)this.axMapControl1.Pan();222023年1月6日l下面我们依次来看看这些代码都代表什么意思。首先看来第一段:if(e.button=1)this.axMapControl1.Extent=this.axMapControl1.TrackRectangle();else if(e.button=2)this.axMapControl1.Extent=this.axMapControl1.FullExtent;l这个代码是一个If Else条件语句,关于“e”的详细定义及
14、其中包含的各参数,请参考帮助中与“IMapControlEvents2,OnMouseDownEventHandler delegate”关键字相关的内容。代码解释232023年1月6日l可以根据e中包含的“button”值来判断鼠标的单击操作是来自何处,若button值为1,则为鼠标左键,2代表鼠标右键,4代表鼠标中键。当判断得到是鼠标左键单击时,执行“AxMapControl1.Extent=AxMapControl1.TrackRectangle”这条语句,其中,等号右侧是调用了“TrackRectangle”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域
15、(Extent),这样就实现了地图的放大功能。类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。l第二段代码与第一段结构一样,只是在右键的相应事件上略有不同,这是调用了“Pan”方法,实现了地图的漫游功能。242023年1月6日l通过这个例子,我们制作出了一个最简单的地图浏览程序MapView,并能响应一些基本的鼠标操作。在MapControl的属性页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd或者*.mxt),您也可以利用刚才的方式一次性多加入一些图层而不仅仅加入“States”一个,同时可以更改各图层的叠放
16、次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置MapControl的显示方式,是否支持地图的预览功能,边框样式等等。您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉ArcGIS Engine的开发是有一定帮助的。如果需要重置MapControl,只需要点击“Data”面板中的“Reset”按钮。当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。小结252023年1月6日l查询是GIS中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。5.3 属性查询添加控件l如果上一小节的工程已经关闭,则将其
17、打开,如果您之后又在MapControl中添加了一些别的数据,请将其删除,只保留一个“states”图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。用之前讲过的方式,在窗体中添加一个Label和一个TextBox。将Label的“Text”属性修改为“StateName”,结果如下:图图35 Label控件和控件和TextBox控件控件262023年1月6日l首先添加引用。点击菜单栏上的“项目”“添加引用”,在弹出的对话框中同时选择“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”(选择的时候按下Ctrl键以同时选择多个),点击确定。l之后
18、双击TextBox1控件,进入代码编辑界面。在代码编辑区域的最上方输入以下内容:lusing ESRI.ArcGIS.Carto;lusing ESRI.ArcGIS.Geodatabase;如下图所示:添加引用和代码图图36 引用添加位置引用添加位置272023年1月6日图图37 添加引用对话框添加引用对话框282023年1月6日l之后在控件之后在控件TextBox的事件中选择的事件中选择KeyUp,在,在KeyUp事件中添加以下代码:事件中添加以下代码:图图38 KeyPress方法方法292023年1月6日 if(e.KeyCode=Keys.Enter)/定义图层,要素游标,查询过滤器
19、,要素 IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;IQueryFilter pQueryFilter;IFeature pFeature;/获取图层 pFeatureLayer=this.axMapControl1.Map.get_Layer(0)as IFeatureLayer;/如果图层名称不是states,程序退出 if(pFeatureLayer.Name!=states)return;/清除上次查询结果 this.axMapControl1.Map.ClearSelection();/pQueryFilter的
20、实例化 pQueryFilter=new QueryFilterClass();/设置查询过滤条件 pQueryFilter.WhereClause=STATE_NAME=+txtStateName.Text+;302023年1月6日/查询 pFeatureCursor=pFeatureLayer.Search(pQueryFilter,true);/获取查询到的要素 pFeature=pFeatureCursor.NextFeature();/判断是否获取到要素 if(pFeature!=null)/选择要素 this.axMapControl1.Map.SelectFeature(pFea
21、tureLayer,pFeature);/放大到要素 this.axMapControl1.Extent=pFeature.Shape.Envelope;else /没有得到pFeature的提示 MessageBox.Show(没有找到名为+txtStateName.Text+的州,提示);312023年1月6日l运行程序,分别向编辑框中输入“Texas”和“RS”,键入回车,如下图所示:图图39 Texas州查询结果州查询结果322023年1月6日图图40 RS查询结果查询结果332023年1月6日 if(e.KeyCode=Keys.Enter)上述代码是一个判断语句,即当用户输入回车的
展开阅读全文