20林淑娟 GIS开发实验四.docx

上传人:b****6 文档编号:5812451 上传时间:2023-01-01 格式:DOCX 页数:23 大小:1.37MB
下载 相关 举报
20林淑娟 GIS开发实验四.docx_第1页
第1页 / 共23页
20林淑娟 GIS开发实验四.docx_第2页
第2页 / 共23页
20林淑娟 GIS开发实验四.docx_第3页
第3页 / 共23页
20林淑娟 GIS开发实验四.docx_第4页
第4页 / 共23页
20林淑娟 GIS开发实验四.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

20林淑娟 GIS开发实验四.docx

《20林淑娟 GIS开发实验四.docx》由会员分享,可在线阅读,更多相关《20林淑娟 GIS开发实验四.docx(23页珍藏版)》请在冰豆网上搜索。

20林淑娟 GIS开发实验四.docx

20林淑娟GIS开发实验四

《GIS开发与应用》实验报告

实验序号:

 4实验项目名称:

图层符号化

学  号

1420012120

姓  名

林淑娟

专业、班

14空间

实验地点

7#216

指导教师

花利忠

实验时间

2016.10.25

一、实验目的

1.1熟悉ArcEngine符号化之Color(颜色)体系,掌握IRGBColor接口用法

(Esri.ArcGIS.Carto)。

1.2熟悉ArcEngine符号化之Symbol(符号)体系,掌握ISimpleMarkSymbol,

ISimpleLineSymbol,ISimpleFillSymbol的用法和了解

IDotDensityFillSymbol(Esri.ArcGIS.Carto)。

1.3熟悉ArcEngine符号化之Renderer(渲染)体系,掌握简单渲染渲染方法,了解点密度渲染方法。

(Esri.ArcGIS.Display)。

二、实验设备(环境)及要求

2.1VisualStudio2010;

2.2ArcGISEngineDeveloperkit10.1

2.3实验数据:

Shapefile数据:

省级行政区.shp,省会城市.shp,主要公路.shp

三、实验内容与步骤

3.1添加菜单项

在设计视图中,菜单栏“请在此处键入”的提示,键入菜单项名称”专题图制作”,再单击“专题图制作”,输入其下拉子菜单,分别添加DrawMarkerSymbol(menuDrawMarkerSymbol),DrawLineSymbol(menuDrawLineSymbol),,DrawPolygon

Symbol(menuDrawPolygonSymbol),简单渲染(menuSimpleRenderer)、点密度渲染(menuDotDensityRenderer)和单值渲染(menuUniqueValueRenderer),()内为相应的Name属性值。

图1菜单栏

3.2设置地图页面左键点击效果

在地图控件鼠标左键点击事件中加入以下代码:

if(e.button==1)

{

switch(Flag)

{

case1:

case2:

case3:

case4:

case5:

case6:

}

在声明Flag变量之后,为每一个菜单栏点击事件赋值相应的值,如下:

privatevoiddrawMarkerSymbolToolStripMenuItem_Click_1(objectsender,EventArgse)

{

Flag=1;

}

privatevoiddrawLineSymbolToolStripMenuItem_Click(objectsender,EventArgse)

{

Flag=2;

}

privatevoiddrawPolygonToolStripMenuItem_Click(objectsender,EventArgse)

{

Flag=3;

}

privatevoid简单渲染ToolStripMenuItem_Click(objectsender,EventArgse)

{

Flag=4;

}

privatevoid点密度渲染ToolStripMenuItem_Click(objectsender,EventArgse)

{

Flag=5;

}

privatevoid单值渲染ToolStripMenuItem_Click_1(objectsender,EventArgse)

{

Flag=6;

}

3.3Drawmarkersymbol(画点)

代码实现如下:

3.4DrawLinesymbol(画线)

代码实现如下:

3.5DrawPolygonSymbol(画面)

代码实现如下:

3.6SimpleRenderer简单渲染

简单渲染实现流程:

1)产生一个SimpleRenderer对象(new方法)

2)获取地图中的渲染图层;

3)设置渲染对象的符号:

对于简单渲染设置SimpleRenderer对象的Symbol属性;

根据渲染图层的要素类的要素的几何类型,Symbol属性的设置分点,线和面三种情况分别进行:

要素类中要素的几何类型为面要素类(esriGeometryType.esriGeometryPolygon)时,设置填充符号:

颜色,样式和边线(边线符号设置:

样式与宽度);

²要素类中要素的几何类型为点要素类(esriGeometryType.esriGeometryPoint)时,设置点符号:

颜色,大小和样式;

²要素类中要素的几何类型为线要素类(esriGeometryType.esriGeometryLine)时,设置线符号:

颜色,样式和宽度;

4)把SimpleRenderer对象赋值给该渲染图层,IGeoFeaturelayer:

:

Renderer属性,

pGeoFeatureLayer.Renderer=pSimpleRendererasIFeatureRenderer;

5)刷新要素图层;

axMapControl1.Refresh();

axTOCControl1.Update();

因为渲染实现代码有点繁杂所以用一个方法代替:

点的前后渲染结果截图:

图2点渲染前

图3点渲染后

线的前后渲染结果截图:

图4线渲染前

图5线渲染后

面的前后渲染结果截图:

图6面渲染前

图7面渲染后

因为只能对单个图层进行渲染,所以采用for循环对所有图层进行渲染:

图8全部渲染图1

但是实验结果发现不管点还是线全部都被渲染成最后一个图层面的样式,这是因为进行循环时没有对ISimpleRenderer生成新的实例,需要对每一次新的渲染进行生成新的渲染对象实例;

最后具体方法实现如下:

实验结果截图如下:

图9全部渲染图2

发现点在最上层却没有显示出来,经分析是点跟线的颜色大小一样给重合了,重新设置符号样式后:

图10全部渲染图3

可以看到点清晰的显示出来,但是又发现线的样式和面的边框一样,对此进行了测试,首先进行单个线图层的显示:

图11线图层渲染比较图

单个线图层显示成功,接着进行线面渲染:

图12符号增强显示

线面结合也是成功显示线的颜色的,最后进行线面结合渲染,发现是面渲染导致的线渲染无效:

图13线面图层结合渲染图

3.7DotDensityRenderer点密度渲染

点密度渲染实现流程:

1)首先产生一个DotDensityRenderer对象;(new方法)

2)IRendererFields接口的AddField方法设置点密度渲染的字段;

3)设置渲染符号:

对于点密度渲染设置DotDensityRenderer对象的DotDensityFillSymbol

属性:

这是非常重要的一步,分三步实现:

a.设置点密度面状填充符号:

填充点的大小DotSize和填充背景BackgroundColor;

b.填充点的颜色和样式(通过点符号设置,如采用ISimpleMarkerSymbol接口);

c.采用ISymbolArray接口的AddSymbol方法把填充点符号添加到符号数组中;

4)设置渲染密度,如每个点代表800,pDotDensityRenderer.DotValue=800;

5)创建点密度图渲图例pDotDensityRenderer.CreateLegend();

6)获取地图中的渲染图层,进行图层渲染;

把DotDensityRenderer对象赋值给IGeoFeaturelayer:

:

Renderer属性;

pGeoFeatureLayer.Renderer=pDotDensityRendererasIFeatureRenderer;

8)刷新要素图层;

axMapControl1.Refresh();

axTOCControl1.Update();

实现代码如下:

实验结果如下:

图14点密度渲染图1

但是放大点就不显示,可能与比例尺有关,将符号放大由0.5到5之后可清晰显示:

局部图:

图15点密度渲染图(局部)

全局图:

图16点密度渲染图(全局)

将字段改为人口密度,DotValue为500时,从而得到人口密度渲染图:

图17人口密度渲染图(值为500)

将DotValue的值由500改为1000之后明显变少:

图18人口密度渲染图(值为1000)

3.7UniqueValueRenderer唯一值渲染

实现思路:

首先产生一个UniqueValueRenderer对象;寻找出要素图层中某一要素类(如中国)给定字段(如省)的所有要素值,并且匹配相应的渲染符号;其次使用IUniqueValueRenderer:

:

AddValue方法将单个要素的某个字段值和与之相匹配的渲染符号加入将单个要素的某个字段值和与之相匹配的渲染符号加入UniqueValueRenderer对象;最后再将新建的渲染对象赋给要素图层的Renderer属性,刷新要素图层。

实现代码如下:

3.8符号选择器的实现

在TOCControl控件的双击事件中,加入如下代码:

四、实验结果与数据处理

1)实现功能效果截图:

画点:

图19点结果图

画线:

图20线结果图

画面:

图21面结果图

简单渲染:

图22简单渲染结果图

点密度渲染:

图23点密度渲染图

单值渲染:

图24单值渲染图

弹出ArcGis自带符号选择器:

图25调用符号选择器

2)本试验中各个接口所属的命名空间,与试验中接口的主要属性和方法:

接口

命名空间

主要属性

方法

IPoint

ESRI.ArcGIS.Geometry

PutCoords()

IGeometry

ESRI.ArcGIS.Geometry

TrackLine()、TrackPolygon

()

ISimpleMarkerSymbol

ESRI.ArcGIS.Display

Color、Size、Style

ISimpleLineSymbol

ESRI.ArcGIS.Display

Color、Width、Style

ISimpleFillSymbol

ESRI.ArcGIS.Display

Color、Style

esriSimpleLineStyle

ESRI.ArcGIS.Display

esriSLSDashDotDot

esriSimpleMarkerStyle

ESRI.ArcGIS.Display

esriSMSDiamond

IDotDensityRenderer

IRendererFields

IGeoFeatureLayer

ESRI.ArcGIS.Carto

DotSize、

Color

五、分析与讨论

通过本次实验,我学会了利用visualstudio2010和arcgisengine来实现画点、画线、画面、简单渲染、点密度渲染、单值渲染和调用ArcGis自带符号选择器等一些较高级功能。

但在实验过程中也遇到一些问题,如:

①引用不成功,需自己添加引用;

图26引用接口

②注意IDotDensityRenderer 和DotDensityRenderer不同;③实现的思路基本要搞懂,才能下手去写代码,不能盲目地去写,不然只会事半功倍;④实验中还未解决的问题是,线图层和面图层共同渲染的时候,会把线样式渲染成面边框的样式。

至此,我已经能够吸取教训,将遇到的基本错误改正过来,从中获得了很多变成编程经验,并对GIS开发产生越来越浓厚的兴趣!

六、教师评语

 

签名:

日期:

成绩:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1