描述
正是通过 Symbology 类,您可以访问要素图层的渲染器或栅格图层的着色器。
讨论
典型的工作流是参考图层的 symbology,进行更改,然后将更改应用回图层。
重要的是,应首先确保图层支持渲染器或着色器并在对其进行更新之前了解其类型。此时,可使用 hasattr 函数。
arcpy.mp 中当前支持的要素图层渲染器如下:SimpleRenderer、GraduatedColorsRenderer、GraduatedSymbolsRenderer 和 UniqueValueRenderer。
支持以下栅格着色器:RasterClassifyColorizer 和 RasterUniqueValueColorizer。
属性
属性 | 说明 | 数据类型 |
colorizer (只读) | 获取栅格图层的着色器对象。支持的类型为:RasterClassifyColorizer 和 RasterUniqueValueColorizer。 | Object |
renderer (只读) | 获取要素图层的渲染器对象。支持的类型为:GraduatedColorsRenderer、GraduatedSymbolsRenderer、SimpleRenderer 或 UniqueValueRenderer。 | Object |
方法概述
方法 | 说明 |
updateColorizer (colorizer_name) | 该 updateColorizer 方法用于更改栅格图层的着色器。 |
updateRenderer (renderer_name) | updateRenderer 方法用于更改图层渲染器。 |
方法
updateColorizer (colorizer_name)
参数 | 说明 | 数据类型 |
colorizer_name | 支持的渲染器如下:
| String |
您仅可以将支持的着色器更新为支持的着色器。例如,您可以将栅格分类着色器更新指栅格唯一值着色器(反之亦然),但您无法将其更新为栅格拉伸着色器,因为该着色器当前不受支持。
updateRenderer (renderer_name)
参数 | 说明 | 数据类型 |
renderer_name | 支持的渲染器如下:
| String |
SimpleRenderer 和您在应用程序中所见的单一符号渲染器相同。此名称用于与 .NET API 保持一致。
代码示例
以下脚本会遍历每个要素图层并使用 symbology 函数测试其 renderer 是否支持 hasattr 属性。接下来,如果渲染器 type 是 SimpleRenderer,则脚本将会使用 GraduatedColorsRenderer 方法将其更改为 updateRenderer,然后将其 breakCount 值设置为 6。最后,脚本会在保存结果之前将符号系统应用回图层。
import arcpy, os, sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\Symbol.aprx')
m = p.listMaps('Map')[0]
for lyr in m.listLayers():
if lyr.isFeatureLayer:
sym = lyr.symbology
if hasattr(sym, 'renderer'):
if sym.renderer.type == 'SimpleRenderer':
sym.updateRenderer('GraduatedColorsRenderer')
sym.renderer.breakCount = 6
lyr.symbology = sym
p.saveACopy(relpath + r"\\SavedOutput.aprx")
以下脚本首先测试图层的符号系统是否支持 colorizer 属性,然后确认渲染器是否为 RasterClassifyColorizer。接下来,将更改 classificationField 和 breakCount。最后,将 ColorRamp 更改为名为青色到紫色的色带。
import arcpy
import os
import sys
relpath = os.path.dirname(sys.argv[0])
p = arcpy.mp.ArcGISProject(relpath + r'\\RasterClassify.aprx')
m = p.listMaps('Map')[0]
l = m.listLayers('Raster1')[0]
sym = l.symbology
if hasattr(sym, 'colorizer'):
if sym.colorizer.type == 'RasterClassifyColorizer':
sym.colorizer.classificationField = 'Value'
sym.colorizer.breakCount = 7
sym.colorizer.colorRamp = p.listColorRamps('Cyan to Purple')[0]
l.symbology = sym
p.saveACopy(relpath + r'\\SavedOutput.aprx')