[转] ArcEngine 产生专题图

简介:

小生原文 ArcEngine 产生专题图

ArcEngine提供多个着色对象用于产生专题图,可以使用标准着色方案,也可以自定义着色方案,ArcEngine提供8中标准着色方案。

一、SimpleRenderer专题图

是使用单一符号进行着色分类,不涉及对要素的数据进行处理。这种专题图同一个图层内的所有元素都是一种符号。

通过SimpleRenderer对象对Symbol进行设置后,赋予IGeoFeatureLayer接口的Renderer属性,对象实现了ITransparencyRenerer接口,通过该接口的属性,可以根据要素的某一个数值字段来设置要素显示的透明度。

该对象还实现了ISimpleRenderer接口,提供了两个重要的属性:Description和Label这两个属性用来设置图例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/// <summary>
         /// 简单渲染
         /// </summary>
         /// <param name="layerName">图层名字</param>
         /// <param name="FillStyle">FillStyle</param>
         /// <param name="pColor">FillColor</param>
         /// <param name="OutLineColor">OutLineColor</param>
         /// <param name="RenderLabel">样式名称注释</param>
         /// <param name="Descripition">描述</param>
         public  void  createSimpleFillSymbol( string  layerName,esriSimpleFillStyle FillStyle,IColor pColor,IColor OutLineColor, string  RenderLabel, string  Descripition)
         {
             //简单填充符号
             ISimpleFillSymbol simpleFillSymbol =  new  SimpleFillSymbolClass();
             //可以用符号选择器进行
             simpleFillSymbol.Style = FillStyle;
             simpleFillSymbol.Color = pColor;
             //创建边线符号
             ISimpleLineSymbol simpleLineSymbol =  new  SimpleLineSymbolClass();
             simpleLineSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
             simpleLineSymbol.Color = OutLineColor;
             ISymbol symbol = simpleLineSymbol  as  ISymbol;
             symbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
             simpleFillSymbol.Outline = simpleLineSymbol;
 
             ISimpleRenderer simpleRender =  new  SimpleRendererClass();
             simpleRender.Symbol = simpleFillSymbol  as  ISymbol;
             simpleRender.Label = RenderLabel;
             simpleRender.Description = Descripition;
 
             IGeoFeatureLayer geoFeatureLayer;
             geoFeatureLayer = getGeoLayer(layerName);
             if  (geoFeatureLayer !=  null )
             {
                 geoFeatureLayer.Renderer = simpleRender  as  IFeatureRenderer;
             }
         }

 

二、ClassBreakRenderer专题图

为分级专题图,通过要素图层中要素的某个数值字段的值,根据用户要求,将这些值分为多个级别,每个级别用不同的Symbol显示。

该对象实现了IClassBreakRenderer接口,提供了实现分级显示的属性和方法,如Field属性用于设置分级着色的字段,BreakCount属性用于设置分级的数目。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/// <summary>
         /// 分级渲染
         /// </summary>
         /// <param name="layerName">图层名</param>
         /// <param name="classCount">分级数目</param>
         /// <param name="ClassField">分级字段</param>
         /// <param name="FillStyle">填充样式</param>
         public  void  createClassBreakRender( string  layerName,  int  classCount,  string  ClassField, esriSimpleFillStyle FillStyle)
         {
             //int classCount = 6;
             ITableHistogram tableHistogram; //表格直方图
             IBasicHistogram basicHistogram; //Provides access to members that control histogram objects created from different data sources.
 
             ITable table;
             IGeoFeatureLayer geoFeatureLayer;
             geoFeatureLayer = getGeoLayer(layerName);
             ILayer layer = geoFeatureLayer  as  ILayer;
             table = layer  as  ITable;
             tableHistogram =  new  BasicTableHistogramClass();
             //按照 数值字段分级
             tableHistogram.Table = table;
             tableHistogram.Field = ClassField;
             basicHistogram = tableHistogram  as  IBasicHistogram;
             object  values;
             object  frequencys;
             //先统计每个值和各个值出现的次数
             basicHistogram.GetHistogram( out  values,  out  frequencys);
             //创建平均分级对象
             IClassifyGEN classifyGEN =  new  QuantileClass();
             //用统计结果进行分级 ,级别数目为classCount
             classifyGEN.Classify(values, frequencys,  ref  classCount);
             //获得分级结果,是个 双精度类型数组
             double [] classes;
             classes = classifyGEN.ClassBreaks  as  double [];
             //定义不同等级渲染的色带用色
             IEnumColors enumColors = CreateAlgorithmicColorRamp(classes.Length).Colors;
             IColor color;
 
             IClassBreaksRenderer classBreaksRenderer =  new  ClassBreaksRendererClass();
             classBreaksRenderer.Field = ClassField;
             classBreaksRenderer.BreakCount = classCount; //分级数目
             classBreaksRenderer.SortClassesAscending =  true ; //定义分类是否在TOC中显示Legend
 
             ISimpleFillSymbol simpleFillSymbol;
             for  ( int  i = 0; i < classes.Length - 1; i++)
             {
                 color = enumColors.Next();
                 simpleFillSymbol =  new  SimpleFillSymbolClass();
                 simpleFillSymbol.Color = color;
                 simpleFillSymbol.Style = FillStyle;
 
                 classBreaksRenderer.set_Symbol(i, simpleFillSymbol  as  ISymbol);
                 classBreaksRenderer.set_Break(i, classes[i]);
             }
             if  (geoFeatureLayer !=  null )
             {
                 geoFeatureLayer.Renderer = classBreaksRenderer  as  IFeatureRenderer;
             }
            
         }

 

