arcgis实验报告

更新时间:2023-11-06 19:20:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《GIS软件设计与实现实习》

学生姓名: 李苇杭 班 级: 地091班 学生学号:2103070911181 实习地点: 机房4 指导教师: 石若明

危双丰

实习成绩:

二零一二年六月

GIS软件设计与实现实习指导书

一. 实习目的和内容安排: 第一部分 数据制作

1.学习安装ESRI GIS软件ArcGIS9.x;

2. 学习使用ArcCatalog建立用于网络分析的shapefile空间网络数据集。 第二部分 客户界面定制

4. 学习GIS的二次开发,使用ArcMap VBA 的ArcObject创建用户命令定 制和使用Windows常用控件制作用户界面;

5. 学习基于COM技术的AO MapControl以实现上述用户界面的功能。 第三部分 使用控件二次开发

6. 学习安装和设置ESRI ArcEngine (AE) 地图控件; 7.学习在VB环境下,使用AE地图控件添加图层和控制图层; 8.学习在VB环境下,使用AE地图控件的开发方法和网络分析方法。 二. 实习准备知识:

1. 了解ArcGIS9.x软件的基本组成和结构;

2. 了解ArcToolbox, ArcCatalog, ArcMap标准界面的基本操作; 3. 具有Shapefile及空间数据集和网络分析的相关知识. 4. 具有VBA以及ArcEngine的相关知识; 5. 具有面向对象的知识,COM技术的相关知识; 6. 熟悉Windows 环境下VB的编程技巧。

三.实习班级:地09-1,地09-2

四.实习指导教师:石若明 危双丰

五.实习时间:11/12(二)第十五、十六周,2012年05月28- 06月08日

六.实习地点:校机房网四

七.硬件要求:CPU PII以上, 内存:大于128Mb, 硬盘容量: 大于0.8G

八.软件要求:Windows 2000/XP, ArcGIS9.x (Desktop), ESRI ArcEnging9.x,

Visual Studio 6.0/Visual Basic6.0。

九.实习内容:

第一部分 数据制作

⑴ 安装ESRI ArcGIS9.x Desktop: (略)

步骤:

① 清理本地机的”D”或”E”驱动器, 确保其容量大于0.8G;

② 在服务器上从 ”石若明” 路径中找到文件夹” ArcGIS9.x”, 并下载它到 本地机的”D”或”E” 驱动器上

③ 在Desktop子文件夹中, 打开”ArcGIS9.x解码” 子文件夹, 点击文件”安装指南” (word 文件), 仔细阅读之后, 按照其安装步骤进行Desktop和Workstation 的安装.

⑵ 用ArcCatalog建立用于网络分析的shapefile空间网络数据集

① 数据准备:

1. 准备一个shapefile的polyline线图层(全部道路.shp)

线图层至少要有一个字段来作为网络分析的阻抗属性字段(Impedance)。例如,计算距离最短,则要有包含道路长度的字段;费用最少,则包含道路行驶成本的字段。

2. 准备一个点图层,供选择查询节点使用

② 步骤:

1. 打开arccatalog,首先设置下catalog的菜单栏中的tool工具下的

extension属性,把network analyst勾选上,如图:

2. 选择网络数据集的工作空间

因为不需要模拟复杂的多模式网络,所以选择shapefile工作空间

来创建shapefile网络数据集,在shapefile工作空间中创建的网络数据集只支持单源数据。

在这里找到数据源所在的文件夹,在“全部道路.Shp”上点击右键,

选择New Network Dataset,在弹出的窗口中修改输出的网络数据集文件名称,如图:

3. 连通性建模

需要使用ArcGIS连通性建模和高程字段模型共同完成。在对创建网络数据集前,必须仔细研究网络,并确定网络中不同元素之间是如何连接的。在创建网络数据集前,必须为网络中每个元素设计其网络的连接规则。对于影响网络连通性的特殊对象必须充分考虑,如桥梁、隧道等。如果有可用的高程字段数据,可以使用高程字段模型以增强网络的连通性。

在这里我们选择默认设置,选择“下一步”进入连接属性的设置。

4. 定义网络属性并赋值

确定网络分析的阻抗属性,并根据网络数据源的字段属性为阻抗属性赋值。确定特殊的网络限制,根据需要建立边元素的层次关系。 在这里选择模型设置,直接选择“下一步”,直到进入到如下窗口,该窗口设置网络数据集的属性权重,点击“Add”。

5. 输入名称,选择单位Kilometers,,然后点击“确定”。

6. 这时候我们可以看到如下图面,在新建属性名称前有个黄色叹号,点击

