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

    2.4. 示例截图

     

  • 相关阅读:
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    浅谈js模块加载方式(初级)
    浅谈.net的后台校验
    api接口访问限制
    系统操作日志表单形式构建
    RedisUtil(未完,持续更新中....)
    定时处理组件---Quartz.net
  • 原文地址:https://www.cnblogs.com/PIESat/p/10167219.html
Copyright © 2020-2023  润新知