ArcGIS Engine 开发实例教程
三峡大学土木水电学院 肖泽云
二〇〇九年 三月
ArcGIS Engine开发实例教程土木水电学院3S实验室
很高兴和大家分享我的心得!ArcGIS Engine是专门用于开发GIS系统的开发包,目前最新版本是9.3。基于ArcGIS Engine,结合程序开发语言可以开发具有很强专业性的GIS系统。而且所开发的系统不需要客户端安装ArcGIS软件,只需要安装ArcGIS Engine Runtime及相应的许可就可以使用开发的GIS系统。本教程是本人原创作品,其主要目的是能让读者在学习完本教程后,对ArcGIS Engine开发有基础的认识,对ArcGIS Engine主要的库有一定了解,熟悉GIS开发的基本流程,以期得到抛砖引玉的效果。本教程中所有的程序代码都是作者一句一句编写的,希望广大读者、特别是初学者一定要仔细阅读、认真思考、反复斟酌,才会达到事半功倍的效果。限于作者水平及时间关系,其中的错误在所难免,望广大读者提出宝贵的意见和建议!相互交流,共同提高!
——肖泽云
作者联系方式:
地址:湖北省宜昌市三峡大学土木水电学院
邮编:443002
Email:xwebsite@296e8059bcd126fff6050b59
QQ:289700062
软件建议配置要求:
由于在本教程中主要以Visual 296e8059bcd126fff6050b59语言开发为主,所以要求读者在使用本教程之前先安装Visual Studio2005。然后安装ArcGIS Engine for .Net,安装完ArcGIS Engine后安装Engine的许可文件,在启动Visual Studio时会出现如下所示界面:
其中MapControl Application是一个典型的二维地图模版。
ArcGIS Engine开发实例教程土木水电学院3S实验室目录
第一篇Map地图开发 (1)
1、新建一个GIS项目 (1)
2、导入Map文档 (5)
3、设置TOCControl和ToolbarControl控件的链接 (7)
4、添加Shapefile数据文件 (7)
5、添加图层 (8)
6、其他常用属性及方法 (9)
7、地图放大缩小等 (10)
8、创建数据属性表格 (12)
9、缓冲分析 (15)
10、CAD与Shapfile格式之间的相互转换 (20)
11、将CAD导出成Shp格式 (23)
12、创建符号选择窗体SymbologyControl (23)
13、指定对象的符号 (27)
14、三维分析 (31)
15、获取TIN图层 (40)
16、选择对象 (42)
17、获取选择数据 (45)
18、获取剖面图 (49)
19、闪烁动画并缩放至数据 (62)
20、更改点的显示符号 (67)
21、更改线的显示符号 (69)
22、自定义点的符号 (71)
23、打开个人数据库 (72)
24、打开CAD数据 (74)
25、计算Raster的绝对值 (77)
26、Raster的复杂计算 (79)
27、生成表面Raster (82)
ArcGIS Engine开发实例教程土木水电学院3S实验室
28、生成坡度Raster (83)
29、生成等高线 (84)
30、生成曲率Raster (85)
第二篇Scene三维开发 (87)
1、创建一个简单的三维场景 (87)
2、在SceneControl控件中添加Scene文件 (88)
3、旋转/移动摄像机动画 (88)
4、常用浏览功能 (88)
5、更改摄像机位置 (90)
6、输出A VI动画 (91)
7、创建动画关键帧 (92)
8、在三维控件SceneControl中添加Shapfile、jpg、tif等格式文件 (95)
9、保存场景图片 (96)
10、添加Raster数据 (96)
11、生成TIN (97)
12、设置图层基准高程 (107)
13、点击查询 (115)
14、转换TIN成MultiPatches (120)
15、获取TIN中对象 (121)
16、输出TIN节点坐标 (124)
17、设置点的模型 (127)
ArcGIS Engine 开发实例教程 土木水电学院3S 实验室
第 1 页 共 119 页 第一篇 Map 地图开发
1、新建一个GIS 项目
1)启动Visual Studio ,在Visual Basic 下面的Windows 模版下选择Windows 应用程序,并命名项目名称为“GIS 开发”,如下图所示。
2)点击确定按钮,创建一个Windows 应用程序项目。在工具栏中的ArcGIS Windows Forms 选项下有一些常用的GIS 控件,如下图所示:
其中,MapControl 就是Map 地图控件,PageLayoutCOntrol 是布局地图控件,TOCControl 是目录控件,ToolbarControl 是GIS 工具栏控件,SceneControl 是Scene 三维场景控件,GlobeControl 是Globe 控件,LicenseControl 是许可控件,SymbologyControl 是符号选择器控件,ArcReaderControl 是ArcReader 控件,ArcReaderGlobeControl 是ArcReaderGlobe 控件。常用的有MapControl 、SceneControl 、ToolbarControl 、TOCControl 和LicenseControl 。LicenseControl 是许可控件,一般GIS 系统中都必须添加,否则无法使用。
3)下面我们添加MapControl 、ToolbarControl 、TOCControl 和LicenseControl
ArcGIS Engine开发实例教程土木水电学院3S实验室这四个控件,如下图所示:
4)这些控件也有一些属性性质,可以直接在控件上点击右键打开控件的属性窗体,如下图所示:
5)打开MapControl控件的属性,在Map Document后可以浏览Map文件的地址,在启动程序后将会打开该地图。如下图所示:
第 2 页共119 页
ArcGIS Engine开发实例教程土木水电学院3S实验室
6)点击确定按钮。然后打开TOCControl控件的属性窗体,在Buddy下设置其链接到AxMapControl控件,如下图所示,表示该目录对应的是AxMapControl1中地图的数据文件列表。
7)点击确定按钮。然后打开ToolbarControl控件的属性窗体,同样在Buddy 下设置其链接到AxMapControl控件,如下图所示:
第 3 页共119 页
ArcGIS Engine开发实例教程土木水电学院3S实验室
8)点击Items标签,在此可以添加工具,如下图所示,点击Add按钮开始添加工具。
9)如下图所示,在添加工具窗体上可以选择需要添加的工具,若需要添加某个工具,在双击该工具。
第 4 页共119 页
ArcGIS Engine 开发实例教程 土木水电学院3S 实验室
第 5 页 共 119 页
10)添加完工具后关闭选择工具窗体,在ToolbarControl 控件的属性窗体上点击确定按钮。按F5开始运行程序,其现实结果如下图所示:
至此,一个简单的GIS 系统就形成了。该系统没有编写任何代码就实现了,可见ArcGIS Engine 开发还是比较人性化的。接下来,我们基于这个项目继续开发。
2、导入Map 文档
ArcGIS Engine 开发实例教程 土木水电学院3S 实验室
第 6 页 共 119 页 1)在Form1窗体上添加一个按钮控件,并设置其Text 为“打开文件”,如下图所示:
2)双击该按钮,为该按钮添加事件,其代码如下:
Dim openFileDialog1 As OpenFileDialog = New OpenFileDialog()
openFileDialog1.Title = "打开Map 地图"
openFileDialog1.Filter = "Map Documents (*.mxd, *.mxt, *.pmf)|*.mxd;*.mxt;*.pmf"
openFileDialog1.ShowDialog()
Dim sFilePath As String
sFilePath = openFileDialog1.FileName
If sFilePath = "" Then Exit Sub
On Error GoTo ErrorHandler_LoadMxFile
AxMapControl1.LoadMxFile(sFilePath)
Exit Sub
ErrorHandler_LoadMxFile:
MsgBox(sFilePath & "不能导入!" + vbCrLf + "错误:" + Err.Description)
其中该代码中最主要的是AxMapControl1.LoadMxFile(sFilePath),MapControl 的LoadMxFile 方法可以将指定路径sFilePath 的Map 文件导入到
ArcGIS Engine开发实例教程土木水电学院3S实验室
MapControl控件中去。
3) 运行程序,点击按钮,其运行结果如下图所示:
3、设置TOCControl和ToolbarControl控件的链接
TOCControl和ToolbarControl控件分别是用于链接Map或Scene控件的目录控件和工具栏控件,它们与Map或Scene控件链接的方法除了前面的设置其属性外,还可以通过在程序中设置它们的SetBuddyControl属性。一般都是在程序启动或窗体初始化时就设置,如下代码:
AxTOCControl1.SetBuddyControl(AxMapControl1)
AxToolbarControl1.SetBuddyControl(AxMapControl1)
这就是设置TOCControl和ToolbarControl控件链接到Map控件上的代码。
4、添加Shapefile数据文件
1)添加一个按钮控件,并设置其Text属性为“添加Shp文件”。
2)双击该按钮,为其添加事件,其代码如下:
Dim addDataDialog1 As OpenFileDialog = New OpenFileDialog() addDataDialog1.Title = "添加Shapefile数据文件"
addDataDialog1.Filter = "Shapfiles (*.shp)|*.shp"
addDataDialog1.ShowDialog()
Dim sFilePath As String
sFilePath = addDataDialog1.FileName
第7 页共119 页
ArcGIS Engine开发实例教程土木水电学院3S实验室
If sFilePath = ""Then Exit Sub
On Error GoTo ErroHandle_AddData
Dim i As Integer
i = 296e8059bcd126fff6050b59stIndexOf("\")
AxMapControl1.AddShapeFile(Microsoft.VisualBasic.Left(sFilePath, i), Microsoft.VisualBasic.Right(sFilePath, sFilePath.Length - i - 1)) Exit Sub
ErroHandle_AddData:
MsgBox(sFilePath & "不能导入!"+ vbCrLf + "错误:"+ Err.Description)
其中AxMapControl1.AddShapeFile是添加shapefile的方法,后面的是获取该文件的路径和名称。
3)运行程序,其结果如下图所示:
5、添加图层
1)添加一个按钮控件,并设置其Text属性为“添加图层”。
2)双击该按钮,为其添加事件,其代码如下:
Dim addDataDialog1 As OpenFileDialog = New OpenFileDialog() addDataDialog1.Title = "添加图层文件"
addDataDialog1.Filter = "图层文件(*.lyr)|*.lyr"
addDataDialog1.ShowDialog()
第8 页共119 页
ArcGIS Engine开发实例教程土木水电学院3S实验室
Dim sFilePath As String
sFilePath = addDataDialog1.FileName
If sFilePath = ""Then Exit Sub
On Error GoTo ErroHandle_AddData
AxMapControl1.AddLayerFromFile(sFilePath)
Exit Sub
ErroHandle_AddData:
MsgBox(sFilePath & "不能导入!"+ vbCrLf + "错误:"+ Err.Description)
其中AxMapControl1.AddLayerFromFile为添加图层代码。
3)运行程序,其最终结果如下图所示:
6、其他常用属性及方法
1)获取图层数目
MsgBox("共有:" + 296e8059bcd126fff6050b59yerCount.ToString() + "个图层")其中296e8059bcd126fff6050b59yerCount是获取Map中图层的个数。
2)控制鼠标滚轮缩放
If AxMapControl1.AutoMouseWheel Then
AxMapControl1.AutoMouseWheel = False
Else
AxMapControl1.AutoMouseWheel = True
第9 页共119 页
ArcGIS Engine开发实例教程土木水电学院3S实验室
End If
3)删除图层
AxMapControl1.DeleteLayer(1)
4)移动图层顺序
AxMapControl1.MoveLayerTo(1, 2)
5)平移地图
AxMapControl1.Pan()
6)获取到地图中的图层
Dim player As ESRI.ArcGIS.Carto.ILayer
player = AxMapControl1.get_Layer(0)
7)获取鼠标当前坐标
在Map控件的OnMouseMove事件中可以获取,如AxMapControl1_OnMouseMove 事件中添加如下代码:
Label1.Text = "X:" + e.mapX.ToString() + ",Y:" + e.mapY.ToString() 值得注意的是:mapX及mapY代表地图坐标,x和y代表窗口坐标。
8)拖选视图范围
在Map控件的OnMouseDown事件中可以获取,如AxMapControl1_OnMouseDown 事件中添加如下代码:
Dim pEn As ESRI.ArcGIS.Geometry.IEnvelope = New
ESRI.ArcGIS.Geometry.Envelope()
pEn = AxMapControl1.TrackRectangle()
AxMapControl1.Extent = pEn
则可以设置视图的范围为拖选的矩阵范围。
9)设置视图中心
Dim i As ESRI.ArcGIS.Geometry.IPoint = New
ESRI.ArcGIS.Geometry.Point()
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新综合文库ArcGIS_Engine开发实例教程 长江三峡大学全文阅读和word下载服务。
相关推荐: