GIS二次开发实验报告.docx
- 文档编号:23288553
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:46
- 大小:426.52KB
GIS二次开发实验报告.docx
《GIS二次开发实验报告.docx》由会员分享,可在线阅读,更多相关《GIS二次开发实验报告.docx(46页珍藏版)》请在冰豆网上搜索。
GIS二次开发实验报告
GIS二次开发实验报告
学号:
姓名:
班级:
专业:
指导老师:
二零一五年11月15日
5实验五:
GIS分析..................................................................................................20
6实验六:
栅格数据处理............................................................................................25
1实验一:
软件安装与AOI书签开发
1.1实验目的
✧掌握AOI书签程序开发
1.2实验内容
✧实现AOI书签的创建
✧实现AOI书签的调用
1.3实验步骤与结果
安装程序后,新建地图显示项目。
在程序的主窗体上端添加添加菜单项,文本属性为创建书签,控件名为miCreateBookmark,在旁边添加组合框,控件名为cbBookmarkList。
1.右击引用选择AddArcGISReference在弹出的对话框中添加引用在主窗体(即MainForm.cs)中添加代码;
(1)首先添加引用代码:
usingESRI.ArcGIS.Display;
usingESRI.ArcGIS.esriSystem;
usingESRI.ArcGIS.Carto;
usingESRI.ArcGIS.Controls;
usingESRI.ArcGIS.ADF;
usingESRI.ArcGIS.SystemUI;
usingESRI.ArcGIS.Geometry;
usingESRI.ArcGIS.Geodatabase;
usingESRI.ArcGIS.DataSourcesFile;
usingESRI.ArcGIS.DataSourcesRaster;
(此引用代码都需添加引用后才可以使用,上述引用代码为本类中所需要的所有引用,在之后的编程中,可以不用重复引用)
(2)添加“创建书签”函数
在MainForm类中添加成员函数CreateBookMark,代码如下:
publicvoidCreateBookmark(stringsBookmarkName)//参数为书签名
{
//通过IAOIBookmark接口创建一个变量,其类型为AOIBookmark,用于保存当前地图的范围
IAOIBookmarkaoiBookmark=newAOIBookmarkClass();
if(aoiBookmark!
=null)
{
aoiBookmark.Location=axMapControl1.ActiveView.Extent;
aoiBookmark.Name=sBookmarkName;
}
//通过IMaoBookmarks接口访问当前地图,并向地图中加入新建书签
IMapBookmarksbookmarks=axMapControl1.MapasIMapBookmarks;
if(bookmarks!
=null)
{
bookmarks.AddBookmark(aoiBookmark);
}
//将新建书签名加入组合框中,用于之后调用对应书签
cbBookmarkList.Items.Add(aoiBookmark.Name);
}
2.添加“书签名成设置”窗体
(1)点击项目添加Windows窗体,该窗体命名为“AdmitBookmarkName.cs”,点击添加后,转入设计窗口。
(2)设置窗体的文本属性为“书签名称设置”,尺寸设置为“200,100”,初始位置设置为“CenterScreen”
(3)添加控件,添加一个文本框,控件名为“tbBookmarkName”。
一个按钮,文本属性为“确认”,控件名为“btnAdmit”
(4)双击“确认”按钮,自动生成点击事件响应函数,并转至窗体代码页。
3.添加成员变量m_frmMain,并为确认按钮输入代码,代码如下:
//用于保存主窗体对象
publicMainFormm_frmMain;
//用于传入主窗体对象
publicAdmitBookmarkName(MainFormfrm)
{
InitializeComponent();
if(frm!
=null)
{
m_frmMain=frm;
}
}
//"确认"按钮的“点击”事件响应函数,用于创建书签
privatevoidbtnAdmit_Click(objectsender,EventArgse)
{
if(m_frmMain!
=null||tbBookmarkName.Text=="")
{
m_frmMain.CreateBookmark(tbBookmarkName.Text);
}
this.Close();
}
4.为主窗体的“创建书签”菜单生成“点击”事件响应函数,代码如下:
AdmitBookmarkNamefrmABN=newAdmitBookmarkName(this);
frmABN.Show();
5.为组合框cb_BookmarkList生成“选择索引更改”事件响应函数,代码如下
//组合框的“选择索引更改”事件响应函数,用于在改变组合框所选项时地图范围变为其对应书签所保存的范围
privatevoidcbBookmarkList_SelectedInexChanged(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();
}
6.实验结果如下
2实验二:
地图数据组织与访问
2.1实验目的
✧了解ArcGISEngine中地图数据的组织结构
✧掌握ArcGISEngine地图数据访问方法
2.2实验内容
✧编写“数据操作”类
✧利用DataGridView控件展示Continents图层的序号和名称字段
2.3实验步骤与结果
1.添加“空间数据”菜单项,在下拉菜单中添加一个菜单项文本为“访问图层数据”名称为“miAccessData”,用于稍后调用“数据展示台”窗体。
2.新建窗体类,窗体文件命名为“DataBoard.cs”文本属性为“数据展示台”。
添加一个文本框,控件名为“tbDataName”,一个数据网格视图,控件名为“dataGridView1”,ReadOnly=true。
如图所示
3.在当前窗体代码中加入以下代码
publicDataBoard(StringsDataName,DataTabledataTable)
{
//初始化窗体及控件
InitializeComponent();
//设置文本框中的文本和数据网格视图的数据源
tbDataName.Text=sDataName;
dataGridView1.DataSource=dataTable;
}
4.添加类,命名为“DataOPerator.cs”并导入类库引用
usingSystem.Data;
usingESRI.ArcGIS.Carto;
usingESRI.ArcGIS.Geometry;
usingESRI.ArcGIS.Geodatabase;
usingESRI.ArcGIS.DataSourcesFile;
5.添加以下代码
//保存当前地图对象
publicIMapm_map;
//用于传入当前地图对象
publicDataOperator(IMapmap)
{
m_map=map;
}
6.添加“获取地图图层”功能函数。
代码如下
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; } 7.添加成员函数GetContinentsNames代码如下 publicDataTableGetContinentsName() { //获取“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的对应列中。 在"ContInents"图层属性表中,序号信息在第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; } 8.添加“访问图层数据”菜单“点击”事件响应函数,代码如下 privatevoidmiAccessData_Click(objectsender,EventArgse) { //获取保存各个州名称的DataTable,将其作为构造函数的参数,新建“数据展示台”窗体对象 DataOperatordataOperator=newDataOperator(axMapControl1.Map); DataBoarddataBoard=newDataBoard( "各大洲洲名", dataOperator.GetContinentsName()); //运行载有数据的“数据展示台”窗体对象。 dataBoard.Show(); } 9.实验结果如下 3实验三: 地图渲染与制图输出 3.1实验目的 ✧了解地图符号的分类与可视化过程 ✧掌握地图符号的渲染方法 3.2实验内容 ✧编写“地图编制”类,添加成员函数 ✧实现获取地图渲染器信息功能 ✧实现地图的简单符号渲染 3.3实验步骤结果 1.添加一个主窗体菜单控件,控件名为“miCarto”,文本属性为“地图表现”,添加两个下拉菜单项文本属性分别为“简单渲染图层”和“获取渲染器信息”,控件名分别为“miRenderSimple”和“miGetRenderInfo” 2.添加类库引用 3.添加“地图编制”类命名为“MapComposer.cs”,添加类库引用。 添加成员函数,代码如下; 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(featureRendererisIRepresentationRenderer) { return"RepresentationRenderer"; } elseif(featureRendererisIClassBreaksRenderer) { return"ClassBreaksRenderer"; } elseif(featureRendererisIBivariateRenderer) { return"BivariateRenderer"; } //若渲染器类型匹配失败,则返回“未知或渲染器获取失败”。 return"未知或渲染器获取失败"; } //添加静态成员函数GetRendererType,用于获取指定图层的符号信息。 publicstaticISymbolGetSymbolFromLayer(ILayerlayer) { //判断图层是否获取成功。 若失败,函数返回空。 if(layer==null) { returnnull; } //利用IFeatureLayer接口访问指定图层,获取到图层中的第一个要素,判断是否成功。 富哦失败,函数返回空。 IFeatureLayerfeatureLayer=layerasIFeatureLayer; IFeatureCursorfeatureCursor=featureLayer.Search(null,false); IFeaturefeature=featureCursor.NextFeature(); if(feature==null) { returnnull; } //利用IGeoFeatureLayer访问指定图层,获取其渲染器,并判断是否成功。 否则失败,函数返回空。 IGeoFeatureLayergeoFeatureLayer=featureLayerasIGeoFeatureLayer; IFeatureRendererfeatureRenderer=geoFeatureLayer.Renderer; if(featureRenderer==null) { returnnull; } //通过IFeatureRenderer接口的方法获取图层要素对应的符号信息,并作为函数结果返回。 ISymbolsymbol=featureRenderer.get_SymbolByFeature(feature); returnsymbol; } //添加静态成员函数RenderSimply,用于统一设置指定图层的颜色,并进行简单渲染。 publicstaticboolRenderSimply(ILayerlayer,IColorcolor) { //判断图层和颜色是否获取成功。 若失败,函数返回false. if(layer==null||color==null) { returnfalse; } //调用GetSymbolFromLayer成员函数,获取指定图层的符号,并判断是否成功。 若失败,函数返回false。 ISymbolsymbol=GetSymbolFromLayer(layer); if(symbol==null) { returnfalse; } //获取指定图层的要素类,并判断是否成功。 若失败,函数返回false。 IFeatureLayerfeatureLayer=layerasIFeatureLayer; IFeatureClassfeatureClass=featureLayer.FeatureClass; if(featureClass==null) { returnfalse; } //获取指定图层要素类的几何形状信息,并进行匹配。 根据不同相撞,设置不同类型符号的颜色。 若几何形状不属于 //Point、MultiPoint、PolyLine和Polygon,则函数返回false。 esriGeometryTypegeoType=featureClass.ShapeType; switch(geoType) { caseesriGeometryType.esriGeometryPoint: { IMarkerSymbolmarkerSymbol=symbolasIMarkerSymbol; markerSymbol.Color=color; break; } caseesriGeometryType.esriGeometryMultipoint: { IMarkerSymbolmarkerSymbol=symbolasIMarkerSymbol; markerSymbol.Color=color; break; } caseesriGeometryType.esriGeometryPolyline: { ISimpleLineSymbolsimpleLineSymbol=symbolasISimpleLineSymbol; simpleLineSymbol.Color=color; break; } caseesriGeometryType.esriGeometryPolygon: { IFillSymbolfillSymbol=symbolasIFillSymbol; fillSymbol.Color=color; break; } default: returnfalse; } //新建简单渲染器对象,设置其符号。 通过IFeatureRenderer接口访问它,并判断是否成功。 若失败,函数返回false。 ISimpleRenderersimpleRenderer=newSimpleRendererClass(); simpleRenderer.Symbol
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 二次开发 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)