ArcGISEngine二次开发——基础篇

上传人:平*** 文档编号:12616046 上传时间:2017-10-20 格式:DOC 页数:60 大小:1.39MB
返回 下载 相关 举报
ArcGISEngine二次开发——基础篇_第1页
第1页 / 共60页
ArcGISEngine二次开发——基础篇_第2页
第2页 / 共60页
ArcGISEngine二次开发——基础篇_第3页
第3页 / 共60页
ArcGISEngine二次开发——基础篇_第4页
第4页 / 共60页
ArcGISEngine二次开发——基础篇_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《ArcGISEngine二次开发——基础篇》由会员分享,可在线阅读,更多相关《ArcGISEngine二次开发——基础篇(60页珍藏版)》请在金锄头文库上搜索。

1、ArcGIS Engine 二次开发基础篇ArcGIS Engine 二次开发基础篇ArcGIS Engine 二次开发基础篇1 ArcGIS Engine 二次开发基础篇1.1 第一个简单的 ArcGIS Engine 地图显示程序这个例子将引导您创建第一个简单的地图显示程序,并添加基本的缩放和漫游功能。如果您之前没有接触过 ArcGIS Engine 的开发,那么这个例子是您迈入 ArcGIS Engine 二次开发大门的极好例子,将从零开始引导您一步一步完成任务。1.1.1 创建一个新的工程首先打开 Microsoft Visual Studio 2005,点击菜单栏中的 “文件”“新建

2、”“项目”,在弹出的对话框中选择新建一个 Visual C#的 Windows 应用程序,之后更改项目名称为 “地图浏览” ,更改文件的路径为个人实习文件夹,点击 “确定 ”即可。图 1 新建项目对话框选中项目“地图浏览”中的窗体“Form1” ,修改其 Name 属性为“MainForm” ,Text属性为“地图浏览” ,ArcGIS Engine 二次开发基础篇图 2 窗体命名1.1.2 添加控件及引用点击编译器最左侧的“工具箱 ”(不存在时可通过“视图” “工具箱”打开),在弹出的选择项中找到“ArcGIS Windows Forms”项,单击其中的 MapControl,之后在 For

3、m1 的空白处单击鼠标左键不放并拖拽鼠标,直到调整 MapControl 到合适的大小再松开鼠标(您也可以直接在工具箱中双击 MapControl,该控件则会自动加入到 Form1 中) 。用同样的方法,再将 LicenseControl 添加到 Form1 中。图 3 打开工具箱ArcGIS Engine 二次开发基础篇图 4 工具箱如果您在工具箱中找不到 MapControl,则请依次尝试以下两种解决方案。首先单击工具栏,待工具箱弹出之后,在工具箱的任意位置上单击鼠标右键,从弹出菜单中选择“重置工具箱” 。如果这一步操作之后仍然无法看到 MapControl,则在工具箱的任意位置上单击鼠标

4、右键,找到“常规”选项卡,然后在“常规” 选项卡上单击鼠标右键,在弹出菜单中单击“选择项( I)”,在弹出的对话框中选择 “.NET Framework 组件” ,找到“LicenseControl”和“MapControl”,将这两项前的复选框打上勾,最后点击确定即可(如果在“.NET Framework 组件”这个面板中找不到这两项,则选择 “COM 组件” 面板,在“ESRI LicenseControl”和“ESRI MapControl”前面打勾) 。ArcGIS Engine 二次开发基础篇图 5 重置工具箱图 6 选择项ArcGIS Engine 二次开发基础篇图 7 选择工具箱

5、项图 8 选择工具箱项添加好 MapControl 和 LicenseControl 之后,调整 Form1 和 MapControl 的位置与大小,如下图所示:ArcGIS Engine 二次开发基础篇图 9 窗体布局1.1.3 添加地图在 MapControl 上单击鼠标右键,选择“属性” ,则会弹出 MapControl 的属性设置面板,在之前也介绍过,通过这个面板可以完成许多简单的工作。如图所示,点击“Map”面板,之后点击 按钮,在弹出的对话框中选择路径为“GIS 设计与开发 例子数据China” ,再在此路径下选择“bou2_4p” ,点击“Open”。之后在 MapControl

6、 的属性页上点击“确定” 即可。ArcGIS Engine 二次开发基础篇图 10“Map”面板至此,我们已经完成了一个最简单的地图显示程序。.点击“启动调试”按钮(或者在“调试”菜单下选择相应命令,或者按键盘的 F5 键) ,可以得到如下的运行结果。图 11 初次运行结果ArcGIS Engine 二次开发基础篇1.1.4 添加代码我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和全图显示的功能。选中 MapControl 控件,单击属性窗口中的事件按钮 ,可以看到 MapControl 控件能够

