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 }
View Code

2.4  示例截图

技术分享图片

以上是关于PIE SDK矢量自定义渲染的主要内容,如果未能解决你的问题,请参考以下文章

PIE SDK矢量透明度标注控制

PIE SDK的矢量裁剪矢量文件的Algo

PIE SDK矢量数据项查看

PIE SDK矢量数据的创建

PIE SDK内存矢量数据的创建

PIE SDK过滤控制