GIS二次开发实验报告.docx
- 文档编号:358412
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:61
- 大小:3.43MB
GIS二次开发实验报告.docx
《GIS二次开发实验报告.docx》由会员分享,可在线阅读,更多相关《GIS二次开发实验报告.docx(61页珍藏版)》请在冰点文库上搜索。
东华理工大学GIS程序设计目录
目录
一、 实验一:
软件安装与AOI书签开发 1
1.1 实验目的 1
1.2 实验内容 1
1.3 实验步骤与结果 1
二、 实验二:
地图数据组织与访问 9
2.1 实验目的 9
2.2 实验内容 9
2.3 实验步骤与结果 9
三、 实验三:
地图渲染与制图输出 15
3.1 实验目的 15
3.2 实验内容 15
3.3 实验步骤结果 15
3.3.1实现图层基本渲染 15
3.3.2打印页面布局 21
3.3.3制图文件输出 25
四、 实验四:
空间数据处理 28
4.1 实验目的 28
4.2 实验内容 28
4.3 实验步骤与结果 28
4.3.1创建一个Shapefile文件 28
4.3.2创建新要素 32
五、 实验五:
GIS分析 37
5.1 实验目的 37
5.2 实验内容 37
5.3 实验步骤与结果 37
5.3.1空间关系示例 37
5.3.2缓冲区分析 40
5.3.3要素统计实例 43
六、 实验六:
栅格数据处理 46
6.1 实验目的 46
6.2 实验内容 46
6.3 实验步骤与结果 46
6.3.1创建栅格数据集 46
6.3.2栅格数据格式转换 49
6.3.3栅格影像镶嵌 51
6.3.4栅格统计 55
七、 实验总结 58
58
东华理工大学GIS程序设计实验一
一、实验一:
软件安装与AOI书签开发
1.1实验目的
²掌握ArcGISEngine开发环境的相关软件安装
²掌握AOI书签程序开发
1.2实验内容
²安装VisualStudio2010
²安装Microsoft.NETFramework3.5
²安装ArcGISEngine10.2
²安装ArcObjectsDeveloperkitForMicrosoft.NETFramework10.2
²安装ArcGISLicenseManager,并授权
²实现AOI书签的创建
²实现AOI书签的调用
1.3实验步骤与结果
1.3.1安装VisualStudio2010
1.3.2安装Microsoft.NETFramework3.5
1.3.3安装ArcGISEngine10.2
1.3.4安装ArcObjectsDeveloperkitForMicrosoft.NETFramework10.2
1.3.5安装ArcGISLicenseManager,并授权
1.3.6实现AOI书签的创建
1.3.6.1添加控件和类库引用
1.3.6.2添加“创建书签”函数
在MainForm类定义内容添加一个成员函数,以创建书签。
publicvoidCreateBoookmark(stringsBookmarkName)//参数为书签名
{
//通过IAOIBook接口创建一个变量,其类型为AOIBookmark,用于保存当前地图的范围。
IAOIBookmarkaoiBookmark=newAOIBookmarkClass();
if(aoiBookmark!
=null)
{
aoiBookmark.Location=axMapControl1.ActiveView.Extent;
aoiBookmark.Name=sBookmarkName;
}
//通过IMapBookmarks接口访问当前地图,并向地图中加入新建书签。
IMapBookmarksbookmarks=axMapControl1.MapasIMapBookmarks;
if(bookmarks!
=null)
{
bookmarks.AddBookmark(aoiBookmark);
}
//将新建书签名加入组合框中,用于之后调用对应书签。
cbBookmarkList.Items.Add(aoiBookmark.Name);
}
1.3.6.3添加“书签名称设置”窗体
添加代码:
publicAdmitBookmarkName()
{
InitializeComponent();
}
//用于保存主窗体对象。
publicMainFormm_frmMain;
//用于传入主窗体对象。
publicAdmitBookmarkName(MainFormfrm)
{
InitializeComponent();
if(frm!
=null)
{
m_frmMain=frm;
}
}
//“确认”按钮的“点击”事件响应函数,用于创建书签。
privatevoidbtnAdmit_Click(objectsender,EventArgse)
{
if(m_frmMain!
=null&&tbBookmarkName.Text!
="")
{
m_frmMain.CreateBoookmark(tbBookmarkName.Text);
}
else{
MessageBox.Show("未添加标签");
}
this.Close();
}
1.3.6.4实现创建书签与调用书签
privatevoidmiCreateBookmark_Click(objectsender,EventArgse)
{
AdmitBookmarkNamefrmABN=newAdmitBookmarkName(this);
frmABN.Show();
}
privatevoidcbBookmarkList_SelectedIndexChanged(objectsender,EventArgse)
{
//访问地图所包含的书签,并获取书签序列。
IMapBookmarksbookmarks=axMapControl1.MapasIMapBookmarks;
IEnumSpatialBookmarkenumSpatialBookmark=bookmarks.Bookmarks;
//对地图所包含的书签进行遍历,获取与组合框所选项名称相符的书签。
enumSpatialBookmark.Reset();
ISpatialBookmarkspatialBookmark=enumSpatialBookmark.Next();
while(spatialBookmark!
=null)
{
if(cbBookmarkList.SelectedItem.ToString()==spatialBookmark.Name)
{
spatialBookmark.ZoomTo((IMap)axMapControl1.ActiveView);
axMapControl1.ActiveView.Refresh();
break;
}
spatialBookmark=enumSpatialBookmark.Next();
}
}
1.3.6.5运行结果
东华理工大学GIS程序设计实验二
二、实验二:
地图数据组织与访问
2.1实验目的
²了解ArcGISEngine中地图数据的组织结构
²掌握ArcGISEngine地图数据访问方法
2.2实验内容
²编写“数据操作”类
²利用DataGridView控件展示Continents图层的序号和名称字段
2.3实验步骤与结果
2.3.1添加控件
在程序的主窗体“空间数据”菜单项的下拉菜单中添加一个菜单项
2.3.2添加“数据展示台”窗体
在当前窗体代码下,添加代码
publicDataBoard(StringSDataName,DataTabledataTable)
{
//初始化窗体及控件。
InitializeComponent();
//设置文本框的文本和数据网格视图的数据源。
tbDataName.Text=SDataName;
dataGridView1.DataSource=dataTable;
}
2.3.3添加“数据操作”类
添加类库引用
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingESRI.ArcGIS.Carto;
usingESRI.ArcGIS.Geometry;
usingESRI.ArcGIS.Geodatabase;
usingESRI.ArcGIS.DataSourcesFile;
usingESRI.ArcGIS.Display;
publicclassDataOperator
{
//保存当前地图对象。
publicIMapm_map;
//用于传入当前地图对象。
publicDataOperator(IMapmap)
{
m_map=map;
}
2.3.4添加“获取地图图层”功能函数
向DataOperator类添加成员函数GetLayerByName,通过指定的函数名获取对应的图层对象,代码如下:
publicILayerGetLayerByName(StringsLayerName)
{//判断图层或地图对象是否为空。
若为空,函数返回空。
if(sLayerName==""||m_map==null)
{returnnull;
}
//对地图对象中所有图层进行遍历。
若某一图层的名称与指定图层名相同,
//回该图层。
for(inti=0;i { if(m_map.get_Layer(i).Name==sLayerName) { returnm_map.get_Layer(i); } //若地图对象中的所有图层名均与指定图层名不匹配,函数返回空。 returnnull; } 添加成员函数GetContinentsNames,获取地图中“Continents”图层,读取各个洲的名称,并以DataTable类型返回。 代码如下: publicDataTableGetContinentsNames() { //获取“Continents”图层,利用IFeatureLayer接口访问,并判断是否成功。 若失败, //函数返回空。 ILayerlayer=GetLayerByName("Continents"); IFeatureLayerfeatureLayer=layerasIFeatureLayer; if(featureLayer==null) { returnnull; } //调用IFeatureLayer接口的Seach方法,获取要素指针(IFeatureCursor)接口对象, //用于在之后遍历图层中的全部要素,并判断是否成功获取第一个要素。 若失败,函数返回空。 IFeaturefeature; IFeatureCursorfeatureCursor=featureLayer.Search(null,false); feature=featureCursor.NextFeature(); if(feature==null) { returnnull; } //新建DataTable类型,用于函数返回。 DataTabledataTable=newDataTable(); //新建DataColumn类型对象,分别保存各个大洲的序号和名称。 设置完毕后,加入DataTable的列集(Columns)中。 DataColumndataColumn=newDataColumn(); dataColumn.ColumnName="序号"; dataColumn.DataType=System.Type.GetType("System.Int32"); dataTable.Columns.Add(dataColumn); dataColumn=newDataColumn(); dataColumn.ColumnName="名称"; dataColumn.DataType=System.Type.GetType("System.String"); dataTable.Columns.Add(dataColumn); //对图层的要素进行遍历。 每获得一个要素,就关联DataTable的下一个DataRow,将要素在序号和字段上的值赋给DataRow //的对应列中。 在“Continets”图层属性表中,序号信息在第0个字段中,名称信息在第2个字段中。 相关内容可以通过ArcMap //对地图文档进行查看。 DataRowdataRow; while(feature! =null) { dataRow=dataTable.NewRow(); dataRow[0]=feature.get_Value(0); dataRow[1]=feature.get_Value (2); dataTable.Rows.Add(dataRow); feature=featureCursor.NextFeature(); } //返回设置好的数据表。 returndataTable; } 2.3.5实现创建地理数据列表功能 为主窗体的“访问图层数据”菜单项生成“点击”事件响应函数,并添加代码运行“数据展示台”窗体,以展示各个洲的名称。 代码如下: privatevoidmiAccessData_Click(objectsender,EventArgse) { //获取保存各个州的名称的DataTable,将其作为构造函数的参数,新建“数据展示台”窗体对象 DataOperatordataOperator=newDataOperator(axMapControl1.Map); DataBoarddataBoard=newDataBoard("各大洲州名", dataOperator.GetContinentsNames()); //运行载有数据的“数据展示台”窗体对象。 dataBoard.Show(); } 2.3.6运行结果 东华理工大学GIS程序设计实验三 三、实验三: 地图渲染与制图输出 3.1实验目的 ²了解地图符号的分类与可视化过程 ²掌握地图符号的渲染方法 3.2实验内容 ²编写“地图编制”类,添加成员函数 ²实现获取地图渲染器信息功能 ²实现地图的简单符号渲染 3.3实验步骤结果 3.3.1实现图层基本渲染 1.添加控件 编辑主窗体的代码,为该类导入ESRI.ArcGIS.Display类库。 usingESRI.ArcGIS.Display; 2.添加“地图编制”类 usingESRI.ArcGIS.Carto; usingESRI.ArcGIS.Geometry; usingESRI.ArcGIS.Display; usingESRI.ArcGIS.Output; usingESRI.ArcGIS.Geodatabase; 3.完善“地图编制”类的功能 向MapCompser类添加成员函数GetRendererType,用于获取指定图层的渲染器类型信息。 publicstaticStringGetRendererTypeByLayer(ILayerlayer) { //判断该图层是否获取成功。 若失败,函数返回“图层获取失败”。 if(layer==null) { return"图层获取失败"; } //获取IGeoFeatureLayer接口访问指定图层,并获取其渲染器。 IFeatureLayerfeatureLayer=layerasIFeatureLayer; IGeoFeatureLayergeoFeatureLayer=layerasIGeoFeatureLayer; IFeatureRendererfeatureRenderer=geoFeatureLayer.Renderer; //判断该图层渲染器是否为备选渲染器类型之一,如匹配成功返回其类型信息。 if(featureRendererisISimpleRenderer) { return"SimpleRenderer"; } elseif(featureRendererisIUniqueValueRenderer) { return"UniqueValueRenderer"; } elseif(featureRendererisIDotDensityRenderer) { return"DotDensityRenderer"; } elseif(featureRendererisIChartRenderer) { return"ChartRenderer"; } elseif(featureRendererisIProportionalSymbolRenderer) { return"ProportionalSymbolRenderer"; } elseif(featureRendererisIClassBreaksRenderer) { return"ClassBreaksRenderer"; } elseif(featureRendererisIBivariateRe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 二次开发 实验 报告