GIS二次开发B实验报告.docx
- 文档编号:8769676
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:1.01MB
GIS二次开发B实验报告.docx
《GIS二次开发B实验报告.docx》由会员分享,可在线阅读,更多相关《GIS二次开发B实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
GIS二次开发B实验报告
GIS二次开发(B)实验报告
二〇一五年11月3日
目录
1实验一:
AOI书签开发1
1.1实验目的1
1.2实验内容1
1.3实验步骤与结果1
2实验二:
地图数据组织与访问8
2.1实验目的8
2.2实验内容8
2.3实验步骤与结果8
3实验三:
地图渲染与制图输出16
3.1实验目的16
3.2实验内容16
3.3实验步骤结果16
4实验总结23
1实验一:
AOI书签开发
1.1实验目的
✧掌握AOI书签程序开发
1.2实验内容
✧实现AOI书签的创建
✧实现AOI书签的调用
1.3实验步骤与结果
publicvoidcreatebookmark(stringsbookmarkname)//参数为书签名
{
//通过iaolbookmark接口创建一个变量,其类型为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);
}
}
}
namespacexy
{
publicpartialclassAdmitBookmarkName:
Form
{
publicMainFormm_frmMain;
publicAdmitBookmarkName()
{
InitializeComponent();
}
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();
}
}
}
2实验二:
地图数据组织与访问
2.1实验目的
✧了解ArcGISEngine中地图数据的组织结构
✧掌握ArcGISEngine地图数据访问方法
2.2实验内容
✧编写“数据操作”类
✧利用DataGridView控件展示Continents图层的序号和名称字段
2.3实验步骤与结果
初始化窗口
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceMapControlApplication1
{
publicpartialclassDataboard:
Form
{
publicDataboard()
{
InitializeComponent();
}
publicDataboard(stringsDataName,DataTabledataTable)
{
//初始化窗体及控件。
InitializeComponent();
//设置文本框中的文本和数据网格视图的数据源。
tbDataName.Text=sDataName;
dataGridView1.DataSource=dataTable;
}
privatevoidDataboard_Load(objectsender,EventArgse)
{
}
privatevoiddataGridView1_CellContentClick(objectsender,DataGridViewCellEventArgse)
{
}
}
}
引用一个各种类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingESRI.ArcGIS.Carto;
usingESRI.ArcGIS.Geometry;
usingESRI.ArcGIS.Geodatabase;
usingESRI.ArcGIS.DataSourcesFile;
namespaceMapControlApplication1
{
classDataOperator
{
//保存当前地图对象
publicIMapm_map;
//用于传入当前地图对象
publicDataOperator(IMapmap)
{
m_map=map;
}
publicILayerGetLaybyName(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; } publicDataTableGetContinentsNames() { //获取Continents图层,利用IFeatureLayer接口访问,并判断是否成功,若失败函数返回空 ILayerlayer=GetLaybyName("Continents"); IFeatureLayerfeatureLayer=layerasIFeatureLayer; if(featureLayer==null) { returnnull; } //调用IFeatureLayer接口的seach方法,获取是否成功获取第一个要素。 若失败,函数返回空。 IFeaturefeature; IFeatureCursorfeatureCursor=featureLayer.Search(null,false); feature=featureCursor.NextFeature(); if(feature==null) { returnnull; } //新建DataTable类型对象,用于函数返回。 DataTabledataTable=newDataTable(); //新建DataColumn类型对象,分别保存各个州的序号的名称。 设置完毕后,加入datatable的列集合 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, 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; } } } 在主窗体中加入代码,并运行 privatevoidmiAccessData_Click(objectsender,EventArgse) { DataOperatordataOperator=newDataOperator(axMapControl1.Map); DataboarddataBord=newDataboard("各大洲名",dataOperator.GetContinentsNames()); //运行载有数据的“数据展示台”窗体对象。 dataBord.Show(); } 3实验三: 地图渲染与制图输出 3.1实验目的 ✧了解地图符号的分类与可视化过程 ✧掌握地图符号的渲染方法 3.2实验内容 ✧编写“地图编制”类,添加成员函数 ✧实现获取地图渲染器信息功能 ✧实现地图的简单符号渲染 3.3实验步骤结果 C#Code private void 简单渲染图层ToolStripMenuItem1_Click(object sender, EventArgs e) { dataoperator dataOperator = new dataoperator(axMapControl1.Map); ILayer layer = dataOperator.getlayerbyname("World Cities"); IRgbColor rgbColor = new RgbColorClass(); rgbColor.Blue = 0; rgbColor.Red = 255; rgbColor.Green = 0; IColor color = rgbColor as IColor; ISymbol symbol = MapComposer.getsymbolfromlayer(layer); bool res = MapComposer.RenderSimply(layer, color); if(res) { axMapControl1.ActiveView.ContentsChanged(); axMapControl1.ActiveView.Refresh(); 简单渲染图层ToolStripMenuItem.Enabled = false; } else { MessageBox.Show("简单渲染图层失败"); } } ●主窗体新建渲染图层菜单,并新建子菜单 C#Code private void 获取渲染器信息ToolStripMenuItem_Click(object sender, EventArgs e) { dataoperator dataOperator = new dataoperator(axMapControl1.Map); ILayer layer = dataOperator.getlayerbyname("World Cities"); MessageBox.Show(MapComposer.getrendertypebylayer(layer)); } 新建MapComposer类并输入以下代码 C#Code using System; using System.Collections.Generic; using System.Linq; using System.Text; 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.Display; using ESRI.ArcGIS.Geodatabase; namespace MapControlApplication1 { class MapComposer { public static string getrendertypebylayer(ILayer layer) { if(layer == null) return "获取失败"; IFeatureLayer ftly = (IFeatureLayer)layer; IGeoFeatureLayer gftly = (IGeoFeatureLayer)layer; IFeatureRenderer ftren = gftly.Renderer; if(ftren is ISimpleRenderer) return "ISimpleRenderer"; else if(ftren is IUniqueValueRenderer) return "IUniqueValueRenderer"; else if(ftren is IDotDensityRenderer) return "IDotDensityRenderer"; else if(ftren is IChartRenderer) return "IChartRenderer"; else if(ftren is IProportionalSymbolRenderer) return "IProportionalSymbolRenderer"; return "未知或者获取渲染器失败"; } public static ISymbol getsymbolfromlayer(ILayer layer) { if(layer == null) return null; IFeatureLayer ftly = (IFeatureLayer)layer; IFeatureCursor ftcs = ftly.Search(null, false); IFeature ft = ftcs.NextFeature(); if(ft == null) return null; IGeoFeatureLayer gftly = ftly as IGeoFeatureLayer; IFeatureRenderer ftren = gftly.Renderer; if(ftren == null) return null; ISymbol syb = ftren.get_SymbolByFeature(ft); return syb; } public static bool RenderSimply(ILayer layer, IColor color) { if(layer == null || color == null) return false; ISymbol symbol = getsymbolfromlayer(layer); if(symbol == null) return false; IFeatureLayer featureLayer = layer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; if(featureClass == null) return false; esriGeometryType geoType = featureClass.ShapeType; switch(geoType) { case esriGeometryType.esriGeometryPoint: { IMarkerSymbol markerSymbol = symbol as IMarkerSymbol; markerSymbol.Color = color; break; } case esriGeometryType.esriGeometryMultipoint: { IMarkerSymbol markerSymbol = symbol as IMarkerSymbol; break; } case esriGeometryType.esriGeometryPolyline: { ISimpleLineSymbol simpleLineSymbol = symbol as ISimpleLineSymbol; simpleLineSymbol.Color = color; break; } case esriGeometryType.esriGeometryPolygon: { IFillSymbol fillSymbol = symbol as IFillSymbol; fillSymbol.Color = color; break; } default: return false; } ISimpleRenderer simpleRenderer = new SimpleRendererClass(); simpleRenderer.Symbol = symbol; IFeatureRenderer featureRenderer = simpleRenderer as IFeatureRenderer; if(featureRenderer == null) return false; IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer; geoFeatureLayer.Renderer = featureRenderer; return true; } } } ●运行“获取渲染器信息” ●运行“简单渲染器渲染” 4实验总结 通过这次实习,我学到了很多知识,那是在课堂上无法学到的东西。 在我看来,理论知识固然重要,但是若不经过实践,那学得理论知识几乎等于白费。 虽然实习过程是辛苦的,但确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 二次开发 实验 报告