ArcGIS_Engine开发实例教程 长江三峡大学(2)

暗香疏影 分享 2022-04-19 下载文档

i.PutCoords(100, 100)

AxMapControl1.CenterAt(i)

AxMapControl1.Refresh()

其中i.PutCoords(100, 100)是设置中心在(100,100),若该点为某个数据的中心,则该功能就是以该数据为中心。

7、地图放大缩小等

放大、缩小、打开文件、保存文件等ArcMap中长用的命令在ArcGIS Engine 中也可以找到对应的命令,这些命令都在controls库中。所以首先必须引用ESRI.ArcGIS.Controls。下面以放大为例:

在项目中添加ESRI.ArcGIS.Controls的引用,然后在全局定义前引用,如下:

Imports ESRI.ArcGIS.Controls

在放大按钮上添加如下代码:

Private Sub ZoomIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZoomIn.Click

Dim zoomin As ControlsMapZoomInTool = New

第10 页共119 页

ArcGIS Engine 开发实例教程 土木水电学院3S 实验室 第 11 页 共 119 页 ControlsMapZoomInTool()

zoomin.OnCreate(AxMapControl1.Object)

AxMapControl1.CurrentTool = zoomin

End Sub

其中Dim zoomin As ControlsMapZoomInTool 是定义地图放大命令,zoomin.OnCreate 是创建放大命令,AxMapControl1.CurrentTool = zoomin 是使Map 控件的当前命令按钮是zoomin 。

同理,还可以创建缩小、打开文件、保存文件等等。值得注意的是,有的时候是需要点击命令,有时候是使Map 控件的当前命令为该命令。下面是各主要命令所对应的类:

功能 类 事件

放大 ControlsMapZoomInTool 设置

CurrentTool

缩小 ControlsMapZoomOutTool 设置

CurrentTool

打开文件 ControlsOpenDocCommand OnClick() 添加数据 ControlsAddDataCommand OnClick() 全图 ControlsMapFullExtentCommand OnClick() 查找 ControlsMapFindCommand OnClick()

属性工具 ControlsMapIdentifyTool 设置

CurrentTool

选择Feature ControlsSelectFeaturesTool 设置

CurrentTool

清除选择 ControlsClearSelectionCommand OnClick() 开始编辑 ControlsEditingStartCommand OnClick() 保存编辑 ControlsEditingSaveCommand OnClick() 停止编辑 ControlsEditingStopCommand OnClick()

编辑工具 ControlsEditingEditTool 设置

CurrentTool

属性编辑命令

ControlsEditingAttributeCommand OnClick() 测量工具 ControlsMapMeasureTool 设置

CurrentTool

创建路径(网络分析)

ControlsNetworkAnalystRouteCommand OnClick() 创建路径点 ControlsNetworkAnalystCreateLocationTool 设置

CurrentTool

最短路径查询

ControlsNetworkAnalystSolveCommand OnClick() Scene 缩小 ControlsSceneExpandFOVCommand OnClick()

当然,还有很多很多其他的命令。从上面的列表比较我们也可以看出,一般来说,如果类的后缀是Command ,则用OnClick 方法;如果是Tool ,则设置Map 的CurrentTool 属性为该工具。

ArcGIS Engine开发实例教程土木水电学院3S实验室8、创建数据属性表格

首先定义一个属性数据表格显示函数ShowAttirbuteGrid(),其代码如下:Private Sub ShowAttirbuteGrid(ByVal pFeatureLayer As

ESRI.ArcGIS.Carto.IFeatureLayer, ByVal myDataGridView As DataGridView) Dim pFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass

pFeatureClass = pFeatureLayer.FeatureClass

Dim i As Integer

Dim pQuery As ESRI.ArcGIS.Geodatabase.IQueryFilter = New ESRI.ArcGIS.Geodatabase.QueryFilter()

For i = 1 To pFeatureLayer.FeatureClass.Fields.FieldCount Dim s As String= pFeatureLayer.FeatureClass.Fields.Field(i - 1).Name.ToString()

myDataGridView.Columns.Add(s, s)

Next

myDataGridView.Rows.Add(pFeatureLayer.FeatureClass.FeatureCount(pQuer y) - 1)

Dim pFeature As ESRI.ArcGIS.Geodatabase.IFeature

Dim j As Integer

For i = 0 To myDataGridView.Rows.Count - 1

pFeature = pFeatureClass.GetFeature(i)

For j = 0 To myDataGridView.Columns.Count - 1

myDataGridView.Rows(i).Cells(j).Value =

pFeature.Value(j)

Next

Next

End Sub

