使用arcpy GraduatedColorsRenderer移除要素轮廓的技术问题
ArcGIS Pro用arcpy实现分级配色图层无轮廓
问题背景
环境:ArcGIS Pro 2.8.8、Python 3.7、arcpy 2.8标准版(无插件)
需求:通过Python+arcpy给处理后的图层设置分级配色,同时让要素无轮廓。尝试slayer.symbology.outlineColor = {'RGB' : [0, 0, 0, 0]}无效果且无报错,现有代码如下:
aprx = arcpy.mp.ArcGISProject('current') map = aprx.listMaps('Map')[0] slayer = map.listLayers('GRID')[0] query = 'vals > 0' slayer.definitionQuery = query style = slayer.symbology style.updateRenderer('GraduatedColorsRenderer') style.renderer.classificationField = 'vals' style.renderer.breakCount = 5 style.renderer.classificationMethod = 'Quantile' style.renderer.colorRamp = aprx.listColorRamps('Yellow to Red')[0] slayer.symbology = style slayer.symbology.outlineColor = {'RGB' : [0, 0, 0, 0]} layout = aprx.listLayouts(user4)[0]
解决方案
分级配色渲染器(GraduatedColorsRenderer)的轮廓颜色不能直接通过slayer.symbology.outlineColor设置,因为每个分类断点都有独立的符号配置。需要在修改style对象时,遍历所有分类断点,逐个设置符号的轮廓透明度为0(即完全透明),再将修改后的style赋值给图层的symbology。
修正后的完整代码:
aprx = arcpy.mp.ArcGISProject('current') map = aprx.listMaps('Map')[0] slayer = map.listLayers('GRID')[0] query = 'vals > 0' slayer.definitionQuery = query style = slayer.symbology # 设置分级配色渲染器核心参数 style.updateRenderer('GraduatedColorsRenderer') style.renderer.classificationField = 'vals' style.renderer.breakCount = 5 style.renderer.classificationMethod = 'Quantile' style.renderer.colorRamp = aprx.listColorRamps('Yellow to Red')[0] # 遍历每个分类断点,设置轮廓为完全透明 for brk in style.renderer.breaks: brk.symbol.outlineColor = {'RGB': [0, 0, 0, 0]} # 将修改后的样式应用到图层 slayer.symbology = style layout = aprx.listLayouts('user4')[0] # 注意:原代码中user4需为字符串类型
关键说明
- 分级渲染器的每个分类(Break)都包含独立的
symbol对象,必须逐个修改其outlineColor属性才能生效 {'RGB': [0, 0, 0, 0]}中的第四个值为透明度,0代表完全透明,以此实现无轮廓效果- 所有符号属性修改必须在将
style赋值给slayer.symbology之前完成,否则修改不会被应用到图层
内容的提问来源于stack exchange,提问作者MrKingsley
相关产品推荐
相关产品推荐

