Symbology

描述

正是通过 Symbology 类,您可以访问要素图层的渲染器或栅格图层的着色器。

讨论

典型的工作流是参考图层的 symbology,进行更改,然后将更改应用回图层。

重要的是,应首先确保图层支持渲染器或着色器并在对其进行更新之前了解其类型。此时,可使用 hasattr 函数。

arcpy.mp 中当前支持的要素图层渲染器如下:SimpleRendererGraduatedColorsRendererGraduatedSymbolsRendererUniqueValueRenderer

支持以下栅格着色器:RasterClassifyColorizerRasterUniqueValueColorizer

属性

属性说明数据类型
colorizer
(只读)

获取栅格图层的着色器对象。支持的类型为:RasterClassifyColorizerRasterUniqueValueColorizer

Object
renderer
(只读)

获取要素图层的渲染器对象。支持的类型为:GraduatedColorsRendererGraduatedSymbolsRendererSimpleRendererUniqueValueRenderer

Object

方法概述

方法说明
updateColorizer (colorizer_name)

updateColorizer 方法用于更改栅格图层的着色器。

updateRenderer (renderer_name)

updateRenderer 方法用于更改图层渲染器。

方法

updateColorizer (colorizer_name)
参数说明数据类型
colorizer_name

支持的渲染器如下:

  • RasterClassifyColorizer栅格分类着色器。
  • RasterUniqueValueColorizer栅格唯一值着色器。
String

您仅可以将支持的着色器更新为支持的着色器。例如,您可以将栅格分类着色器更新指栅格唯一值着色器(反之亦然),但您无法将其更新为栅格拉伸着色器,因为该着色器当前不受支持。

updateRenderer (renderer_name)
参数说明数据类型
renderer_name

支持的渲染器如下:

  • GraduatedColorsRenderer分级色彩渲染器
  • GraduatedSymbolsRenderer分级符号渲染器
  • SimpleRenderer单一符号渲染器
  • UniqueValueRenderer唯一值渲染器
String

SimpleRenderer 和您在应用程序中所见的单一符号渲染器相同。此名称用于与 .NET API 保持一致。

代码示例

符号系统示例 1

以下脚本会遍历每个要素图层并使用 symbology 函数测试其 renderer 是否支持 hasattr 属性。接下来,如果渲染器 typeSimpleRenderer,则脚本将会使用 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")
符号系统示例 2

以下脚本首先测试图层的符号系统是否支持 colorizer 属性,然后确认渲染器是否为 RasterClassifyColorizer。接下来,将更改 classificationFieldbreakCount。最后,将 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')