发布时间 : 星期五 文章ArcGIS Engine二次开发 - 基础篇更新完毕开始阅读c1826921192e45361066f5ac
ArcGIS Engine二次开发——基础篇
1.1.4 添加代码
我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和全图显示的功能。
选中MapControl控件,单击属性窗口中的事件按钮
,可以看到MapControl控件
能够响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统),我们可以通过双击对应事件进入代码编辑界面,这里我们选择“OnMouseDown”事件(注:控件的“OnMouseDown”事件也可以通过双击控件直接进入到代码编辑界面),下一步就需要在这个事件中添加响应鼠标的相关代码。
图 12 MapControl控件支持的所有方法
请您在axMapControl1的OnMouseDown事件中添加代码,如下所示:
private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_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任意比例尺放大功能
如果将代码替换如下,则能实现左键放大,右键漫游的功能。
private 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代表鼠标右键,4代表鼠标中键。当判断得到是鼠标左键单击时,执行“this.axMapControl1.Extent = this.axMapControl1.TrackRectangle();”该语句调用了“TrackRectangle()”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域(Extent),这样就实现了地图的放大功能。类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。
1.1.5 小结
通过这个例子,我们制作出了一个最简单的地图浏览程序AEMapView,并能响应一些基本的鼠标操作。在MapControl的属性页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd或者*.mxt),您也可以利用刚才的方式一
ArcGIS Engine二次开发——基础篇
次性多加入一些图层而不仅仅加入“bou2_4p”一个,同时可以更改各图层的叠放次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置MapControl的显示方式,是否支持地图的预览功能,边框样式等等。您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉ArcGIS Engine的开发是有一定帮助的。如果需要重置MapControl,只需要点击“Data”面板中的“Reset”按钮。当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。
1.2 属性查询
查询是GIS中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。
1.2.1 添加控件
如果上一小节的工程已经关闭,则将其打开,如果您之后又在MapControl中添加了一些别的数据,请将其删除,只保留一个“bou2_4p”图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。用之前讲过添加控件的方式,在窗体中添加一个Label和一个TextBox。将Label控件的“Text”属性修改为“城市名称”,TextBox控件的Name属性修改为txtStateName。控件添加完毕后效果如下:
图 2添加Label控件和TextBox控件后界面
1.2.2 添加代码
首先添加引用。首先可以在项目的“解决方案资源管理器窗口”中单击展开“引用”选项,查看项目中已添加引用。
ArcGIS Engine二次开发——基础篇
图 3项目已添加“引用”
这个项目中我们需要使用“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”两个引用项,点击菜单栏上的“项目”—>“添加引用”(或者在“解决方案资源管理器窗口”中右击“引用”,在弹出菜单中选择“添加引用”),在弹出的对话框中选择需要添加的引用,同时选择“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;
如下图所示: