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 } |
2.4. 示例截图