Evaluators,在type字段下选择“Field”,value字段选择“里程”。这样,原“全部道路”图层中的“里程”字段就作为阻抗属性字段添加到网络数据集中了(在网络数据集中被命名为“distan”)。

在上一步新建字段的时候可以直接用道路图层中已有的字段名作为“Name”,这样原图层中的同名字段就会自动添加到网络数据集中,不会出现黄色叹号,因而可以跳过进行该步操作。

7. 可以继续将原图层中能够作为网络分析阻抗的字段添加进来。如“全部

道路”图层中的“所用费用”(Units:Unknown)和“所用时间”(Units:Minutes) 8. 点击“确定”,之后选择默认状态就行了

9. 点击“Finish”,运行后出现完成窗口。

10. 选择“是”,运行完成整个网络数据集就创建完成。

(3)第一部分最终提交成果:

第二部分 客户界面定制

一、使用ArcMap VBA 的ArcObject创建用户命令定制; 使用Windows

常用控件和MapControl控件制作用户界面: 步骤:

① 使用UIControl创建用户命令定制

操作ArcMap窗口主菜单:

(1)显示想在其中创建新命令的工具条。 (2)单击Tools命令,打开Tools下拉菜单。

(3)单击Customize命令,打开Customize对话框。

(4)单击Commands标签,进入Commands选项卡(图)。

(5)单击Categories窗口的[ UIControls ]控制类型。

(6)单击New UIControl按钮,打开New UIControl对话框(图)。

(7)单击选中想创建的UIControl类型:如UIButtonControl(按钮控制)。

(8)单击Create按钮,创建一个新的按钮控制 (新建的控制没有任何代码,需 要在随后的编辑中添加具体的事件例程代码)。

(9)该控制出现于定制对话框中的UIControls命令列表(图)。

(10)拖放新建的UIButtonControl按钮控制到一个工具条(或菜单)。 (11)在工具条上右击该控制,打开用户定制操作快捷菜单(图)。 (12)设置按钮控制的按钮、标题等特性(图: 这里选择小狗图标)。

(13)右击该按钮控制,单击用户定制操作快捷菜单中的View Source。 (14)打开显示该按钮控制代码的VBE代码窗口(图)。 (15)单击代码窗口中的Procedures/Event下拉箭头。

(16)单击随之出现的控制事件例程列表中的一项:如Click。

(17)为该事件例程输入相应的代码。

(18)重复上述3步操作,直到所有的事件例程均已完成了代码输入。 (19)单击VBE中的File菜单,并单击Save Project命令。 (20)单击VBE中的Close按钮,返回Customize对话框。

(21)单击Customize对话框中的Close按钮,完成用户命令定制。

下面是完成用户命令定制后ArcMap窗口, 注意: 标准工具栏中增加了用户定制按钮(小狗图标) 。

需要说明的是,在VBE打开的状态下,正在创建的UIControl处于设计模式,这时所写的代码不能运行。要对所创建的新命令进行运行测试,需要关闭VBE之后再运行。

② 使用Windows常用控件和AO控件制作用户界面:

操作ArcMap窗口主菜单:

(1) 在用户定制按钮(小狗图标), 右击该按钮控制。 (2) 单击用户定制操作快捷菜单中的View Source。 (3) 打开显示该按钮控制代码的VBE代码。

(4) 单击VBE中的Insert, 增加UserForm进入编辑窗口(图) 。

(5) 单击VBE中的Tools, 选择Additional Controls (图) 。

(6) 在Additional Controls对话框中, 选择ESRI Map Control 控件。

(7) 加载ESRI Map Control 控件到你的UserForm1界面上(图) 。

(8) 加载四个按钮控件到你的UserForm1界面上, 并分别依照图示命名(图)。

(9) 单击VBE中的File菜单,并单击Save Project命令。

(10) 单击VBE中的Run菜单,并单击Run UserForm命令, 你的用户界面现示 如下图:

(11) 单击VBE中的Close按钮,完成制作用户界面。

二、使用基于COM技术编写ArcInfo应用程序以实现上面用户界面的功能:

步骤:

操作ArcMap窗口主菜单:

1. 在用户定制按钮(小狗图标), 右击该按钮控制。 2. 单击用户定制操作快捷菜单中的View Source。 3. 打开显示该按钮控制代码的VBE代码。

4. 单击VBE中的Tools, 选择References 命令 。

5. 在References对话框中, 选择ESRIutil automation server 等如下图所示选项。

16. 这时候我们可以看到如下图面,在新建属性名称前有个黄色叹号,点击

