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

news2024/11/29 0:38:50

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

在ArcGIS Pro中长这样:

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


1、获取CIMUniqueValueRenderer

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

2、获取符号项

// 获取符号项
CIMUniqueValueClass[] uvClasses = uvr.Groups[0].Classes;

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

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

4、获取符号项的值

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

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

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

6、对符号项进行筛选

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

7、通过lyrx文件获取到CIMUniqueValueRenderer

// 通过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的值字段

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

9、给图层应用渲染器

// 给图层应用渲染器
ly.SetRenderer(uvr);

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

// 获取当前地图
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文件应用符号系统给图层

// 应用符号系统
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并应用给图层

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);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1448134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matplotlib Figure与Axes速成:核心技能一网打尽

Matplotlib Figure与Axes速成&#xff1a;核心技能一网打尽 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333; 一、Figure&#xff08;图形&#xff09;&#x1f333;&#x1f341;1. 创建Figure&#x1f341;&#x1f341;2. 添加Axes&#…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求&#xff1a; 去年12月&#xff0c;我去了其他幼儿园参观&#xff0c;这是一个传统文化德育教育特色的学校&#xff0c;在“古典集市”展示活动中&#xff0c;小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

MyBatis中的XML实现和动态SQL实现

文章目录 一、XML实现1.1增1.2删1.3查1.4改 二、XML方式实现动态SQL2.1if标签2.2trim标签2.3where标签2.4set标签2.5foreach标签2.6include标签和sql标签 一、XML实现 先在新建的XML文件中写入如下内容&#xff1a; <?xml version"1.0" encoding"UTF-8&qu…

php基础学习之分支结构和循环结构(不细讲,来对比一下和两大常用高级编程语言(C++/Java)的细微区别以便记忆)

分支结构 常见分支结构 编程语言常见分支结构有&#xff1a; if语句if-else语句if-elseif-else语句switch语句 其中&#xff0c;除了if-elseif-else语句外&#xff0c;另外3中分支语句在php中和C/Java是一模一样的&#xff01; 而if-elseif-else的唯一不同点就在&#xff0c;【…

【Python网络编程之DHCP服务器】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python开发技术 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python网络编程之DHCP服务器 代码见资源&#xff0c;效果图如下一、实验要求二、协议原理2.1 D…

奇异递归模板模式应用-对象计数

需求&#xff1a;有时遇到某些类特征相似而又没有共同的父类&#xff0c;希望能够知道这些类的创建数量之和。 思路&#xff1a;将这些类继承自同一个计数类&#xff0c;共享计数变量s_createCount信息&#xff0c;实现如下&#xff1a; class Counter { public:Counter() {s_…

Linux操作系统基础(十五):Shell编程

文章目录 Shell编程 一、什么是Shell 1、简介 2、Shell解释器 二、快速入门 1、编写Shell脚本 2、执行Shell脚本 Shell编程 一、什么是Shell 1、简介 Shell 是一个用 C 语言编写的程序&#xff0c; 通过 Shell 用户可以访问操作系统内核服务。 它类似于 DOS 下的 co…

【实战】一、Jest 前端自动化测试框架基础入门(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…

【python】object() takes no parameters报错原因

__init__ 你以为写对了&#xff0c;其实错了&#xff0c;因为是左右都是2个下划线。是左边两个&#xff01;&#xff01;右边也是两个&#xff01;&#xff01;&#xff01;不是合计2个&#xff01;&#xff01;&#xff01;

30. 异常

异常 1. 概述2. Throwable 方法2.1 概述2.2 代码示例 3. 异常分类4. 异常处理方式4.1 JVM默认处理异常4.2 自己处理&#xff08;捕获异常&#xff09;try...catch4.2.1 概述4.2.2 灵魂四问 4.3 抛出处理(throw和throws) 5. 自定义异常5.1 概述5.2 代码示例 6. 异常注意事项 文章…

GPT-4影响高度创新思维的领域(一)

GPT-4的应用范围不再局限于对现有信息的检索、整理和复述&#xff0c;而是进一步拓展到了诸如文学创作、科学假设生成、教育辅导、商业策略建议等需要高度创新思维的领域。这种独立思考和创新能力赋予了GPT-4作为虚拟助手时更加丰富多元的角色定位&#xff0c;使其成为一种强大…

如何在PDF 文件中删除页面?

查看不同的工具以及解释如何在 Windows、Android、macOS 和 iOS 上从 PDF 删除页面的步骤&#xff1a; PDF 是最难处理的文件格式之一。曾经有一段时间&#xff0c;除了阅读之外&#xff0c;无法用 PDF 做任何事情。但是今天&#xff0c;有许多应用程序和工具可以让您用它们做…

寒假思维训练day21

今天更新一道不错的状态压缩DP题&#xff0c;顺带总结一下状态压缩DP。 摘要&#xff1a; Part1 浅谈状态压缩DP的理解 Part2 浅谈对状态机DP的理解 Part3 关于状态压缩DP的1道例题 Part1 状态压缩DP 1、状态压缩DP&#xff1a; 事物的状态可能包含多个特征&#xff0c;…

Zotero插件分享(第二弹)

今天紧接上一篇文章&#xff08;Zotero常用插件分享&#xff09;&#xff0c;继续分享关于Zotero常用插件的相关内容。&#xff08;排名不分先后&#xff09; 1.Translate for Zotero 英文文献阅读辅助工具&#xff0c;可以实现将pdf中选中的文字翻译为指定语言&#xff0c;并…

【学网攻】 第(27)节 -- HSRP(热备份路由器协议)

系列文章目录 目录 系列文章目录 文章目录 前言 一、HSRP(热备份路由器协议)是什么&#xff1f; 二、实验 1.引入 实验目标 实验背景 技术原理 实验步骤 实验设备 实验拓扑图 实验配置 实验验证 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交…

港口码头航吊远距离相位测距仪|传感器PHR-120100配置使用说明

港口码头航吊远距离相位测距仪|传感器PHR-120100广泛应用于港口码头、航车、位移监测、形变监测、钢铁、堆垛机、龙门吊等领域。 本文重点介绍港口码头航吊远距离相位测距仪|传感器PHR-120100配置使用说明。 一、布局介绍 二、按键介绍 三、指示灯说明 四、显示屏操作说明 …

使用LORA微调RoBERTa

模型微调是指在一个已经训练好的模型的基础上&#xff0c;针对特定任务或者特定数据集进行再次训练以提高性能的过程。微调可以在使其适应特定任务时产生显着的结果。 RoBERTa&#xff08;Robustly optimized BERT approach&#xff09;是由Facebook AI提出的一种基于Transfor…

【EAI 020】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

论文标题&#xff1a;Diffusion Policy: Visuomotor Policy Learning via Action Diffusion 论文作者&#xff1a;Cheng Chi, Siyuan Feng, Yilun Du, Zhenjia Xu, Eric Cousineau, Benjamin Burchfiel, Shuran Song 作者单位&#xff1a;Columbia University, Toyota Research…

C#中implicit和explicit

理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-事件event

目录 一、事件基本概念二、事件运行机制三、事件开发流程四、事件使用说明五、事件接口坚持就有收获 一、事件基本概念 事件是一种实现任务间通信的机制&#xff0c;可用于实现任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。一个任务可以等…