PIE SDK矢量唯一值渲染

 

1. 功能简介

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

2. 功能实现说明

2.1. 实现思路及原理说明

第一步

实例化唯一值渲染对象

第二步

设置唯一值渲染字段

第三步

设置是否使用默认渲染符号

第四步

针对每一个唯一值设置对应符号及标签

第五步

矢量渲染器接口转换

第六步

矢量图层渲染赋值

2.2. 核心接口与方法

接口/类

方法/属性

说明

 

 

Carto. IFeatureUniqueValueRender

SetFields

设置渲染字段

GetSymbolMap

获得SymbolMap

SetSymbol

设置符号

SetLabel

设置备注

SetUseDefaultSymbol

设置默认符号

DefaultSymbol属性

符号

2.3. 示例代码

项目路径

百度云盘地址下/PIE示例程序/07图层渲染/03.矢量唯一值渲染

数据路径

百度云盘地址下/PIE示例数据/矢量数据/Shape/省级行政区.shp

视频路径

百度云盘地址下/PIE视频教程/07图层渲染/03.矢量唯一值渲染.avi

示例代码

 1 /// <summary>
 2 /// 矢量唯一值渲染
 3 /// </summary>
 4 /// <param name="sender"></param>
 5 /// <param name="e"></param>
 6 private void toolStripButton_FUnique_Click(object sender, EventArgs e)
 7 {
 8     //当前图层
 9     if (mapControlMain.ActiveView.CurrentLayer == null) return;
10     //获取矢量图层
11     IFeatureLayer featureLayer = mapControlMain.ActiveView.CurrentLayer as IFeatureLayer;
12     if (featureLayer == null) return;
13 
14     //渲染代码
15     string fieldName = "NAME";//"ADCODE99";//获取唯一值的字段名称,根据实际需要进行修改
16     int filedIndex = featureLayer.FeatureClass.GetFields().GetFieldIndex(fieldName);//获取字段索引
17     if (filedIndex == -1) return;
18 
19     //创建FeatureUniqueValueRender
20     IFeatureUniqueValueRender featureUniqueValueRender = new FeatureUniqueValueRender();
21 
22     //设置渲染值段
23     IList<String> listFeilds = new List<String>() { fieldName };
24     featureUniqueValueRender.SetFields(listFeilds);
25 
26     //遍历矢量要素图层,读取每一个要素值
27     IFeatureCursor cursor = featureLayer.FeatureClass.Search(null);
28     IFeature feature = cursor.NextFeature();
29     Random rd = new Random();
30     while (feature != null)
31     {
32         int r, g, b;
33         r = (int)(rd.Next(1, 255));
34         g = (int)(rd.Next(1, 255));
35         b = (int)(rd.Next(1, 255));
36 
37         //获取字段值
38         string value = feature.GetValue(filedIndex).ToString();
39         if (!featureUniqueValueRender.GetSymbolMap().ContainsKey(value))
40         {
41             //初始化值对应的符号;本示例为面图层,生成FillSymbol
42             IFillSymbol fillSymbol = new SimpleFillSymbol();
43             fillSymbol.Color = Color.FromArgb(r, g, b);
44 
45             featureUniqueValueRender.SetSymbol(value, fillSymbol as ISymbol);
46             featureUniqueValueRender.SetLabel(value, value);
47         }
48         feature = cursor.NextFeature();
49 
50     }
51     //*********设置默认符号,必要代码**********
52     IFillSymbol defaultSymbol = new SimpleFillSymbol();
53     defaultSymbol.Color = Color.AliceBlue;
54     featureUniqueValueRender.SetUseDefaultSymbol(true);
55     featureUniqueValueRender.DefaultSymbol = (defaultSymbol as ISymbol);
56     featureUniqueValueRender.DefaultLabel = "";
57 
58     (cursor as IDisposable).Dispose();//释放游标
59     //设置featurerender
60     IFeatureRender featureRender = featureUniqueValueRender as IFeatureRender;
61     featureLayer.Render = featureRender;
62 
63     //视图刷新
64     mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
65 }
View Code

2.4. 示例截图

 

原文地址:https://www.cnblogs.com/PIESat/p/10167219.html