目录
1 实验一:AOI书签开发... 1
1.1 实验目的... 1
1.2 实验内容... 1
1.3 实验步骤与结果... 1
1.3.1 功能流程图... 1
1.3.2 所用接口的作用... 2
1.3.3 具体实现过程... 3
2 实验二:地图数据组织与访问... 7
2.1 实验目的... 7
2.2 实验内容... 7
2.3 实验步骤与结果... 7
2.3.1 功能流程图... 7
2.3.2 所用接口的作用... 7
2.3.3 具体实现过程... 8
3 实验三:地图渲染... 13
3.1 实验目的... 13
3.2 实验内容... 13
3.3 实验步骤结果... 13
3.3.1 功能流程图... 13
3.3.2 所用接口的作用... 14
3.3.3 具体实现过程... 14
4 实验四:空间数据处理... 21
4.1 实验目的... 21
4.2 实验内容... 21
4.3 实验步骤与结果... 22
4.3.1 功能流程图... 22
4.3.2 所用接口的作用... 22
4.3.3 创建Shapefile. 23
4.3.4 添加点要素... 28
5 实验五:GIS分析... 32
5.1 实验目的... 32
5.2 实验内容... 32
5.3 实验步骤与结果... 33
5.3.1 功能流程图... 33
5.3.2 所用接口的作用... 33
5.3.3 空间查询... 35
5.3.4 缓冲区分析... 39
5.3.5 数据统计... 42
6 实验六:栅格数据处理... 44
6.1 实验目的... 44
6.2 实验内容... 44
6.3 实验步骤与结果... 45
6.3.1 功能流程图... 45
6.3.2 所用接口的作用... 45
6.3.3 创建栅格数据集... 47
6.3.4 栅格数据格式转换... 51
6.3.5 栅格影像镶嵌... 54
6.3.6 栅格统计... 58
7 实验总结... 61
1 实验一:AOI书签开发
1.1 实验目的
² 掌握AOI书签程序开发
1.2 实验内容
² 实现AOI书签的创建
² 实现AOI书签的调用
1.3 实验步骤与结果
1.3.1 功能流程图
1.3.2 所用接口的作用
1) IAOIBookmark接口
Ø 简介
提供访问控制AOI书签的成员的权限。
Ø Members
Name | Description |
Location | 书签的位置 |
Name | 书签的名称 |
ZoomTo | 放大到书签 |
2) IMapBookmarks接口
Ø 简介
提供对控制地图书签的成员的访问权限。
Ø Members
Name | Description |
AddBookmark | 为集合添加书签 |
Bookmarks | 书签 |
3) IEnumSpatialBookmark接口
Ø 简介
提供对控制空间书签列表的成员的访问权限。
Ø Members
Name | Description |
Next | 返回下一个空间书签 |
Reset | 重置枚举器 |
4) ISpatialBookmark接口
Ø 简介
提供对控制空间书签的成员的访问权限。
Ø Members
Name | Description |
ZoomTo | 放大到书签 |
1.3.3 具体实现过程
1) 添加控件
在程序的主窗体上的菜单栏上添加一个菜单项(MenuItem),Text属性为“AOI书签”,再在其下创建一个子菜单项(MenuItem),Text属性为 “创建书签”,其控件名为“miCreateBookmark”,并添加一个组合框(ComboBox),其控件名为“cbBookmarkList”,用于保存已创建的书签名。
图 1 添加书签控件
2) 添加类库引用
using ESRI.ArcGIS.Geometry;
右键单击“引用”
图 2 添加引用
3) 添加“创建书签”函数
添加成员函数CreateBookmark,以创建书签
图 3 CreateBookmark函数
4) 添加“书签名称设置”窗体
图 4 书签名称设置
在当前窗体代码中,添加一个主窗体类型的成员变量m_frmMain,并新建一个以主窗体类型对象为参数的构造函数,用于调用主窗体的相关成员。最后“确认”按钮“Click”事件响应函数输入代码,实现书签名称的传递。
图 5 设置书签窗体
5) 实现创建书签与调用书签功能
为主窗体的“创建书签”菜单项生成“Click”事件响应函数,并添加代码运行“书签名称设置”窗体。
图 6 创建书签事件
为组合框cb_BookmarkList生成“选择索引更改”(SeletedIndexChanged)事件响应函数
图 7 书签索引事件
6) 运行结果
运行程序,在地图的不同范围内创建书签后,尝试更改组合框的选中项,可发现地图依据所选中的书签改变显示范围。
图 8 创建书签
图 9 运行结果
2 实验二:地图数据组织与访问
2.1 实验目的
² 了解ArcGIS Engine中地图数据的组织结构
² 掌握ArcGIS Engine地图数据访问方法
2.2 实验内容
² 编写“数据操作”类
² 利用DataGridView控件展示Continents图层的序号和名称字段
2.3 实验步骤与结果
2.3.1 功能流程图
2.3.2 所用接口的作用
1) ILayer接口
Ø 简介
提供对使用所有图层的成员的访问权限。
Ø Members
Name | Description |
Name | 图层名称 |
2) IFeatureLayer接口
Ø 简介
提供对控制要素图层常见方面的成员的访问权限。
Ø Members
Name | Description |
Search | 根据搜索条件创建一个游标 |
3) IFeatureCursor接口
Ø 简介
提供对取出枚举要素、字段集合并允许更新、删除和插入要素的成员的访问。
Ø Members
Name | Description |
NextFeature | 将光标的位置前进一个,然后在该位置返回Feature对象 |
2.3.3 具体实现过程
1) 添加控件
在程序的主窗体“空间数据”菜单项的下拉菜单中,添加一个菜单项,“文本”的属性为“访问图层数据”,控件名为“miAccessData”,用于稍后调用“数据展示台”窗体
图 10 数据访问菜单
2) 添加“数据展示台”窗体
在当前项目中增加一个新的窗口类,命名为“DataBoard.cs”,并在该窗体中添加两个控件:一个文本框,用于显示当前显示数据的名称,其控件名为“tbDataName”;一个数据网格视图(DataGridView),“只读”(ReadOnly)属性为True,其控件名为“dataGridView1”。
图 11 数据展示台窗体
在当前窗体代码中,新建构造函数,用于设置展示的数据表名称和数据源。
图 12 构造函数
3) 添加“数据操作”类
在该项目中添加一个类,并命名为“DataOperator.cs”,该类用于管理当前项目中涉及数据操作的相关功能。向该类中添加相应的类库引用,并新建一个IMap接口对象为参数的构造函数,将当前的地图对象传入类内,以添加创建好的Shap文件和要素。
图 13 类库引用
图 14 传入当前地图对象
4) 添加“获取地图图层”功能函数
向DataOperator类添加成员函数,添加成员函数GetLayerByName,通过指定的图层名获取对应图层对象。
图 15 添加GetLayerByName成员函数
添加成员函数GetContinentsNames,获取地图中“Continents”图层,读取每个州的名称,并以DataTable类型返回。
图 16 添加GetContinentsNames成员函数
图 17 添加GetContinentsNames成员函数
5) 实现创建地理数据列表功能
为主窗体的“访问图层数据”菜单项生成“Click”事件响应函数,并添加代码运行“数据展示台”窗体,以展示各个州的名称。
图 18 访问图层数据
6) 运行结果
运行程序,点击“访问图层数据”菜单项后,程序弹出载有各个州名称的数据表窗体,该表名称为“各大洲州名”。
图 19 运行结果
3 实验三:地图渲染
3.1 实验目的
² 了解地图符号的分类与可视化过程
² 掌握地图符号的渲染方法
3.2 实验内容
² 编写“地图编制”类,添加成员函数
² 实现获取地图渲染器信息功能
² 实现地图的简单符号渲染
3.3 实验步骤结果
3.3.1 功能流程图
3.3.2 所用接口的作用
1) IGeoFeatureLayer接口
Ø 简介
提供对控制要素图层地理方面的成员的访问权限。
Ø Members
Name | Description |
Renderer | 用于绘制图层的渲染器 |
2) ISymbol接口
Ø 简介
提供对控制符号的成员的访问权限。
3) ISimpleRenderer接口
Ø 简介
提供对成员的访问,这些成员控制为每个要素绘制相同符号的渲染器。
Ø Members
Name | Description |
Symbol | 用于绘制每个要素的符号 |
3.3.3 具体实现过程
1) 添加控件
在程序的主窗体上端菜单栏添加一个菜单项“地图表现”,其控件名为“miCarto”。向该菜单项的下拉菜单中,添加两个菜单项,“文本”属性分别设置为“简单渲染图层”和“获取渲染器信息”,其控件名分别为“miRenderSimply”和“miGetRendererInfo”。
图 20 添加控件
2) 添加“地图编制”类
向当前项目添加一个新的类,将类文件命名为“MapComposer.cs”。该类用于管理当前项目中涉及地图整饰、修改和展示的相关功能,并引用相应类库。
图 21 引用类库
3) 完善“地图编制”类的功能
向MapComposer类添加成员函数GetRendererType,用于获取指定图层的渲染器类型信息。
图 22 添加GetRendererType成员函数
图 23 添加GetSymbolFromLayer成员函数
图 24 添加RenderSimply成员函数
图 25 添加RenderSimply成员函数
图 26 添加RenderSimply成员函数
4) 实现图层简单渲染
为主窗体的“简单渲染图层”菜单项生成“Click”事件响应函数,并添加代码实现对“WorldCities”图层的简单渲染。
图 27 简单渲染图层
为主窗体的“获取渲染器信息”菜单项生成“Click”事件响应函数,并添加代码实现对“WorldCities”图层的简单渲染。
图 28 简单渲染图层
5) 运行结果
运行程序,点击“获取渲染器信息”菜单项后,程序提示“World Cities”图层的渲染器类型信息;点击“简单渲染图层”菜单项,“World Cities”图层被简单渲染,符号为红色点状标记。
图 29 简单渲染图层
在简单渲染“WorldCities”图层前后,分别点击“获取渲染器信息”菜单项,可发现该图层的渲染器类型已被改变。
图 30 渲染前后渲染器信息对比 |
4 实验四:空间数据处理
4.1 实验目的
² 了解创建空间数据的过程
² 掌握创建空间数据的方法
4.2 实验内容
² 实现创建Shapefile文件的程序
² 实现新增点要素程序
4.3 实验步骤与结果
4.3.1 功能流程图
4.3.2 所用接口的作用
1) IWorkspaceFactory接口
Ø 简介
提供对创建和打开工作空间并提供工作空间工厂信息的成员的访问权限。
Ø Members
Name | Description |
Create | 创建由目录,文件名和连接属性指定的新工作空间 |
Open | 打开由连接属性指定的工作区 |
OpenFromFile | 打开给定文件名称指定的工作区 |
2) IFeatureWorkspace接口
Ø 简介
提供对创建和打开各种类型的数据集和其他工作空间级别对象的成员的访问权限。
3) IFieldEdit接口
Ø 简介
提供对编辑字段属性的成员的访问权限。
Ø Members
Name | Description |
AliasName_2 | 设置字段的别名 |
Name_2 | 设置字段的名称 |
Type_2 | 设置字段的类型 |
4) ISpatialReference接口
Ø 简介
提供对控制SpatialReference的成员的访问权限。
5) IPoint接口
Ø 简介
提供对定义二维点的成员的访问权限。
Ø Members
Name | Description |
PutCoords | 设置X和Y坐标 |
4.3.3 创建Shapefile
1) 添加控件和类库引用
在程序的主窗体上端菜单栏添加一个菜单项“数据操作”,其控件名为“miData”。向该菜单项的下拉菜单中添加菜单项,“文本”属性设置为“创建Shapefile”,其控件名为“miCreateShapefile”。
图 31 数据操作
2) 添加“创建Shape文件”功能函数
创建完DataOperator类后,可进一步添加成员函数,已完善类的功能。添加成员函数CreateShapefile,通过指定的上级路径、文件夹名和文件名,创建一个新的Shape文件。
图 32 添加CreateShapefile成员函数
图 33 添加CreateShapefile成员函数
图 34 添加CreateShapefile成员函数
添加成员函数AddFeatureClassToMap,将指定的要素类以图层的形式添加到类保存的地图对象中,并同时指定图层的名称。
图 35 添加AddFeatureClassToMap成员函数
3) 实现创建Shape文件
在主窗体视图设计视图中,为“创建Shapefile”菜单项生成“Click”事件响应函数,并添加代码调用DataOperator类中的相关方法,创建Shape文件,并使其以图层形式添加到地图中。
图 36 创建Shape文件
图 37 创建Shape文件
4) 运行结果
运行程序,点击“创建Shapefile”菜单项后,新建图层“ObservationStations”被显示在地图上。勾选“添加要素”菜单项,在地图上按下鼠标,即可在“Observation Stations”图层上添加要素。
图 38 创建Shapefile
4.3.4 添加点要素
1) 添加控件和类库引用
在程序的主窗体上端的菜单栏“数据操作”的下拉菜单中,添加一个菜单项“添加要素”,其控件名为“miAddFeature”,菜单项的“可用”(Enabled)属性为false。
图 39 添加要素控件
2) 添加“新增要素”函数
在“DataOperator.cs”类中添加成员函数AddFeatureToLayer,在鼠标点击处,在给定名称的图层上新增要素,并指定要素的名称。
图 40 添加AddFeatureToLayer成员函数
图 41 添加AddFeatureToLayer成员函数
3) 实现添加要素功能
为“添加要素”菜单项生成“Click”事件响应函数,以设置按钮是否被勾选。在勾选的情况下,在地图上按下鼠标才会在新建图层上添加要素。
图 42 添加要素响应事件
为地图控件对象添加“OnMouseDown”事件响应函数,并添加代码调用DataOperator类中的相关方法,在地图鼠标按下处创建要素、添加至新建图层,并显示在地图上。
图 43 添加OnMouseDown事件响应函数
4) 运行结果
运行程序,勾选“添加要素”菜单项,在地图上按下鼠标,即可在新建图层“ObservationStations”图层上添加要素。
图 44 添加要素运行结果
5 实验五:GIS分析
5.1 实验目的
² 了解GIS空间分析的内容
² 掌握空间关系查询方法
² 掌握空间拓扑分析方法
² 掌握空间数据统计方法
5.2 实验内容
² 实现空间关系查询程序
² 实现缓冲区分析程序
² 实现要素统计程序
5.3 实验步骤与结果
5.3.1 功能流程图
5.3.2 所用接口的作用
1) IQueryFilter接口
Ø 简介
提供对基于属性值和/或关系过滤数据的成员的访问权限。
Ø Members
Name | Description |
WhereClause | 过滤器的where子句(设置过滤条件) |
2) IFeature接口
Ø 简介
提供对返回并设置功能属性的成员的访问权限。
Ø Members
Name | Description |
Shape | 对该功能的默认形状的引用(获取要素几何) |
3) ISpatialFilter接口
Ø 简介
提供对返回和修改过滤器将使用的空间关系类型的成员的访问权限。
Ø Members
Name | Description |
Geometry | 用于过滤结果的查询几何 |
WhereClause | 过滤器的where子句 |
SpatialRel | 过滤器检查空间关系 |
4) IFeatureSelection接口
Ø 简介
提供对控制功能选择的成员的访问权限。
Ø Members
Name | Description |
SelectFeatures | 根据指定的条件和组合方法选择要素 |
5) ITopologicalOperator接口
Ø 简介
根据现有几何图形之间的拓扑关系,提供对构件进行构造以创建新几何图形的权限。
Ø Members
Name | Description |
Buffer | 构造一个多边形,该多边形是小于或等于距该几何体的指定距离处的点的轨迹 |
6) IDataStatistics接口
Ø 简介
提供对成员的访问权限以生成字段的统计信息。
Ø Members
Name | Description |
Cursor | 将生成统计信息的游标 |
Statistics | 当前游标上当前字段的统计信息 |
7) IStatisticsResults接口
Ø 简介
提供对用于报告统计的成员的访问权限。
Ø Members
Name | Description |
Maximum | 最大值 |
Mean | 算术平均值 |
Minimum | 最小值 |
5.3.3 空间查询
1) 添加控件和类库引用
在程序的主窗体上端的菜单栏“GIS分析”的下拉菜单中,添加一个菜单项“空间查询”,其控件名为“miSpatilFilter”。
图 45 添加类库引用
图 46 添加“空间查询”菜单项
2) 添加地图分析类
在项目中添加MapAnalysis,向当前项目中添加了一个新的类,将类文件命名为“MapAnalysis.cs”。该类用于管理当前项目中涉及的地图分析相关功能,并在该类中添加成员函数QueryIntersect,根据给定图层进行空间交叉查询。
图 47 地图分析类
图 48 添加成员函数QueryIntersect
图 49 添加成员函数QueryIntersect
3) 添加空间查询事件
为菜单项“空间查询”菜单项生成“Click”事件响应函数,实现要素的空间交叉选择,并在地图上明显标识。
图 50 空间查询事件响应函数
4) 运行结果
运行程序,点击“空间查询”菜单
图 51 查询成功提示框
图 52 查询结果
5.3.4 缓冲区分析
1) 添加菜单项
在程序的主窗体上端的菜单栏“GIS分析”的下拉菜单中,添加一个菜单项“缓冲区分析”,其控件名为“miBuffer”。
图 53 添加“缓冲区分析”菜单项
2) 添加“缓冲区分析”函数
向地图分析类MapAnalysis中添加缓冲区分析函数
图 54 添加Buffer成员函数
图 55 添加Buffer成员函数
3) 添加缓冲区分析事件
为“缓冲区分析”菜单项生成“Click”事件响应函数,实现要素的缓冲区分析,并通过空间交叉选择城市并在地图上明显标识。
图 56 缓冲区分析事件响应函数
4) 运行结果
运行程序,点击“缓冲区分析”菜单项,即可在地图上显示满足条件的城市
图 57 分析成功提示框
图 58 分析结果
5.3.5 数据统计
1) 添加菜单项
在程序的主窗体上端的菜单栏“GIS分析”的下拉菜单中,添加一个菜单项“要素统计”,其控件名为“miStatistic”。
图 59 添加“要素统计”菜单项
2) 添加“要素统计”函数
向地图分析类MapAnalysis中添加要素统计函数
图 60 添加Statistic成员函数
3) 添加要素统计事件
为菜单项“要素统计”菜单项生成“Click”事件响应函数,实现要素的面积统计分析,并将统计结果以对话框形式输出。
图 61 添加“要素统计”事件响应函数
4) 运行结果
运行程序,点击“要素统计”菜单项,即可显示世界各大洲面积统计信息的消息框
图 62 统计结果
6 实验六:栅格数据处理
6.1 实验目的
² 了解栅格数据的结构
² 掌握创建栅格数据集的方法
² 掌握栅格数据格式转换与镶嵌的方法
² 掌握栅格数据的统计方法
6.2 实验内容
² 实现创建栅格数据集程序
² 实现栅格数据格式转换程序
² 实现栅格数据镶嵌程序
² 实现栅格数据统计程序
6.3 实验步骤与结果
6.3.1 功能流程图
6.3.2 所用接口的作用
1) IRasterWorkspace接口
Ø 简介
提供对控制栅格工作空间的成员的访问权限。
Ø Members
Name | Description |
OpenRasterDataset | 根据名称在工作空间中打开一个栅格数据集 |
2) IRasterWorkspaceEx接口
Ø 简介
提供对创建和打开栅格目录和数据集的成员的访问权限。
Ø Members
Name | Description |
OpenRasterCatalog | 打开现有的栅格目录 |
CreateRasterDataset | 创建一个新的栅格数据集 |
3) IRasterBandCollection接口
Ø 简介
提供对控制栅格波段集合的成员的访问。
Ø Members
Name | Description |
SaveAs | 用集合中的波段创建一个新的栅格数据集 |
4) IMosaicRaster接口
Ø 简介
提供对控制栅格镶嵌的成员的访问权限。
Ø Members
Name | Description |
RasterCatalog | 镶嵌栅格目录中的所有影像的输出栅格目录 |
MosaicColormapMode | 当前镶嵌伪彩栅格数据集的模式 |
MosaicOperatorType | 当前镶嵌运算符类型 |
5) IEnumRasterBand接口
Ø 简介
提供对控制栅格波段枚举器对象的成员的访问权限。
Ø Members
Name | Description |
Next | 在枚举序列中检索下一个栅格波段 |
6) IRasterBand接口
Ø 简介
提供对控制栅格波段对象的成员的访问权限。
Ø Members
Name | Description |
Statistics | 当前栅格波段的统计信息 |
HasStatistics | 指示该波段是否有统计数据 |
ComputeStatsAndHist | 如果以前未存储,则计算统计量和直方图 |
Histogram | 当前栅格波段的直方图 |
6.3.3 创建栅格数据集
1) 添加控件和类库引用
在程序主菜单上添加一个菜单项“栅格管理”,在下拉菜单中添加“创建栅格数据集”,其控件名为“miCreateRaster”。
图 63 添加类库引用
图 64 添加“创建栅格数据集”菜单项
2) 添加栅格工具类
通过解决方案资源管理器,点击“项目”菜单下的“添加类”按钮,添加栅格工具类RasterUtil,该类用于管理当前项目中涉及的栅格数据操作的相关功能。类添加后,当前视图自动转至RasterUtil类的代码页。
图 65 添加“RasterUtil.cs”类
3) 添加“创建栅格数据集”函数
在Geodatabase中创建的栅格数据集是没有维数的,只是数据集的某些属性信息的占位符,如波段数、像素值、栅格列属性、几何列属性。一旦空的栅格数据集创建成功,栅格的像素值可以从别的数据集中通过拼接(mosaic)添加进去。
图 66 在ArcMap中创建文件地理数据库
图 67 打开栅格工作空间
图 68 添加“CreateRaster”成员函数
4) 添加“栅格数据集名称”窗体
在当前项目中添加“createRaster.cs”窗体,用于设置栅格数据集的名称,并在“确认”按钮中添加“Click”事件
图 69 设置栅格数据集名称窗体
图 70 添加创建栅格数据集事件
5) 运行结果
点击“创建栅格数据集”,弹出设置栅格数据集名称,输入“raster”后,点击“确认”按钮,并弹出“创建成功”对话框
图 71 输入栅格数据集名称
图 72 “创建成功”对话框
然后在ArcCatalog中查看已创建的栅格数据集
图 73 创建好的栅格数据集
6.3.4 栅格数据格式转换
1) 添加控件
在程序的主菜单项“栅格管理”下增加菜单项“格式转换”,控件名为“miRasterConvert”
图 74 添加“格式转换”菜单项
2) 添加“栅格数据格式转换”函数
向栅格工具类RasterUtil添加“栅格数据格式转换”函数,根据输入栅格集及各类参数转换成输出栅格数据集。
图 75 添加“RasterUtil”成员函数
3) 添加栅格数据转换窗体
在当前项目中添加“RasterCon.cs”的窗体
图 76 栅格数据转换窗体
图 77 栅格数据转换事件响应函数
4) 运行结果
点击“格式转换”按钮,在“栅格数据格式转换”对话框中,输入需要转换的栅格数据名称,以及转换后新的栅格数据名称。
图 78 栅格数据格式转换窗口
图 79 转换成功提示框
图 80 转换结果
6.3.5 栅格影像镶嵌
1) 栅格影像拼接前准备
利用ArcCatalog创建个人数据库,用以存放镶嵌影像
图 81 创建个人地理数据库
在新建的个人地理数据库中新建一个名为“RasterCatalog”的目录
图 82 创建栅格目录
在新建的栅格目录中装载影像
图 83 装载影像
装载成功后看到栅格目录下已存在两个影像图
图 84 C00000000.png影像
图 85 C00000001.png影像
2) 添加控件和类库引用
在程序的主菜单项“栅格管理”下增加菜单项“影像镶嵌”,控件名为“miRasterMosaic”。向当前项目添加DataSourcesGDB类库引用,并向RasterUtil.cs中添加代码。
图 86 添加“影像镶嵌”菜单项
3) 添加“影像镶嵌”函数
向栅格工具类RasterUtil添加“影像镶嵌”函数,将1)中引入的两幅影像镶嵌成一幅影像。
图 87 添加“Mosaic”成员函数
图 88 添加“Mosaic”成员函数
4) 添加“影像镶嵌”事件
图 89 “影像镶嵌”事件响应函数
5) 运行结果
运行程序,点击“栅格管理”下的“影像镶嵌”,并将生成的MosaicRaster.tif文件添加至地图。
图 90 镶嵌成功提示框
图 91 镶嵌结果
6.3.6 栅格统计
1) 添加控件
图 92 添加“栅格统计”菜单项
2) 添加“栅格统计”函数
向栅格工具类RasterUtil添加“栅格统计”函数,统计栅格影像的均值和标准差。
图 93 添加“RasterStistics”成员函数
图 94 添加“GetRasterStatistics”成员函数
3) 添加“栅格统计”事件
图 95 “栅格统计”事件响应函数
4) 运行结果
运行程序,统计融合后的栅格影像信息
图 96 统计结果
7 实验总结
这次的GIS二次开发实习,让我学会了很多东西,比如解决问题的能力,虽然这次实习的内容书上都有,但是书上的有些代码运行不了,然后自己去查找相应的资料,去解决它,特别是二次开发的帮助文档,给我解决了很多问题,所以说,写代码一定不能照搬照用,一定要学会灵活运用,同时,在不断学习的过程中,对二次开发有了一个初步的了解,然后对书上的一些代码进行了改进,比如,添加一些提示框和捕获异常语句等,但是我知道,这是远远不够的,需要学习的东西还有很多。
老师对于二次开发知识的详细讲解,让我受益匪浅,一些难以理解的概念,老师用通俗易懂的语言和形象生动的比喻,让我对于接口和类的概念有了一个深入的了解,并且让我在上机操作中更好地运用它们,老师的帮助无疑是巨大的,所以非常感谢老师的辛勤付出,同时,我也会不断地学习下去,让自己变得更强。