摘要
UniqueValueRenderer 类表示唯一值渲染器。
说明
如果将当前渲染器更改为 UniqueValueRenderer,则必须先设置适当的 fields 属性值。 属性可能是复数,因为可基于多个字段建立唯一值集。 因此,fields 属性将使用列表,即使其中只使用了一个字段。 应用 fields 之后,渲染器将自动生成所有唯一值。 无论出于什么原因,如果将新值添加到图层中,都需要重置渲染器,以再次添加所有值。 要执行此操作,可通过更改 fields 属性或使用 addValues 方法。
您需要了解唯一值在渲染器中的管理方式,以便在类结构中进行导航,以更改各个项目及其值。 groups 属性将返回 ItemGroup 对象列表。 每个 ItemGroup 表示一类具有专用 heading 的 items。 默认存在一个 ItemGroup。 items 属性将返回项目对象列表。 具有 item 之后,可更改属性,例如 label 和 description。 您也可以修改每个项目的符号。 values 属性是复数并返回列表的原因是您还可以在 ItemGroup 内将项目分组。 因此,每个 item 可能有多个值。
以下是类结构的一种概述:
- groups - 返回 ItemGroup 对象列表
- heading
- items - 返回 Item 对象列表
- description
- label
- symbol
- values
还可以在渲染器中添加和移除值。 每个唯一值实际上是对象模型中的项目,每个项目与一个 ItemGroup 相关联。 要进行 addValues 或 removeValues,需要使用 Python 字典。 字典键是组标题的名称,值为基于 fields 属性的值列表。 还有一个 listMissingValues 方法,可用于确定渲染器中当前缺失的值。 值仅在您有意调用 removeValues 时才会缺失,因为默认渲染器会在设置 fields 属性时自动创建所有唯一值。
如果您的目的是创建新组标题以组织唯一值项目,必须先调用 removeValues 移除项目,然后使用 addValues 创建具有 heading 新标注的新组。
属性
| 属性 | 说明 | 数据类型 |
| colorRamp (可读写) | 提供对 ColorRamp 对象的访问权限。 | ColorRamp |
| defaultSymbol (可读写) | 可以用作模板来更新每个类的所有符号的符号。 | Symbol |
| fields (可读写) | 渲染器用于确定唯一的一组值的一个或多个字段列表。 | List |
| groups (可读写) | 包含唯一值的 ItemGroup 对象的列表。如果未将值添加到渲染器,则项目组计数可能为零。 | List |
| type (只读) | 返回表示渲染器类型的字符串。 | String |
| useDefaultSymbol (可读写) | 控制未添加值显示的布尔值。如果为 True,将显示要素。 | Boolean |
方法概述
| 方法 | 说明 |
| addValues (values_or_items) | addValues 提供了一种向唯一值渲染器添加缺失值的机制。 |
| listMissingValues () | listMissingValues 提供了一种识别唯一值渲染器中缺失值的机制。 |
| removeValues (values_or_items) | removeValues 提供了一种移除唯一值渲染器中的值的机制。 |
方法
addValues (values_or_items)
| 参数 | 说明 | 数据类型 |
values_or_items | 一种基于与组标题名称匹配的键以及表示作为字符串的值列表或表示要添加到组的项目列表的字典。 例如:addValues({"group name" : ["str1", "str2", "str3"]}) 或 addValues({"group name" : missingVals[0].items}) (默认值为 None) | Dictionary |
在执行 addValues 之前,需要首先使用 listMissingValues 方法检查渲染器是否缺少一些值。如果您添加的值无效,则它们将被忽略。在继续处理渲染器中的其他项目之前,使用更新的信息重置图层的符号系统,这一点很重要。
removeValues (values_or_items)
| 参数 | 说明 | 数据类型 |
values_or_items | 一种基于与组标题名称匹配的键以及表示作为字符串的值列表或表示要添加到组的项目列表的字典。 例如:removeValues({"group name" : ["str1", "str2", "str3"]}) (默认值为 None) | Dictionary |
执行 removeValues 后,可以使用 listMissingValues 方法来确认是否移除了这些值。在继续处理渲染器中的其他项目之前,使用更新的信息重置图层的符号系统,这一点很重要。
代码示例
以下脚本会先将渲染器更改为 UniqueValueRenderer。 接下来,它将 fields 属性设置为使用名为 Percent 的单一字段。 接下来,它会遍历每个 ItemGroup 中的项目,并将 RGB 颜色设置为红,将 alpha 或不透明度值设置为与各个要素的 Percent 值匹配。 最后,它会对各个值进行标注,将符号系统重新设置为图层并保存输出。
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\UniqueValue.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('PercentCover*')[0]
sym = l.symbology
sym.updateRenderer('UniqueValueRenderer')
sym.renderer.fields = ['Percent']
for grp in sym.renderer.groups:
for itm in grp.items:
transVal = itm.values[0][0] #Grab the first "percent" value in the list of potential values
itm.symbol.color = {'RGB': [255, 0, 0, int(transVal)]}
itm.label = str(transVal) + '%'
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')以下脚本首先向您演示可通过两种方式在新组标题中移除和添加值。 首先,它移除了四个州名称,然后将这些相同项目添加到名为 Pacific Coast 的新组标题中。 接着,它使用 removeValues 移除六个新英格兰州,然后基于 listMissingValues 方法返回的内容使用 addValues。 列表中的 [0] 是返回的第一个也是唯一一个项目组。
import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\UniqueValue.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('State_Polygons_Default')[0]
sym = l.symbology
sym.renderer.removeValues({"STATE_NAME" : ["Alaska", "California", "Oregon", "Washington"]})
l.symbology = sym
sym.renderer.addValues({"Pacific Coast" : ["Alaska", "California", "Oregon", "Washington"]})
l.symbology = sym
sym.renderer.removeValues({"STATE_NAME" : ["Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", "Vermont"]})
l.symbology = sym
missList = sym.renderer.listMissingValues()
sym.renderer.addValues({"New England" : missList[0].items})
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')