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 页
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新综合文库ArcGIS_Engine开发实例教程 长江三峡大学(2)全文阅读和word下载服务。
相关推荐: