PIE SDK矢量自定义渲染
Posted piesat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIE SDK矢量自定义渲染相关的知识,希望对你有一定的参考价值。
1. 功能简介
PIE SDK中关于矢量渲染提供了多种方案,包括简单渲染、分级渲染、唯一值渲染,这几种渲染方式具有一定的通用性,可以满足用户绝大多数的需求。
当面对复杂的业务,当前渲染方案无法满足用户需求时,可选择进行自定义渲染方案的编写,针对不同的业务编写自定义的逻辑和行业特定的符号。
目前PIE SDK自定义渲染只支持矢量数据。
2. 功能实现说明
2.1 实现思路及原理说明
第一步 |
新建自定义渲染方案类,继承至PIE.Carto.CustomerFeatureRender |
第二步 |
重写CustomerFeatureRender类中的GetSymbolByFeature()方法 |
第三步 |
实例化自定义渲染类对象 |
第四步 |
矢量渲染器接口转换 |
第五步 |
矢量图层渲染赋值 |
2.2 核心接口与方法
接口/类 |
方法 |
说明 |
Carto.CustomerFeatureRender |
GetSymbolByFeature() |
根据要素获得对应渲染符号 |
2.3 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/07图层渲染/04.矢量自定义渲染 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape |
视频路径 |
百度云盘地址下/PIE视频教程/07图层渲染/04.矢量自定义渲染.avi |
示例代码 |
|
1 方法(一) 2 //当前选择图层 3 if (mapControlMain.ActiveView.CurrentLayer == null) return; 4 //是否为矢量图层 5 IFeatureLayer featureLayer = mapControlMain.ActiveView.CurrentLayer as IFeatureLayer; 6 if (featureLayer == null) return; 7 //实例化自定义渲染对象 8 DefineRender render = new DefineRender(); 9 featureLayer.Render = render as IFeatureRender; 10 //视图刷新 11 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 12 13 方法(二) 14 /// <summary> 15 /// 自定义渲染类 16 /// 继承至CustomerFeatureRender类,重写GetSymbolByFeature方法即可。 17 /// </summary> 18 public class DefineRender : PIE.Carto.CustomerFeatureRender 19 { 20 /// <summary> 21 /// 构造函数 22 /// </summary> 23 public DefineRender() 24 { 25 } 26 public override ISymbol GetSymbolByFeature(IFeature feature) 27 { 28 //根据点线面,返回不同的符号,本示例生成面状符号 29 //主要是根据不同的值,进行逻辑编写 30 GeometryType pGeometry = feature.Geometry.GetGeometryType(); 31 if (pGeometry == GeometryType.GeometryPoint) 32 { 33 //点符号 34 IMarkerSymbol markSymbol = new SimpleMarkerSymbol(); 35 return (markSymbol as ISymbol); 36 } 37 else if (pGeometry == GeometryType.GeometryPolyline) 38 { 39 //线符号 40 ILineSymbol lineSymbol = new SimpleLineSymbol(); 41 lineSymbol.Width = 2; 42 lineSymbol.Color = Color.AliceBlue; 43 return (lineSymbol as ISymbol); 44 } 45 else if (pGeometry == GeometryType.GeometryPolygon||pGeometry==GeometryType.GeometryMultiPolygon) 46 { 47 object value = feature.GetValue("ADCODE99");//取值字段可根据实际数据进行修改 48 //面符号 49 50 IFillSymbol fillSymbol = new SimpleFillSymbol(); 51 52 ILineSymbol lineSymbol = new SimpleLineSymbol(); 53 lineSymbol.Width = 2; 54 lineSymbol.Color = Color.AliceBlue; 55 56 fillSymbol.OutlineSymbol = lineSymbol; 57 fillSymbol.Color = Color.CornflowerBlue; 58 59 string ssStr = value.ToString(); 60 //篇幅有限,只对一些值进行符号赋值,其余的采用默认符号 61 if (ssStr == "110000") 62 { 63 fillSymbol.Color = Color.Pink; 64 } 65 else if (ssStr == "120000") 66 { 67 fillSymbol.Color = Color.RosyBrown; 68 } 69 else if(ssStr=="140000") 70 { 71 fillSymbol.Color = Color.Blue; 72 } 73 else 74 { 75 fillSymbol.Color = Color.AliceBlue; 76 } 77 return (fillSymbol as ISymbol); 78 } 79 else 80 { 81 return null; 82 } 83 } 84 } |
2.4 示例截图
以上是关于PIE SDK矢量自定义渲染的主要内容,如果未能解决你的问题,请参考以下文章