GIS二次开发实验报告

return dataTable; }

8.添加“访问图层数据”菜单“点击”事件响应函数,代码如下 private void miAccessData_Click(object sender, EventArgs e) {

//获取保存各个州名称的DataTable,将其作为构造函数的参数,新建“数据展示台”窗体对象

DataOperator dataOperator = new DataOperator(axMapControl1.Map);

DataBoard dataBoard = new DataBoard( \各大洲洲名\

dataOperator.GetContinentsName()); //运行载有数据的“数据展示台”窗体对象。 dataBoard.Show(); }

9.实验结果如下

8

3 实验三:地图渲染与制图输出

3.1 实验目的

? 了解地图符号的分类与可视化过程 ? 掌握地图符号的渲染方法

3.2 实验内容

? 编写“地图编制”类,添加成员函数 ? 实现获取地图渲染器信息功能 ? 实现地图的简单符号渲染

3.3 实验步骤结果

1.添加一个主窗体菜单控件,控件名为“miCarto”,文本属性为“地图表现”,添加两个下拉菜单项文本属性分别为“简单渲染图层”和“获取渲染器信息”,控件名分别为“miRenderSimple”和“miGetRenderInfo” 2.添加类库引用

3.添加“地图编制”类命名为“MapComposer.cs”,添加类库引用。添加成员函数,代码如下;

public static String GetRendererTypeByLayer(ILayer layer) {

//判断图层是否获取成功。若失败,函数返回“图层失败” if (layer == null) {

return \图层获取失败\ }

//使用IGeoFeatureLayer接口访问指定图层,并获取其渲染器。 IFeatureLayer featureLayer = layer as IFeatureLayer;

IGeoFeatureLayer geoFeatureLayer = layer as IGeoFeatureLayer; IFeatureRenderer featureRenderer = geoFeatureLayer.Renderer;

//判断该图层渲染器是否为备选渲染器类型之一,如匹配成功返回其类型信息。 if (featureRenderer is ISimpleRenderer) {

9

return \ }

else if (featureRenderer is IUniqueValueRenderer) {

return \ }

else if (featureRenderer is IDotDensityRenderer) {

return \ }

else if (featureRenderer is IChartRenderer) {

return\ }

else if (featureRenderer is IProportionalSymbolRenderer) {

return \ }

else if (featureRenderer is IRepresentationRenderer) {

return \ }

else if (featureRenderer is IClassBreaksRenderer) {

return \ }

else if (featureRenderer is IBivariateRenderer) {

return \ }

//若渲染器类型匹配失败,则返回“未知或渲染器获取失败”。 return \未知或渲染器获取失败\ }

//添加静态成员函数GetRendererType,用于获取指定图层的符号信息。 public static ISymbol GetSymbolFromLayer(ILayer layer) {

//判断图层是否获取成功。若失败,函数返回空。 if (layer == null) {

return null; }

// 利用IFeatureLayer接口访问指定图层,获取到图层中的第一个要素,判断是否成功。富哦失败,函数返回空。

IFeatureLayer featureLayer = layer as IFeatureLayer;

10

IFeatureCursor featureCursor = featureLayer.Search(null, false); IFeature feature = featureCursor.NextFeature(); if (feature == null) {

return null; }

//利用IGeoFeatureLayer访问指定图层,获取其渲染器,并判断是否成功。否则失败,函数返回空。

IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer; IFeatureRenderer featureRenderer = geoFeatureLayer.Renderer; if (featureRenderer == null) {

return null; }

//通过IFeatureRenderer接口的方法获取图层要素对应的符号信息,并作为函数结果返回。

ISymbol symbol = featureRenderer.get_SymbolByFeature(feature); return symbol; }

//添加静态成员函数RenderSimply,用于统一设置指定图层的颜色,并进行简单渲染。

public static bool RenderSimply(ILayer layer, IColor color) {

//判断图层和颜色是否获取成功。若失败,函数返回false. if (layer == null || color == null) {

return false; }

//调用GetSymbolFromLayer成员函数,获取指定图层的符号,并判断是否成功。若失败,函数返回false。

ISymbol symbol = GetSymbolFromLayer(layer); if (symbol == null) {

return false; }

//获取指定图层的要素类,并判断是否成功。若失败,函数返回false。 IFeatureLayer featureLayer = layer as IFeatureLayer; IFeatureClass featureClass = featureLayer.FeatureClass; if (featureClass == null) {

return false; }

11

联系客服:779662525#qq.com(#替换为@)