当前位置:文档之家› GIS二次开发实验报告

GIS二次开发实验报告

GIS二次开发实验报告学号:姓名:班级:专业:指导老师:二零一五年11月15日目录1 实验一:软件安装与AOI书签开发 (2)1.1 实验目的 (2)1.2 实验内容 (2)1.3 实验结果 (2)2 实验二:地图数据组织与访问 (5)2.1 实验目的 (5)2.2 实验内容 (5)2.3 实验结果 (5)3 实验三:地图渲染与制图输出 (9)3.1 实验目的 (9)3.2 实验内容 (9)3.3 实验结果 (9)4 实验四:空间数据处理 (14)4.1 实验目的 (14)4.2 实验内容 (14)4.3 实验结果 (14)5 实验五:GIS分析 (20)5.1 实验目的 (20)5.2 实验内容 (20)5.3 实验结果 (20)6实验六:栅格数据处理 (25)4.1 实验目的 (25)4.2 实验内容 (25)4.3 实验结果 (25)7实验总结 (31)1实验一:软件安装与AOI书签开发1.1实验目的✧掌握AOI书签程序开发1.2实验内容✧实现AOI书签的创建✧实现AOI书签的调用1.3实验步骤与结果安装程序后,新建地图显示项目。

在程序的主窗体上端添加添加菜单项,文本属性为创建书签,控件名为miCreateBookmark,在旁边添加组合框,控件名为cbBookmarkList。

1.右击引用选择AddArcGIS Reference在弹出的对话框中添加引用在主窗体(即MainForm.cs)中添加代码;(1)首先添加引用代码:using ESRI.ArcGIS.Display;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.ADF;using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.DataSourcesFile;using ESRI.ArcGIS.DataSourcesRaster;(此引用代码都需添加引用后才可以使用,上述引用代码为本类中所需要的所有引用,在之后的编程中,可以不用重复引用)(2)添加“创建书签”函数在MainForm类中添加成员函数CreateBookMark,代码如下:public void CreateBookmark(string sBookmarkName)//参数为书签名{//通过IAOIBookmark接口创建一个变量,其类型为AOIBookmark,用于保存当前地图的范围IAOIBookmark aoiBookmark = new AOIBookmarkClass();if (aoiBookmark != null){aoiBookmark.Location = axMapControl1.ActiveView.Extent; = sBookmarkName;}//通过IMaoBookmarks接口访问当前地图,并向地图中加入新建书签 IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;if (bookmarks != null){bookmarks.AddBookmark(aoiBookmark);}//将新建书签名加入组合框中,用于之后调用对应书签cbBookmarkList.Items.Add();}2.添加“书签名成设置”窗体(1)点击项目添加Windows窗体,该窗体命名为“AdmitBookmarkName.cs”,点击添加后,转入设计窗口。

(2)设置窗体的文本属性为“书签名称设置”,尺寸设置为“200,100”,初始位置设置为“CenterScreen”(3)添加控件,添加一个文本框,控件名为“tbBookmarkName”。

一个按钮,文本属性为“确认”,控件名为“btnAdmit”(4)双击“确认”按钮,自动生成点击事件响应函数,并转至窗体代码页。

3.添加成员变量m_frmMain,并为确认按钮输入代码,代码如下://用于保存主窗体对象public MainForm m_frmMain;//用于传入主窗体对象public AdmitBookmarkName(MainForm frm){InitializeComponent();if (frm != null){m_frmMain = frm;}}//"确认"按钮的“点击”事件响应函数,用于创建书签private void btnAdmit_Click(object sender, EventArgs e){if (m_frmMain != null || tbBookmarkName.Text == ""){m_frmMain.CreateBookmark(tbBookmarkName.Text);}this.Close();}4.为主窗体的“创建书签”菜单生成“点击”事件响应函数,代码如下:AdmitBookmarkName frmABN = new AdmitBookmarkName(this);frmABN.Show();5.为组合框cb_BookmarkList生成“选择索引更改”事件响应函数,代码如下//组合框的“选择索引更改”事件响应函数,用于在改变组合框所选项时地图范围变为其对应书签所保存的范围private void cbBookmarkList_SelectedInexChanged(object sender, EventArgs e){//访问地图所包含的书签,并获取书签序列IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;//对地图所包含的书签进行遍历,获取与组合框所选项名称相符的书签enumSpatialBookmark.Reset();ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();while (spatialBookmark != null){if (cbBookmarkList.SelectedItem.ToString() == ){spatialBookmark.ZoomTo((IMap)axMapControl1.ActiveView);axMapControl1.ActiveView.Refresh();break;}spatialBookmark = enumSpatialBookmark.Next();}6.实验结果如下2 实验二:地图数据组织与访问2.1实验目的✧了解ArcGIS Engine中地图数据的组织结构✧掌握ArcGIS Engine地图数据访问方法2.2实验内容✧编写“数据操作”类✧利用DataGridView控件展示Continents图层的序号和名称字段2.3实验步骤与结果1.添加“空间数据”菜单项,在下拉菜单中添加一个菜单项文本为“访问图层数据”名称为“miAccessData”,用于稍后调用“数据展示台”窗体。

2.新建窗体类,窗体文件命名为“DataBoard.cs”文本属性为“数据展示台”。

添加一个文本框,控件名为“tbDataName”,一个数据网格视图,控件名为“dataGridView1”,ReadOnly=true。

如图所示3.在当前窗体代码中加入以下代码public DataBoard(String sDataName, DataTable dataTable){//初始化窗体及控件InitializeComponent();//设置文本框中的文本和数据网格视图的数据源tbDataName.Text = sDataName;dataGridView1.DataSource = dataTable;}4.添加类,命名为“DataOPerator.cs”并导入类库引用using System.Data;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.DataSourcesFile;5.添加以下代码//保存当前地图对象public IMap m_map;//用于传入当前地图对象public DataOperator(IMap map){m_map = map;}6.添加“获取地图图层”功能函数。

代码如下public ILayer GetLayerByName(String sLayerName){//判断图层名或地图对象是否为空。

若为空,函数返回空。

if (sLayerName == "" || m_map == null){return null;}//对地图对象中的所有图层进行遍历。

若某一图层的名称与指定图层名相同,则返回该图层、for (int i = 0; i < m_yerCount; i++){if (m_map.get_Layer(i).Name == sLayerName){return m_map.get_Layer(i);}}return null;}7.添加成员函数GetContinentsNames代码如下public DataTable GetContinentsName(){//获取“Continents”图层,利用IFeatureLayer接口访问,并判断是否成功。

若失败,函数返回空ILayer layer = GetLayerByName("Continents");IFeatureLayer featureLayer = layer as IFeatureLayer;if (featureLayer == null){return null;}//调用IFeatureLayer接口的Seach方法,获取要素指针(IFeatureCursor)接口对象,用于在之后遍历图层中的全部要素,并判断是否成功获取第一个要素,若失败,函数返回空IFeature feature;IFeatureCursor featureCursor = featureLayer.Search(null, false);feature=featureCursor.NextFeature();if (feature==null ){return null ;}//新建DataTable类型对象,用于函数返回DataTable dataTable = new DataTable();//新建DataColumn类型对象,分别保存各个州的序号和名称。

相关主题