其中,需要说明的是:要获取某个数据文件中的某个数据的某个字段,首先获取到该数据层Layer或FeatureLayer;然后定义FeatureClass 数据集;通过FeatureLayer的FeatureClass属性获得FeatureClass 数据集;在FeatureClass中包含了每个Feature,通过FeatureClass的GetFeature属性就可以获得某个ID的Feature;Feature的属性中就包括有Fields属性,通过Fields可以找到每个Field,Field的name属性就是属性字段的名称;通过Feature的Value属性就可以获得某个字段值。

在按钮的Click事件中调用前面的函数,并添加一个DataGridView控件,代码如下:

Dim player As ESRI.ArcGIS.Carto.ILayer

player = 296e8059bcd126fff6050b59yer(0)

Dim pFeatureLayer As ESRI.ArcGIS.Carto.IFeatureLayer

pFeatureLayer = player

ShowAttirbuteGrid(pFeatureLayer, DataGridView1)

第12 页共119 页

ArcGIS Engine开发实例教程土木水电学院3S实验室运行,最终显示结果如下图所示:

此外,还可以改进一下,添加一个ComboBox控件,在控件上添加图层的名称,直接点击显示属性按钮就可以显示ComboBox控件中相应的图层属性表格。首先需要更改一下ShowAttirbuteGrid()函数,如下:

Private Sub ShowAttirbuteGrid(ByVal pFeatureLayer As

ESRI.ArcGIS.Carto.IFeatureLayer, ByVal myDataGridView As DataGridView) myDataGridView.Rows.Clear()

myDataGridView.Columns.Clear()

Dim pFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass

pFeatureClass = pFeatureLayer.FeatureClass

Dim i As Integer

Dim pQuery As ESRI.ArcGIS.Geodatabase.IQueryFilter = New ESRI.ArcGIS.Geodatabase.QueryFilter()

For i = 1 To pFeatureLayer.FeatureClass.Fields.FieldCount Dim s As String= pFeatureLayer.FeatureClass.Fields.Field(i - 1).Name.ToString()

myDataGridView.Columns.Add(s, s)

Next

myDataGridView.Rows.Add(pFeatureLayer.FeatureClass.FeatureCount(pQuer y) - 1)

Dim pFeature As ESRI.ArcGIS.Geodatabase.IFeature

Dim j As Integer

For i = 0 To myDataGridView.Rows.Count - 1

pFeature = pFeatureClass.GetFeature(i)

第13 页共119 页

ArcGIS Engine开发实例教程土木水电学院3S实验室

For j = 0 To myDataGridView.Columns.Count - 1

myDataGridView.Rows(i).Cells(j).Value =

pFeature.Value(j)

Next

Next

End Sub

然后,在Form的Load事件中先添加ComboBox的Item,如下:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim i As Integer

For i = 0 To 296e8059bcd126fff6050b59yerCount - 1

ComboBox1.Items.Add(296e8059bcd126fff6050b59yer(i).Name.ToString()) Next

ComboBox1.Text = ComboBox1.Items(0)

End Sub

最后,更改显示属性按钮的Click事件,如下:

Dim player As ESRI.ArcGIS.Carto.ILayer

Dim i As Integer

For i = 0 To 296e8059bcd126fff6050b59yerCount - 1

If 296e8059bcd126fff6050b59yer(i).Name = ComboBox1.Text Then player = 296e8059bcd126fff6050b59yer(i)

Exit For

End If

Next

Dim pFeatureLayer As ESRI.ArcGIS.Carto.IFeatureLayer

pFeatureLayer = player

ShowAttirbuteGrid(pFeatureLayer, DataGridView1) 运行程序,最终显示结果如下所示:

第14 页共119 页

ArcGIS Engine开发实例教程土木水电学院3S实验室

9、缓冲分析

本例主要用到了Geoprocessor处理工具。

1)首先,添加引用AnalysisTools、Geoprocessing和Geoprocessor库,如下图所示:

第15 页共119 页

ArcGIS Engine开发实例教程土木水电学院3S实验室

第16 页共119 页

ArcGIS Engine开发实例教程土木水电学院3S实验室

2)添加一个按钮用于缓冲分析,两个Combox控件,分别用来列出图层和缓冲数据的单位,添加一个TextBox用于输入缓冲距离,还有一个不可写的TextBox 用于显示缓冲数据保存的路径,还有一个对应的浏览按钮用于浏览缓冲数据保存的路径,最后添加一个按钮用于关闭该缓冲的面板GroupBox。如下图所示:

3)先为ComboBox2添加图层列表,在Form的Load事件中就要先为它添加,代码如下:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim i As Integer

For i = 0 To 296e8059bcd126fff6050b59yerCount - 1

ComboBox2.Items.Add(296e8059bcd126fff6050b59yer(i).Name.ToString()) Next

第17 页共119 页


ArcGIS_Engine开发实例教程 长江三峡大学(2).doc 将本文的Word文档下载到电脑

下一篇:明德小学2015年元旦活动方案

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7 元

支付方式:

开通VIP包月会员 特价:29元/月

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