描述
UniqueValueRenderer 类表示唯一值渲染器。
讨论
如果将当前渲染器更改为 UniqueValueRenderer,则必须先设置适当的 fields 属性值。属性可能是复数,因为可基于多个字段建立一组唯一值。因此,fields 属性将使用列表,即使其中只使用了一个字段。应用 fields 之后,渲染器将自动生成所有唯一值。无论出于什么原因,如果将新值添加到图层中,都需要重置渲染器,以便再次添加所有值。您可以通过更改 fields 属性来执行此操作,也可以使用 addValues 方法。
您需要了解唯一值在渲染器中的管理方式,以便在类结构中进行导航,以更改各个项目及其值。groups 属性将返回 ItemGroup 对象列表。每个 ItemGroup 表示一类具有自己 items 的 heading。默认情况下,存在一个 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')