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