7、响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统) ,我们可以通过双击对应事件进入代码编辑界面,这里我们选择“OnMouseDown”事件(注:控件的“OnMouseDown”事件也可以通过双击控件直接进入到代码编辑界面) ,下一步就需要在这个事件中添加响应鼠标的相关代码。图 12 MapControl 控件支持的所有方法请您在 axMapControl1 的 OnMouseDown 事件中添加代码,如下所示:private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEv

8、ents2_OnMouseDownEvent e)if (e.button = 1)ArcGIS Engine 二次开发基础篇this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();else if (e.button = 2)this.axMapControl1.Extent = this.axMapControl1.FullExtent;再次运行程序,鼠标左键在地图上拉框可以实现地图的放大功能,而右键单击地图则会还原地图的全图显示。图 1 任意比例尺放大功能如果将代码替换如下,则能实现左键放大,右键漫游的功能。priva

9、te void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)if (e.button = 1)this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();else if (e.button = 2)this.axMapControl1.Pan();注释:代码中根据 e 中包含的“button”值来判断鼠标的单击操作是来自何处,若 button 值为1,则为鼠标左键,2 代表

10、鼠标右键,4 代表鼠标中键。当判断得到是鼠标左键单击时,执行“this .axMapControl1.Extent = this.axMapControl1.TrackRectangle();”该语句调用了“TrackRectangle()”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域(Extent) ,这样就实现了地图的放大功能。类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。1.1.5 小结通过这个例子,我们制作出了一个最简单的地图浏览程序 AEMapView,并能响应一些基本的鼠标操作。在 MapControl 的属性

11、页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd 或者*.mxt) ,您也可以利用刚才的方式ArcGIS Engine 二次开发基础篇一次性多加入一些图层而不仅仅加入“bou2_4p”一个,同时可以更改各图层的叠放次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置 MapControl的显示方式,是否支持地图的预览功能,边框样式等等。您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉 ArcGIS Engine 的开发是有一定帮助的。如果需要重置 MapControl,只需要点击“Data”面板中

12、的“Reset ”按钮。当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。1.2 属性查询查询是 GIS 中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。1.2.1 添加控件如果上一小节的工程已经关闭,则将其打开,如果您之后又在 MapControl 中添加了一些别的数据,请将其删除,只保留一个“bou2_4p” 图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。用之前讲过添加控件的方式,在窗体中添加一个 Label和一个 TextBox。将 Label 控件的“Text”属性修改为“城市名称”,TextBox 控件的 Name 属

13、性修改为 txtStateName。控件添加完毕后效果如下:图 2 添加 Label 控件和 TextBox 控件后界面1.2.2 添加代码首先添加引用。首先可以在项目的“解决方案资源管理器窗口”中单击展开“引用”选项,查看项目中已添加引用。ArcGIS Engine 二次开发基础篇图 3 项目已添加“引用”这个项目中我们需要使用“ESRI.ArcGIS.Carto” 和“ESRI.ArcGIS.Geodatabase” 两个引用项,点击菜单栏上的“项目 ”“添加引用” (或者在“解决方案资源管理器窗口 ”中右击“引用” ,在弹出菜单中选择“添加引用” ) ,在弹出的对话框中选择需要添加的引用

14、,同时选择“ESRI.ArcGIS.Carto”和 “ESRI.ArcGIS.Geodatabase”(选择的时候按下 Ctrl 键以同时选择多个) ,这里“ESRI.ArcGIS.Carto” 在添加 MapControl 控件时已自动添加,我们只添加“ESRI.ArcGIS.Geodatabase”,点击确定。图 4 添加引用对话框之后双击 TextBox 控件,进入代码编辑界面。在代码编辑区域的命名空间(namespace )的上方输入以下内容:using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geodatabase;如下图所示:ArcGIS Engin

15、e 二次开发基础篇图 5 引用添加位置之后在控件 TextBox 的事件中选择 KeyUp,在 KeyUp 事件中添加以下代码:图 6KeyUp 方法private void txtStateName_KeyUp(object sender, KeyEventArgs e)/判断鼠标键值,如果Enter 键按下抬起后,进入查询if (e.KeyCode=Keys.Enter)/定义图层,要素游标,查询过滤器,要素IFeatureLayer pFeatureLayer;IFeatureCursor pFeatureCursor;ArcGIS Engine 二次开发基础篇IQueryFilter

16、pQueryFilter;IFeature pFeature;/获取图层pFeatureLayer = this.axMapControl1.Map.get_Layer(0) as IFeatureLayer;/如果图层名称不是states,程序退出if (pFeatureLayer.Name != bou2_4p)return;/清除上次查询结果this.axMapControl1.Map.ClearSelection();/pQueryFilter的实例化pQueryFilter = new QueryFilterClass();/设置查询过滤条件pQueryFilter.WhereClause = NAME= + txtStateName.Text + ;/查询pFeatureCursor = pFeatur

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号