zoukankan      html  css  js  c++  java
  • 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/省级行政区.shp

    视频路径

    百度云盘地址下/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("HighSchool");//取值字段可根据实际数据进行修改
    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              int valueTemp = Convert.ToInt32(ssStr);
    61             //篇幅有限,只对一些值进行符号赋值,其余的采用默认符号
    62             if (valueTemp<5000)
    63             {
    64                 fillSymbol.Color = Color.Pink;
    65             }
    66             else if (valueTemp<10000)
    67             {
    68                 fillSymbol.Color = Color.RosyBrown;
    69             }
    70             else if(valueTemp<15000)
    71             {
    72                 fillSymbol.Color = Color.Blue;
    73             }
    74             else
    75             {
    76                 fillSymbol.Color = Color.AliceBlue;
    77             }
    78             return (fillSymbol as ISymbol);
    79         }
    80         else
    81         {
    82             return null;
    83         }
    84     }
    85 }
    View Code

    2.4.  示例截图

  • 相关阅读:
    模拟费用流学习笔记
    爬山游记
    基数排序板子
    webim
    centos9 重启网络
    Linux虚拟机桥接模式下ping不通自己配置的网关
    win7怎样开启loopback接口(环回网卡)
    在CentOS上配置SAMBA共享目录
    linux间scp拷贝文件夹
    nginx配置http和https可同时访问方法
  • 原文地址:https://www.cnblogs.com/PIESat/p/10167265.html
Copyright © 2011-2022 走看看