zoukankan      html  css  js  c++  java
  • 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. 示例截图

     

  • 相关阅读:
    在JavaScript中对HTML进行反转义
    JavaScript 删除数组中的对象
    CSS中的before和:after伪元素深入理解
    关于css浮动的一点思考
    前端常见跨域解决方案(全)
    window.location对象详解
    51nod 1001 数组中和等于K的数对
    51nod 1002 数塔取数问题
    51nod 1015 水仙花数
    51nod 1080 两个数的平方和
  • 原文地址:https://www.cnblogs.com/PIESat/p/10167219.html
Copyright © 2011-2022 走看看