Evaluators,在type字段下选择“Field”,value字段选择“里程”。这样,原“全部道路”图层中的“里程”字段就作为阻抗属性字段添加到网络数据集中了(在网络数据集中被命名为“distan”)。

17. 可以继续将原图层中能够作为网络分析阻抗的字段添加进来。如“全部道路”图层中的“所用费用”(Units:Unknown)和“所用时间”(Units:Minutes)。

18. 点击“确定”,之后选择默认状态就行了

19. 点击“Finish”,运行后出现完成窗口。

20. 选择“是”,运行完成整个网络数据集就创建完成。

成果图

第二部分

使用UIControl创建用户命令定制 操作ArcMap窗口主菜单:

(1)显示想在其中创建新命令的工具条。 (2)单击Tools命令,打开Tools下拉菜单。

(3)单击Customize命令,打开Customize对话框。

(4)单击Commands标签,进入Commands选项卡

(5)单击Categories窗口的[ UIControls ]控制类型。 (6)单击New UIControl按钮,打开New UIControl对话框

(7)单击选中想创建的UIControl类型:如UIButtonControl(按钮控制)。 (8)单击Create按钮,创建一个新的按钮控制 (新建的控制没有任何代码,需要在随后的编辑中添加具体的事件例程代码)。

(9)该控制出现于定制对话框中的UIControls命令列表。

(10)拖放新建的UIButtonControl按钮控制到一个工具条(或菜单)。 (11)在工具条上右击该控制,打开用户定制操作快捷菜单。

(12)设置按钮控制的按钮、标题等特性(图: 这里选择地球图标)。

使用Windows常用控件和AO控件制作用户界面:

操作ArcMap窗口主菜单:

(1) 在用户定制按钮(小狗图标), 右击该按钮控制。 (2) 单击用户定制操作快捷菜单中的View Source。 (3) 打开显示该按钮控制代码的VBE代码。

(4) 单击VBE中的Insert, 增加UserForm进入编辑窗口。 (5) 单击VBE中的Tools, 选择Additional Controls。

(6) 在Additional Controls对话框中, 选择ESRI Map Control 控件。

(7) 加载ESRI Map Control 控件到你的UserForm1界面上

和“CityName”。

1) 在窗体中创建CreateLabel过程,需要显示注释的图层和注释依据的属性列名作为输入参数: Private Sub CreateLabel(mFeatureLayer As IFeatureLayer, mFieldName As String) Dim pGeoFeatureLayer As IGeoFeatureLayer Set pGeoFeatureLayer = mFeatureLayer Dim pAnnoProps As IAnnotateLayerPropertiesCollection '定义注释属性集合 Set pAnnoProps = pGeoFeatureLayer.AnnotationProperties '获取图层的注释信息 pAnnoProps.Clear Dim pAnnolayerprops As IAnnotateLayerProperties Dim pPosition As ILineLabelPosition Dim pPlacement As ILineLabelPlacementPriorities Dim pBasic As IBasicOverposterLayerProperties Dim pLabelEngine As ILabelEngineLayerProperties Dim pFont As stdole.StdFont Set pFont = New stdole.StdFont pFont.Name = \ pFont.Size = 7 Set pPosition = New LineLabelPosition pPosition.Parallel = False pPosition.Perpendicular = True Set pPlacement = New LineLabelPlacementPriorities Set pBasic = New BasicOverposterLayerProperties pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline pBasic.LineLabelPosition = pPosition Set pLabelEngine = New LabelEngineLayerProperties Set pLabelEngine.BasicOverposterLayerProperties = pBasic pLabelEngine.Expression = mFieldName '用以作为注释显示的字段 Set pAnnolayerprops = pLabelEngine pAnnoProps.Add pAnnolayerprops pGeoFeatureLayer.DisplayAnnotation = True MapControl1.Refresh End Sub 在Form_Initialize过程中的【增加“县级市人民政府驻地”图层】和【增加“地级市人民政府驻地”图层】分别添加一下代码,调用CreateLabel过程为这两个图层添加名称注释。

CreateLabel pFeatureLay, \名称]\ 3. 显示图层注释

4. 保存文件后运行程序,查看运行成果

五、地图基本导航工具

该部分将要为MapControl添加三个地图导航按钮,用以实现地图的放大、缩小和还原功能。在窗体的设计界面中添加三个CommandButton按钮,调整其位置和大小并修改其Caption”属性。

1. 在【放大】按钮的点击事件里添加以下代码: Dim pEnv As IEnvelope Set pEnv = MapControl1.Extent pEnv.Expand 0.8, 0.8, True MapControl1.Extent = pEnv MapControl1.Refresh Set pEnv = MapControl1.Extent :获取MapControl的当前视野范围

