摘要
UniqueValuesSymbology 类可访问用于更改图层唯一值符号系统外观的各种属性。
讨论
通过 UniqueValuesSymbology 类可访问地图文档 (.mxd) 或图层文件 (.lyr) 中自动完成图层符号系统操作的某些属性和方法。一些基本操作(如修改分类值与标注,或更改符号系统所基于的字段)可以对属性进行修改。要访问图层符号系统的所有属性和设置,例如更改单个类的单个符号,需要在 ArcMap 用户界面中进行操作,并将它们保存到图层文件中。随后可使用 UpdateLayer 函数将这些自定义设置应用于现有图层。
图层可以使用任意数量的符号系统,但并非所有符号系统都能进行修改。并非所有图层都使用 UniqueValuesSymbology 类,因此在对图层属性进行修改之前,需要先测试该图层是否使用了此符号系统类。为此,可以使用 Layer 类中的 symbologyType 属性。首先测试图层中的 symbololgyType 是否为唯一值 (if lyr.symbologyType == "UNIQUE_VALUES":),然后为该图层创建 UniqueValuesSymbology 类的变量参考 (lyrSymbolClass = lyr.symbology)。
Layer 对象中的 symbologyType 为只读属性。换言之,无法将唯一值符号系统更改为分级色彩或分级符号系统。只能更改图层中特定符号系统类的属性。更改符号系统类型的唯一方法是按所需结果发布图层文件并使用 UpdateLayer 函数。
valueField 可用于更改唯一值所基于的字段。完成对新字段的设置之后,即可立即调用 addAllValues 方法,以便自动生成更新的类列表。与用户界面类似,addAllValues 会自动将结果以升序排列。如要更改顺序,可以使用 classValues 和 classLabels 属性。
addAllValues 方法在数据持续更新的情况下同样有效。数据更新后,地图文档中采用了唯一值符号化的图层不会自动更新。addAllValues 方法提供了一种流程自动化的机制。
如果正通过 Python 窗口对这些符号系统进行修改并通过 CURRENT 引用地图文档,则可能无法立即查看 ArcMap 应用程序中的更改。要刷新地图文档,请使用 RefreshActiveView 和 RefreshTOC 函数。
属性
属性 | 说明 | 数据类型 |
classDescriptions (读写) | 用于表示各个唯一值(可有选择性地出现在地图文档图例中)的字符串或数值的列表。只能在 ArcMap 用户界面中通过右键单击图层属性对话框的符号系统选项卡中显示的符号,然后选择编辑描述来访问这些值。classDescriptions 列表需要与 classValues 属性具有相同数量且以相同顺序排列的元素。 | List |
classLabels (读写) | 用于表示各个唯一值(显示在地图文档的内容列表和图例项目中)的字符串或数值的列表。classDescriptions 列表需要与 classValues 属性具有相同数量且以相同顺序构建的元素。如果未设置此属性,其值将与 classValues 相同。 | List |
classValues (读写) | 用于表示类别明细的字符串或数值的列表。更改此属性将根据新信息自动调整其他唯一值符号系统属性。最好总是在设置 classDescriptions 和 classLabels 之前设置此值。 | List |
showOtherValues (读写) | 将此值设置为 True 将会显示与 classValues 当前列表不匹配的所有值的符号。 | Boolean |
valueField (读写) | 表示用于图层唯一值符号系统的有效数据集字段名称的字符串。更改这个值将自动根据新信息调整其他符号系统属性。 | String |
方法概述
方法 | 说明 |
addAllValues () | 将所有唯一值添加到符号系统中。 |
方法
addAllValues ()
addAllValues 方法可更新图层的符号系统,使得所有值显示在唯一值符号系统中。此方法有助于在 ArcMap 中创建符号系统后将唯一值添加到图层中。调用 addAllValues 方法会将这些新值插入到现有值列表中。
代码实例
UniqueValuesSymbology 示例 1
以下脚本将更改作为唯一值符号系统基础的 valueField。然后使用 addAllValues 更新类列表。
import arcpy
mxd = arcpy.mapping.MapDocument("current")
lyr = arcpy.mapping.ListLayers(mxd, "Population")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
lyr.symbology.valueField = "SUB_REGION"
lyr.symbology.addAllValues()
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd
UniqueValuesSymbology 示例 2
以下脚本可基于属性查询结果更新图层唯一值符号系统类列表。
import arcpy
mxd = arcpy.mapping.MapDocument("current")
lyr = arcpy.mapping.ListLayers(mxd, "Population")[0]
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", "\"POP2000\" > 20000000")
stateList = []
rows = arcpy.da.SearchCursor(lyr, ["STATE_NAME"])
for row in rows:
stateList.append(row[0])
if lyr.symbologyType == "UNIQUE_VALUES":
lyr.symbology.classValues = stateList
lyr.symbology.showOtherValues = False
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
del mxd