【ArcGIS Pro二次开发】(79):符号系统_CIMUniqueValueRenderer

CIMUniqueValueRenderer是ArcGIS Pro SDK中的一个类,用于创建唯一值渲染器(Unique Value Renderer)。

在ArcGIS Pro中长这样:

通过对CIMUniqueValueRenderer的操作,可以对符号系统进行更改,实现很多功能。


1、获取CIMUniqueValueRenderer

cs 复制代码
// 获取CIMUniqueValueRenderer
CIMUniqueValueRenderer uvr = featureLayer.GetRenderer() as CIMUniqueValueRenderer;

2、获取符号项

cs 复制代码
// 获取符号项
CIMUniqueValueClass[] uvClasses = uvr.Groups[0].Classes;

3、逐行对符号项进行操作

cs 复制代码
// 逐行对符号项进行操作
foreach (CIMUniqueValueClass uvClass in uvClasses)
{
    // TODO                     
}

4、获取符号项的值

cs 复制代码
// 获取符号项的值
string va = uvClass.Values[0].FieldValues[0].ToString();

5、获取、赋值符号项的标注

cs 复制代码
// 获取符号项的标注
string lab = uvClass.Label;
// 给符号项的标注赋值
uvClass.Label = "飘游";

6、对符号项进行筛选

cs 复制代码
// 对符号项进行筛选
uvr.Groups[0].Classes = uvClasses.Where(x =>dic01.ContainsKey(x.Values[0].FieldValues[0].ToString())).ToArray();

7、通过lyrx文件获取到CIMUniqueValueRenderer

cs 复制代码
// 通过lyrx文件获取到CIMUniqueValueRenderer
LayerDocument lyrFile = new LayerDocument(def_path + @"\三调用地fin.lyrx");

CIMLayerDocument cimLyrDoc = lyrFile.GetCIMLayerDocument();

CIMUniqueValueRenderer uvr = ((CIMFeatureLayer)cimLyrDoc.LayerDefinitions[0]).Renderer as CIMUniqueValueRenderer;

8、设置CIMUniqueValueRenderer的值字段

cs 复制代码
// 设置CIMUniqueValueRenderer的值字段
uvr.Fields = new string[] { "DLBM" };

9、给图层应用渲染器

cs 复制代码
// 给图层应用渲染器
ly.SetRenderer(uvr);

10、通过字典修改符号项的标注

cs 复制代码
// 获取当前地图
var map = MapView.Active.Map;
// 获取图层
FeatureLayer featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;

// 获取CIMUniqueValueRenderer
CIMUniqueValueRenderer uvr = featureLayer.GetRenderer() as CIMUniqueValueRenderer;

// 获取映射字段
string mapFieldName = uvr.Fields.FirstOrDefault();
// 获取字段值映射表
Dictionary<string, string> dic01 = new Dictionary<string, string>();
Dictionary<string, string> dic02 = new Dictionary<string, string>();
if (field01 != "")
{
    dic01 = featureLayer.Get2FieldValueDic(mapFieldName, field01);
}
if (field02 != "")
{
    dic02 = featureLayer.Get2FieldValueDic(mapFieldName, field02);
}

CIMUniqueValueClass[] uvClasses = uvr.Groups[0].Classes;
// 修改每个标注类别的表达式
foreach (CIMUniqueValueClass uvClass in uvClasses)
{
    // 映射字段值
    string va = uvClass.Values[0].FieldValues[0].ToString();

    // 获取标注字段值
    string fieldValue01 = "";
    string fieldValue02 = "";
    if (dic01.ContainsKey(va))
    {
        fieldValue01 = dic01[va];
    }
    if (dic02.ContainsKey(va))
    {
        fieldValue02 = dic02[va];
    }
    // 标注
    uvClass.Label = txtFront + fieldValue01 + fieldValue02 + txtBack;

}
pw.AddProcessMessage(40, time_base, "删除计数值为0的行");

// 删除计数值为0的行
uvr.Groups[0].Classes = uvClasses.Where(x => dic01.ContainsKey(x.Values[0].FieldValues[0].ToString())).ToArray();

// 应用渲染器
featureLayer.SetRenderer(uvr);

11、通过lyrx文件应用符号系统给图层

cs 复制代码
// 应用符号系统
LayerDocument lyrFile = new LayerDocument(def_path + @"\三调用地fin.lyrx");

CIMLayerDocument cimLyrDoc = lyrFile.GetCIMLayerDocument();

CIMUniqueValueRenderer uvr = ((CIMFeatureLayer)cimLyrDoc.LayerDefinitions[0]).Renderer as CIMUniqueValueRenderer;

uvr.Fields = new string[] { "DLBM" };
// 修改每个标注类别的表达式
foreach (CIMUniqueValueClass uvClass in uvr.Groups[0].Classes)
{
    var va = uvClass.Values[0].FieldValues[0].ToString();
    uvClass.Label = va + DataLib.dic_sdAll[va];
}
// 应用渲染器
ly.SetRenderer(uvr);

12、创建一个CIMUniqueValueRenderer并应用给图层

cs 复制代码
var flyr = MapView.Active.GetSelectedLayers()[0] as FeatureLayer;
// 设置唯一值的字段
var fields = new List<string> { "Type" }; 

// 构造一个点符号作为模板符号
CIMPointSymbol pointSym = SymbolFactory.Instance.ConstructPointSymbol(
      ColorFactory.Instance.GreenRGB, 16.0, SimpleMarkerStyle.Pushpin);  
CIMSymbolReference symbolPointTemplate = pointSym.MakeSymbolReference();

// 构造一个UniqueValueRendererDefinition
UniqueValueRendererDefinition uniqueValueRendererDef =
new UniqueValueRendererDefinition(fields, symbolPointTemplate);

// 创建一个唯一值渲染器
CIMUniqueValueRenderer uniqueValueRenderer = flyr.CreateRenderer(uniqueValueRendererDef) as CIMUniqueValueRenderer;

// 应用到图层
flyr.SetRenderer(uniqueValueRenderer);
相关推荐
坐井观老天1 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi3 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭5 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu7 小时前
Dalsa线阵CCD相机使用开发手册
c#
GISerQ.16 小时前
ArcGIS计算土地转移矩阵
arcgis·土地利用·土地转移矩阵
向宇it19 小时前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot19 小时前
windows C#-命名实参和可选实参(下)
windows·c#
小码编匠19 小时前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net
我不是程序猿儿1 天前
【C#】Debug和Release的区别和使用
开发语言·c#