pEnv.Expand 0.8, 0.8, True :对视野范围进行修改,0.8, 0.8 分别为X,Y轴上的缩放比率,小于1表示放大,大于1表示缩小。

MapControl1.Extent = pEnv : 将修改过的视野范围赋给MapControl。 MapControl1.Refresh :MapControl进行刷新。

2. 仿照【放大按钮代码】实现【缩小】按钮的点击事件。注意选择合适的缩放

比率

3. 还原功能的实现

1) 视图的还原就是要将地图的视野范围恢复到地图加载时的视野范围,因此需要定义

一个始终在窗体运行时存在的窗体变量,在窗体初始化的时候将视野范围保存到该变量,并在需要还原视图的时候读取该变量中保存的信息,从而实现还原功能。 在窗体代码的文件的开始位置、各过程和函数的外部声明一个变量pOldEnvlope,用于记录初始视野: Dim pOldEnvlope As IEnvelope

2) 在Form_Initialize过程中追加以下代码,将初始视野保存到pOldEnvlope Set pOldEnvlope = MapControl1.Extent

3) 在【还原】按钮点击事件中添加一下代码,以实现点击还原的功能 Dim pEnv As IEnvelope MapControl1.Extent = pOldEnvlope MapControl1.Refresh 4. 保存并运行程序,查看运行效果

六、点击选取起(终)点

该部分主要是实现提示用户进行起(终)点的选择,并将选择的起(终)点保存在临时文件中,作为后面最短路径分析的输入要素。

1. 添加选择按钮和提示标签

在窗体的设计界面中添加两个CommandButton按钮和两个Label。

2. 修改按钮和标签状态

按钮和标签可能出现以下几种情况 未选择起(终)点 按钮显示“选择起(终)点”,标签显示“未选择” 正在选择起(终)点 完成选择起(终)点 按钮显示“取消”,标签显示“未选择” 按钮显示“选择起(终)点”,标签显示“已选择”

为起到简化代码的目的,可以在主窗体中为选择起点和选择终点的操作创建两个子过程,以针对上述情况自动改变按钮和标签状态。

因此,需要窗体变量来记录起、终点是否已经选择。此外,还需要窗体变量指示是否正在进行起点和终点的选择。

1) 添加以下窗体变量 Dim selectCount As Integer Dim bStarting As Boolean Dim bEnding As Boolean bStarting和bEnding为布尔型,true表示正在进行起(终)点选择。selectCount为整型,用以记录已选择的起、终点个数,即0为未选择,1为已选择起点,2为已选择起点和终点。

2) 初始化变量

在Form_Initialize过程中初始化以上变量 selectCount = 0 bStarting = False bEnding = False

3) 创建更改控件状态子过程

在窗体文件中自定义BtnStartChange子过程,用来改变起点选择时控件的外观。 Private Sub BtnStartChange() If selectCount > 0 Then ' 已选择起点 Me.btnSelectStart.Caption = \选择起点\ '修改【选择起点】按钮标题 Me.LabStart.Caption = \已选择\ '修改【选择起点】标签标题 Me.LabStart.BackColor = vbGreen '修改【选择起点】标签背景 Else '未选择起点 If bStarting = True Then '正在选择起点 Me.btnSelectStart.Caption = \取消\ Else Me.btnSelectStart.Caption = \选择起点\ Me.LabStart.Caption = \未选择\ Me.LabStart.BackColor = vbWhite End If End If End Sub

4) 仿照BtnStartChange子过程,定义BtnEndChange子过程,用来改变终点选择时控

件的外观。注意对是否已经选择终点进行判断。

5) 在Form_Initialize过程中调用以上两个子过程,以完成这四个控件的初始化

3. 添加按钮点击事件

【选择起点】和【选择终点】按钮的作用是提示用户选择起、终点,同时通知程序用户是否正在进行选择操作。因此在点击后要能改变bStarting和bEnding两个窗体变量的值,同时进行控件外观的改变。

1) 【选择起点】按钮点击事件: If selectCount = 0 Then '如果未选择起点,则改变bStarting变量 bStarting = Not bStarting BtnStartChange End If 2) 【选择终点】按钮点击事件: If selectCount = 0 Then '如果未选择起点,则提示选择 MsgBox \请先选择起点\ Exit Sub End If If selectCount > 1 Then '如果已完成选择 Exit Sub End If bEnding = Not bEnding BtnEndChange 4. 自定义生成过滤区(Filter)函数

点击选择的原理是以点击获取的点为中心,生成一个一定大小的几何过滤区域(Filter),

本文来源:https://www.bwwdw.com/article/p1g2.html

Top