三、UniqueValueRenderer专题图

是依据要素图层中的某个字段的不同值,给每个要素一个单独的颜色,以区分存在的每一个要素。

UniqueValueRenderer实现了IUniqueValueRenderer接口,提供了各种属性和方法,如AddValue方法用于将单个要素的某个字段值和与之相匹配的着色符号加入到UniqueValueRenderer对象。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/// <summary>
         /// 单一值渲染(单字段)
         /// </summary>
         /// <param name="layerName">图层名</param>
         /// <param name="RenderField">渲染字段</param>
         /// <param name="FillStyle">填充样式</param>
         /// <param name="valueCount">字段的唯一值个数</param>
         public  void  createUniqueValueRander( string  layerName,  string  RenderField, esriSimpleFillStyle FillStyle, int  valueCount)
         {
             IGeoFeatureLayer geoFeatureLayer;
             geoFeatureLayer = getGeoLayer(layerName);
             IUniqueValueRenderer uniqueValueRenderer =  new  UniqueValueRendererClass();
             //可以设置多个字段
             uniqueValueRenderer.FieldCount = 1; //0-3个
             uniqueValueRenderer.set_Field(0, RenderField);
 
             //简单填充符号
             ISimpleFillSymbol simpleFillSymbol =  new  SimpleFillSymbolClass();
             simpleFillSymbol.Style = FillStyle;
 
             IFeatureCursor featureCursor = geoFeatureLayer.FeatureClass.Search( null false );
             IFeature feature;
 
             if  (featureCursor !=  null )
             {
                 IEnumColors enumColors = CreateAlgorithmicColorRamp(valueCount).Colors;
                 int  fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField(RenderField);
                 for  ( int  i = 0; i < valueCount; i++)
                 {
                     feature = featureCursor.NextFeature();
                     string  nameValue = feature.get_Value(fieldIndex).ToString();
                     simpleFillSymbol =  new  SimpleFillSymbolClass();
                     simpleFillSymbol.Color = enumColors.Next();
                     uniqueValueRenderer.AddValue(nameValue, RenderField, simpleFillSymbol  as  ISymbol);
                 }
             }
 
             geoFeatureLayer.Renderer = uniqueValueRenderer  as  IFeatureRenderer;
         }
         /// <summary>
         ///  单一值渲染(多字段)
         /// </summary>
         /// <param name="layerName">图层名</param>
         /// <param name="RenderField">多字段名</param>
         /// <param name="FillStyle">样式</param>
         /// <param name="valueCount">每个字段中唯一值的个数</param>
         public  void  createUniqueValueRander( string  layerName,  string [] RenderField, esriSimpleFillStyle FillStyle,  int [] valueCount)
         {
             IGeoFeatureLayer geoFeatureLayer;
             geoFeatureLayer = getGeoLayer(layerName);
             IUniqueValueRenderer uniqueValueRenderer =  new  UniqueValueRendererClass();
             //可以设置多个字段
             uniqueValueRenderer.FieldCount = RenderField .Length; //0-3个
             for  ( int  i = 0; i < RenderField.Length; i++)
             {
                 uniqueValueRenderer.set_Field(i, RenderField[i]);
             }
 
             //简单填充符号
             ISimpleFillSymbol simpleFillSymbol =  new  SimpleFillSymbolClass();
             simpleFillSymbol.Style = FillStyle;
 
             IFeatureCursor featureCursor = geoFeatureLayer.FeatureClass.Search( null false );
             IFeature feature;
 
             if  (featureCursor !=  null )
             {
                 for  ( int  i = 0; i < RenderField.Length; i++)
                 {
                     IEnumColors enumColors = CreateAlgorithmicColorRamp(valueCount[i]).Colors;
                     int  fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField(RenderField[i]);
                     for  ( int  j = 0; j < valueCount[i]; j++)
                     {
                         feature = featureCursor.NextFeature();
                         string  nameValue = feature.get_Value(fieldIndex).ToString();
                         simpleFillSymbol =  new  SimpleFillSymbolClass();
                         simpleFillSymbol.Color = enumColors.Next();
                         uniqueValueRenderer.AddValue(nameValue, RenderField[i], simpleFillSymbol  as  ISymbol);
                     }
                 }
             }
             geoFeatureLayer.Renderer = uniqueValueRenderer  as  IFeatureRenderer;
         }

 

四、ProportionalSymbolRenderer专题图

使用梯度着色法制作的专题图。

ProportionalSymbolRenderer实现了IProportionalSymbolRenderer接口。

这种着色法需要用户知道最大和最小点各自代表的字段值、着色基于的字段和着色点使用的符号以及它在Legend要出现的级别数目。

 

  View Code

五、ChartRenderer专题图

使用一个饼图或柱图来表示一个要素的多个属性。有水平排列和累计排列两种。

ChartRenderer对象实现了IChartRenderer接口,其中ChartSymbol方法用于设置着色对象的着色符号,Label属性用于设置Legend的标签。

该方法用于比较一个要素中不同属性,在获得着色图层的单个或多个字段时用RendererField对象来操作。该类实现了IRendererField接口,可以通过AddField方法来添加字段。

该着色法是使用饼图来表现要素的多个属性之间的比率关系。该对象实现了IPicChartRenderer接口,使用PieChartSymbol符号来修饰要素。

  View Code

 

六、DotDensityRenderer专题图

DotDensityRenderer对象使用DotDensityFillSymbol符号对Polygon类型的要素进行着色。该专题图使用随机分布的点的密度来表现要素某个属性值得大小。也可以对图层的多个属性值着色,通过指定不同的点符号来区分。

DotDensityRenderer对象实现IDotDensityRenderer接口,定义了使用点密度着色方法和属性,如DotDensitySymbol用于确定着色点符号,CreateLegend方法用于产生图例。

  View Code

此外还有两个补充方法(在调用这些方法的时候能用到):

  View Code

 

 

 

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5903526.html,如需转载请自行联系原作者


相关文章
|
物联网 Python 网络性能优化
在ESP32上使用umqtt接入阿里云物联网平台
网络上已经有使用python 模拟设备接入阿里云,手里刚好有块ESP32的小板子,在上面跑过Alios Things,然后接入阿里云。但是终究感觉麻烦,有的时候只是做一个很简单的应用,跑os确实不太方便。
12251 1
|
负载均衡 监控 网络性能优化
网络进阶学习:子网掩码及VLAN划分
网络进阶学习:子网掩码及VLAN划分
767 0
|
编解码
MATLAB | 科研绘图第十二期带误差棒的柱状图
MATLAB | 科研绘图第十二期带误差棒的柱状图
572 0
|
缓存 JavaScript Java
苍穹外卖开发心得(下)
苍穹外卖开发心得(下)
403 5
|
安全 Cloud Native Unix
企业拥抱开源之前,必须了解的七件事
新的时代,开源的发展越来越蓬勃,开源和云的关系越来越复杂,耦合度越来越高,云是开源软件允许的最佳环境之一,也为开源软件插上安全高效的腾飞引擎。
15322 1
企业拥抱开源之前,必须了解的七件事
|
监控 C#
C# | 使用Chart动态展示实时折线图数据
实时折线图是展示数据变化趋势的有效方式,可以用于监控系统性能、物理实验、股票走势等多个领域。 在C#中,我们可以使用Chart控件来实现实时折线图的展示,其动态性和可交互性可以帮助用户更好地理解数据。 本文将介绍如何使用Chart控件展示实时折线图数据,希望能帮助读者快速掌握这个技能,应用于实际场景中。
1868 0
C# | 使用Chart动态展示实时折线图数据
|
大数据 流计算
掌阅科技基于阿里云实时计算Flink构建数据基建平台
掌阅科技专注于数字阅读,是全球领先的数字阅读平台之一。基于数字阅读平台的海量用户,掌阅通过阿里云实时计算Flink等大数据计算和分析服务,搭建商业化、用户增长、推荐服务等数据基建平台,实现商业化增值与用户阅读体验的结合。
880 1
|
关系型数据库 MySQL Java
MySQL数据库连接池的原理和使用方法
MySQL数据库连接池的原理和使用方法
|
XML API 数据格式
三:.net core(.NET 6)给swagger添加文档注释详细步骤
提供swagger文档注释。0、先给api加上标题注释和返回值注释:
1170 0
三:.net core(.NET 6)给swagger添加文档注释详细步骤
|
定位技术
ArcGIS:如何进行缓冲区分析(以市区选择住房位置为例)?
ArcGIS:如何进行缓冲区分析(以市区选择住房位置为例)?
3740 0