PIE SDK矢量多字段渲染

1.功能简介

多值渲染与唯一值渲染类似,即根据矢量图层的多个数值字段的属性值,按照值的不同大小设置不同的显示符号。属性数值相等的所有要素归为同一种类,即同一符号。

2.功能实现说明

2.1实现思路及原理说明

 

第一步

实例化矢量分级渲染对象

第二步

设置渲染样式

第三步

设计符号样式

第四步

输入参数

第五步

矢量渲染器接口转换

第六步

矢量图层渲染赋值

2.2核心接口与方法

接口/类 方法 说明

Carto. IFeatureQuantityByCategorySymbolRender

PolygonFields 设置多值字段
GetSymbolMap 获得SymbolMap
SetPolygonSymbol 设置背景面符号
DefaultSymbol 设置默认符号
SetPointBreak 设置分级符号
SetPointSymbol 设置点符号
SetPointLabel 设置标签
SetPointParameter 设置参数

2.3示例代码

数据路径 SDK安装目录下/Data/基础矢量/行政区划/面/省级行政区.shp 
示例代码
 1 private void quantityByCategorySymbolRenderToolStripMenuItem_Click(object sender, EventArgs e)
 2         {
 3             if (mapctrl.ActiveView.CurrentLayer == null) return;
 4             // 获取当前矢量图层
 5             IFeatureLayer featureLayer = mapctrl.ActiveView.CurrentLayer as IFeatureLayer;
 6             if (featureLayer == null) return;
 7 
 8             // 创建渲染
 9             IFeatureQuantityByCategorySymbolRender render = new FeatureQuantityByCategorySymbolRender();
10 
11             string fieldName = "POP_2021";
12             render.PolygonFields = fieldName;
13             int filedIndex = featureLayer.FeatureClass.GetFields().GetFieldIndex(fieldName);//获取字段索引
14             if (filedIndex == -1) return;
15 
16             //遍历矢量要素图层,读取每一个要素值
17             IFeatureCursor cursor = featureLayer.FeatureClass.Search(null);
18             IFeature feature = cursor.NextFeature();
19             Random rd = new Random();
20             while (feature != null)
21             {
22                 int r, g, b;
23                 r = (int)(rd.Next(1, 255));
24                 g = (int)(rd.Next(1, 255));
25                 b = (int)(rd.Next(1, 255));
26 
27                 //获取字段值
28                 string value = feature.GetValue(filedIndex).ToString();
29 
30                 if (!render.GetSymbolMap().ContainsKey(value))
31                 {
32                     //初始化值对应的符号;本示例为面图层,生成FillSymbol
33                     IFillSymbol fillSymbol = new SimpleFillSymbol();
34                     fillSymbol.Color = Color.FromArgb(r, g, b);
35 
36                     render.SetPolygonSymbol(value, fillSymbol as ISymbol);
37                     //render.SetPolygonLabel(value, value);
38                 }
39                 feature = cursor.NextFeature();
40             }
41             //*********设置默认符号,必要代码**********
42             IFillSymbol defaultSymbol = new SimpleFillSymbol();
43             defaultSymbol.Color = Color.AliceBlue;
44             render.DefaultSymbol = (defaultSymbol as ISymbol);
45             //render.DefaultLabel = "";
46 
47             (cursor as IDisposable).Dispose();//释放游标
48 
49             // 设置分级断点
50             render.SetPointBreak(0, 0);//第一级
51             render.SetPointBreak(1, 3);//第二级
52             render.SetPointBreak(2, 9);//第三级
53 
54             // 设置分级样式
55             IMarkerSymbol symbol0 = new SimpleMarkerSymbol();
56             symbol0.Size = 8;
57             symbol0.Color = Color.FromArgb(255, 0, 0);
58             IMarkerSymbol symbol1 = new SimpleMarkerSymbol();
59             symbol1.Size = 15;
60             symbol1.Color = Color.FromArgb(0, 255, 0);
61             IMarkerSymbol symbol2 = new SimpleMarkerSymbol();
62             symbol2.Size = 20;
63             symbol2.Color = Color.FromArgb(0, 0, 255);
64 
65             render.SetPointSymbol(0, symbol0);
66             render.SetPointSymbol(1, symbol1);
67             render.SetPointSymbol(2, symbol2);
68 
69             // 设置分级标签
70             render.SetPointLabel(0, "第一级");
71             render.SetPointLabel(1, "第二级");
72             render.SetPointLabel(2, "第三级");
73 
74             string FieldName = "PGR_2021";
75             string NormalName = "Null";
76             string MinValue = "-6";
77             render.SetPointParameter(FieldName, NormalName, MinValue, 9);
78             IFeatureRender FeatureRender = render as IFeatureRender;
79             featureLayer.Render = FeatureRender;
80             mapctrl.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
81         }
View Code

2.4示例截图

 

posted @ 2023-04-03 09:10  PIESAT  阅读(72)  评论(0)    收藏  举报