GIS二次开发B实验报告Word下载.docx
《GIS二次开发B实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《GIS二次开发B实验报告Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
aoibookmark.Location=axMapControl1.ActiveView.Extent;
aoibookmark.Name=sbookmarkname;
}
//通过imapbookmarks接口访问当前地图,并向地图中加入新建书签
IMapBookmarksbookmarks=axMapControl1.MapasIMapBookmarks;
if(bookmarks!
bookmarks.AddBookmark(aoibookmark);
cbbookmarklist.Items.Add(aoibookmark.Name);
}
namespacexy
{
publicpartialclassAdmitBookmarkName:
Form
{
publicMainFormm_frmMain;
publicAdmitBookmarkName()
InitializeComponent();
publicAdmitBookmarkName(MainFormfrm)
if(frm!
m_frmMain=frm;
//“确认”按钮的“点击”事件响应函数,用于创建书签
privatevoidbtnAdmit_Click(objectsender,EventArgse)
if(m_frmMain!
=null&
&
tbBookmarkName.Text=="
"
)
m_frmMain.createbookmark(tbBookmarkName.Text);
this.Close();
地图数据组织与访问
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:
publicDataboard()
InitializeComponent();
publicDataboard(stringsDataName,DataTabledataTable)
//初始化窗体及控件。
//设置文本框中的文本和数据网格视图的数据源。
tbDataName.Text=sDataName;
dataGridView1.DataSource=dataTable;
privatevoidDataboard_Load(objectsender,EventArgse)
privatevoiddataGridView1_CellContentClick(objectsender,DataGridViewCellEventArgse)
引用一个各种类
usingESRI.ArcGIS.Carto;
usingESRI.ArcGIS.Geometry;
usingESRI.ArcGIS.Geodatabase;
usingESRI.ArcGIS.DataSourcesFile;
classDataOperator
//保存当前地图对象
publicIMapm_map;
//用于传入当前地图对象
publicDataOperator(IMapmap)
m_map=map;
publicILayerGetLaybyName(stringsLayerName)
//判断图层名或地图对象是否为空。
若为空,函数返回空。
if(sLayerName=="
m_map==null)
returnnull;
//对地图对象中的所有图层进行遍历。
若某一图层的名称与指定图层名相同,则返//回图层。
for(inti=0;
i<
m_map.LayerCount;
i++)
if(m_map.get_Layer(i).Name==sLayerName)
returnm_map.get_Layer(i);
//若地图对象中的所有图层名均与指定图层名不匹配,函数返回值为空。
publicDataTableGetContinentsNames()
//获取Continents图层,利用IFeatureLayer接口访问,并判断是否成功,若失败函数返回空
ILayerlayer=GetLaybyName("
Continents"
);
IFeatureLayerfeatureLayer=layerasIFeatureLayer;
if(featureLayer==null)
//调用IFeatureLayer接口的seach方法,获取是否成功获取第一个要素。
若失败,函数返回空。
IFeaturefeature;
IFeatureCursorfeatureCursor=featureLayer.Search(null,false);
feature=featureCursor.NextFeature();
if(feature==null)
//新建DataTable类型对象,用于函数返回。
DataTabledataTable=newDataTable();
//新建DataColumn类型对象,分别保存各个州的序号的名称。
设置完毕后,加入datatable的列集合
DataColumndataColumn=newDataColumn();
dataColumn.ColumnName="
序号"
;
dataColumn.DataType=System.Type.GetType("
System.Int32"
dataTable.Columns.Add(dataColumn);
dataColumn=newDataColumn();
dataColumn.ColumnName="
名称"
System.String"
//对图层中的要素进行遍历。
每获取一个要素,就关联datatable的下一个datarow,
DataRowdataRow;
while(feature!
dataRow=dataTable.NewRow();
dataRow[0]=feature.get_Value(0);
dataRow[1]=feature.get_Value
(2);
dataTable.Rows.Add(dataRow);
//返回设置好的数据表。
returndataTable;
在主窗体中加入代码,并运行
privatevoidmiAccessData_Click(objectsender,EventArgse)
DataOperatordataOperator=newDataOperator(axMapControl1.Map);
DataboarddataBord=newDataboard("
各大洲名"
dataOperator.GetContinentsNames());
//运行载有数据的“数据展示台”窗体对象。
dataBord.Show();
地图渲染与制图输出
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
RgbColorClass();
rgbColor.Blue
0;
rgbColor.Red
255;
rgbColor.Green
IColor
color
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("
简单渲染图层失败"
●主窗体新建渲染图层菜单,并新建子菜单
获取渲染器信息ToolStripMenuItem_Click(object
MessageBox.Show(MapComposer.getrendertypebylayer(layer));
新建MapComposer类并输入以下代码
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
ESRI.ArcGIS.esriSystem;
ESRI.ArcGIS.Carto;
ESRI.ArcGIS.Controls;
ESRI.ArcGIS.ADF;
ESRI.ArcGIS.SystemUI;
ESRI.ArcGIS.Geometry;
ESRI.ArcGIS.Display;
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)
ISimpleRenderer"
else
IUniqueValueRenderer)
IUniqueValueRenderer"
IDotDensityRenderer)
IDotDensityRenderer"
IChartRenderer)
IChartRenderer"
IProportionalSymbolRenderer)
IProportionalSymbolRenderer"
未知或者获取渲染器失败"
getsymbolfromlayer(ILayer
null;
IFeatureCursor
ftcs
ftly.Search(null,
false);
IFeature
ft
ftcs.NextFeature();
if(ft
IGeoFeatureLayer;
syb
ftren.get_SymbolByFeature(ft);
syb;
RenderSimply(ILayer
layer,
color)
null
||
getsymbolfromlayer(layer);
if(symbol
featureLayer
IFeatureLayer;
IFeatureClass
featureClass
featureLayer.FeatureClass;
if(featureClass
esriGeometryType
geoType
featureClass.ShapeType;
switch(geoType)
case
esriGeometryType.esriGeometryPoint:
IMarkerSymbol
markerSymbol
IMarkerSymbol;
markerSymbol.Color
color;
break;
esriGeometryType.esriGeometryMultipoint:
esriGeometryType.esriGeometryPolyline:
ISimpleLineSymbol
simpleLineSymbol
=
ISimpleLineSymbol;
simpleLineSymbol.Color
esriGeometryType.esriGeometryPolygon:
IFillSymbol
fillSymbol
IFillSymbol;
fillSymbol.Color
default:
ISimpleRenderer
simpleRenderer
SimpleRendererClass();
simpleRenderer.Symbol
symbol;
featureRenderer
IFeatureRenderer;
if(featureRenderer
geoFeatureLayer
=
geoFeatureLayer.Renderer
featureRenderer;
true;
●运行“获取渲染器信息”
●运行“简单渲染器渲染”
4实验总结
通过这次实习,我学到了很多知识,那是在课堂上无法学到的东西。
在我看来,理论知识固然重要,但是若不经过实践,那学得理论知识几乎等于白费。
虽然实习过程是辛苦的,但确