ArcGIS_Engine二次开发讲义(5)

2019-02-20 23:51

ArcEngine 二次开发实习初级讲义

图32 初次运行结果

3.1.4 添加基本的代码

我们没有书写任何代码,就得到了一个最简单的地图显示程序。但这个程序还不能与用户交互,下一步我们需要添加一些代码,让程序能响应用户的鼠标,完成放大和全图显示的功能。

图33 MapControl控件支持的所有方法

双击MapControl控件,可以进入代码编辑界面。从窗口上方的下拉列表框中,我们能

- 21 -

ArcEngine 二次开发实习初级讲义

够看到MapControl能够响应的所有事件(关于每个事件的详细使用方法等请参见帮助系统,第六章对帮助系统有更加详细的介绍)。双击MapControl进入代码编辑界面的时候,默认的是“OnMouseDown”事件,下一步就需要在这个事件中添加响应鼠标的相关代码。

请您在Private Sub AxMapControl1_OnMouseDown函数中添加如下代码:

If e.button = 1 Then

AxMapControl1.Extent = AxMapControl1.TrackRectangle ElseIf e.button = 2 Then

AxMapControl1.Extent = AxMapControl1.FullExtent

End If

再次运行程序,鼠标左键在地图上拉框可以实现地图的放大功能,而右键单击地图则会还原地图的全图显示。

图34 任意比例尺放大功能

如果将代码替换如下,则能实现左键放大,右键漫游的功能。

If e.button = 1 Then

AxMapControl1.Extent = AxMapControl1.TrackRectangle ElseIf e.button = 2 Then AxMapControl1.Pan()

End If

3.1.5 代码解释

下面我们依次来看看这些代码都代表什么意思。首先看来第一段:

If e.button = 1 Then

AxMapControl1.Extent = AxMapControl1.TrackRectangle ElseIf e.button = 2 Then

AxMapControl1.Extent = AxMapControl1.FullExtent

End If

- 22 -

ArcEngine 二次开发实习初级讲义

这个代码是一个If Else条件语句,关于“e”的详细定义及其中包含的各参数,请参考帮助中与“IMapControlEvents2, OnMouseDownEventHandler delegate”关键字相关的内容。

可以根据e中包含的“button”值来判断鼠标的单击操作是来自何处,若button值为1,则为鼠标左键,2代表鼠标右键,4代表鼠标中键。当判断得到是鼠标左键单击时,执行“AxMapControl1.Extent = AxMapControl1.TrackRectangle”这条语句,其中,等号右侧是调用了“TrackRectangle”方法,这个方法是在地图上拖拽出一个矩形,之后将这个矩形赋值给当前地图的显示区域(Extent),这样就实现了地图的放大功能。类似的,若鼠标右键单击,则将全图范围赋值给当前的显示范围,实现了地图的全图显示功能。

第二段代码与第一段结构一样,只是在右键的相应事件上略有不同,这是调用了“Pan”方法,实现了地图的漫游功能。 3.1.6 小结

通过这个例子,我们制作出了一个最简单的地图浏览程序MapView,并能响应一些基本的鼠标操作。在MapControl的属性页中,其实还有许多内容您可以尝试,例如在“General”面板中可以直接加入地图文件(*.mxd或者*.mxt),您也可以利用刚才的方式一次性多加入一些图层而不仅仅加入“States”一个,同时可以更改各图层的叠放次序,也可以在“Data”面板中设置地图的旋转角度(Rotation)等,您还可以设置MapControl的显示方式,是否支持地图的预览功能,边框样式等等。您可以做一些尝试,看看能得到哪些有趣的结果,这些尝试对您今后熟悉ArcGIS Engine的开发是有一定帮助的。如果需要重置MapControl,只需要点击“Data”面板中的“Reset”按钮。当您完成了这个例子,并做了一些积极的尝试之后,您就可以接着学习下一个小节的内容了。

3.2 属性查询

查询是GIS中非常重要的一个功能,下面将分别介绍属性查询和空间查询的制作方法。 3.2.1 添加控件

如果上一小节的工程已经关闭,则将其打开,如果您之后又在MapControl中添加了一些别的数据,请将其删除,只保留一个“states”图层,请务必注意这一步,这直接关系到您下面的工作能否顺利进行。用之前讲过的方式,在窗体中添加一个Label和一个TextBox。将Label的“Text”属性修改为“StateName”,结果如下:

图35 Label控件和TextBox控件

3.2.2 添加引用和代码

首先添加引用。点击菜单栏上的“项目”—>“添加引用”,在弹出的对话框中同时选择“ESRI.ArcGIS.Carto”和“ESRI.ArcGIS.Geodatabase”(选择的时候按下Ctrl键以同时选择多个),点击确定。

之后双击TextBox1控件,进入代码编辑界面。在代码编辑区域的最上方输入以下内容:

- 23 -

ArcEngine 二次开发实习初级讲义

Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.Geodatabase

如下图所示:

图36 引用添加位置

图37 添加引用对话框

之后在TextBox1的事件中选择KeyPress,在KeyPress事件中添加以下代码:

图38 KeyPress方法

If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then Dim pFeatureLayer As IFeatureLayer

- 24 -

ArcEngine 二次开发实习初级讲义

Dim pCursor As IFeatureCursor Dim pFilter As IQueryFilter Dim pFeature As IFeature

pFeatureLayer = Me.AxMapControl1.Map.Layer(0) If Not pFeatureLayer.Name = \ Then Exit Sub

Me.AxMapControl1.Map.ClearSelection()

pFilter = New QueryFilter

pFilter.WhereClause = \ & TextBox1.Text & \ pCursor = pFeatureLayer.Search(pFilter, True) pFeature = pCursor.NextFeature

If pFeature Is Nothing Then Me.AxMapControl1.Refresh()

MessageBox.Show(\没有找到名为\ & TextBox1.Text & \的州\, \, MessageBoxButtons.OK) Exit Sub Else

Me.AxMapControl1.Map.SelectFeature(pFeatureLayer, pFeature) Me.AxMapControl1.Extent = pFeature.Shape.Envelope End If End If

运行程序,分别向编辑框中输入“Texas”和“RS”,键入回车,如下图所示:

图39 Texas州查询结果

- 25 -


ArcGIS_Engine二次开发讲义(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:保温层抗裂砂浆检验批施工质量验收记录1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: