import arcpy
def get_layer_symbol_colors(layer_name):
"""
获取指定面图层的符号化RGB颜色
参数:
layer_name: 图层名称
"""
# 获取当前活动地图
aprx = arcpy.mp.ArcGISProject("CURRENT")
map_obj = aprx.activeMap
# 查找指定的图层
layer = None
for lyr in map_obj.listLayers():
if lyr.name == layer_name:
layer = lyr
break
if layer is None:
print(f"未找到图层: {layer_name}")
return
# 检查是否为面图层(避免CIM版本错误)
try:
if hasattr(layer, 'connectionProperties') and layer.connectionProperties:
# 这是一个要素图层,检查几何类型
desc = arcpy.Describe(layer.dataSource)
if desc.shapeType != 'Polygon':
print(f"图层 {layer_name} 不是面图层")
return
except:
# 如果无法检查几何类型,继续执行
print(f"警告:无法验证图层 {layer_name} 的几何类型,继续执行...")
# 获取图层的符号系统
symbology = layer.symbology
print(f"图层名称: {layer_name}")
print(f"符号系统类型: {symbology.renderer.type}")
print("-" * 50)
# 根据不同的渲染器类型处理
if symbology.renderer.type == "SimpleRenderer":
# 简单符号渲染器
symbol = symbology.renderer.symbol
print("渲染类型: 简单符号")
print_symbol_color(symbol, "主符号")
elif symbology.renderer.type == "UniqueValueRenderer":
# 唯一值渲染器
print("渲染类型: 唯一值符号")
renderer = symbology.renderer
# 遍历所有分类
for group in renderer.groups:
for item in group.items:
print(f"分类值: {item.values}")
print(f"标签: {item.label}")
print_symbol_color(item.symbol, f"符号-{item.label}")
print("-" * 30)
elif symbology.renderer.type == "GraduatedColorsRenderer":
# 分级颜色渲染器
print("渲染类型: 分级颜色")
renderer = symbology.renderer
for i, break_obj in enumerate(renderer.classBreaks):
print(f"分级 {i+1}: {break_obj.upperBound}")
print(f"标签: {break_obj.label}")
print_symbol_color(break_obj.symbol, f"分级-{i+1}")
print("-" * 30)
elif symbology.renderer.type == "GraduatedSymbolsRenderer":
# 分级符号渲染器
print("渲染类型: 分级符号")
renderer = symbology.renderer
for i, break_obj in enumerate(renderer.classBreaks):
print(f"分级 {i+1}: {break_obj.upperBound}")
print(f"标签: {break_obj.label}")
print_symbol_color(break_obj.symbol, f"分级-{i+1}")
print("-" * 30)
else:
print(f"不支持的渲染器类型: {symbology.renderer.type}")
def print_symbol_color(symbol, symbol_name):
"""
打印符号的RGB颜色信息
参数:
symbol: 符号对象
symbol_name: 符号名称
"""
try:
# 获取符号的颜色
if hasattr(symbol, 'color'):
color = symbol.color
if color:
print(f"{symbol_name} RGB颜色: R={color['RGB'][0]}, G={color['RGB'][1]}, B={color['RGB'][2]}")
print(f"{symbol_name} CMYK颜色: C={color['CMYK'][0]}, M={color['CMYK'][1]}, Y={color['CMYK'][2]}, K={color['CMYK'][3]}")
# 如果符号有轮廓线,也打印轮廓线颜色
if hasattr(symbol, 'outlineColor'):
outline_color = symbol.outlineColor
if outline_color:
print(f"{symbol_name} 轮廓线RGB颜色: R={outline_color['RGB'][0]}, G={outline_color['RGB'][1]}, B={outline_color['RGB'][2]}")
except Exception as e:
print(f"获取 {symbol_name} 颜色时出错: {str(e)}")
# 使用示例
if __name__ == "__main__":
# 替换为你的图层名称
layer_name = "图斑"
try:
get_layer_symbol_colors(layer_name)
except Exception as e:
print(f"执行出错: {str(e)}")
# 简化版本 - 如果只需要获取简单符号的颜色
def get_simple_layer_color(layer_name):
"""
获取简单符号面图层的RGB颜色(简化版本)
"""
aprx = arcpy.mp.ArcGISProject("CURRENT")
map_obj = aprx.activeMap
# 查找图层
for layer in map_obj.listLayers():
if layer.name == layer_name:
if layer.symbology.renderer.type == "SimpleRenderer":
color = layer.symbology.renderer.symbol.color
if color:
rgb = color['RGB']
print(f"图层 '{layer_name}' RGB颜色: R={rgb[0]}, G={rgb[1]}, B={rgb[2]}")
return rgb
print(f"未找到图层 '{layer_name}' 或不是简单符号渲染")
return None
# 调用简化版本
# rgb_values = get_simple_layer_color("你的图层名称")