做用地的符号系统经常碰到这样的问题,使用用地代码匹配样式之后,符号的标注默认也是用地代码,但是图纸上需要显示的是用地名称。。。这个时候一个一个改符号的标注就太繁琐了。
之前的办法
ArcGIS Pro批量修改图层唯一值符号的标注(改进)_学学GIS的博客-CSDN博客_arcgis批量修改符号系统在之前的文章中介绍了使用aycpy批量修改图层唯一值符号的标注,但是之前的代码写的不够好,主要是在运行代码之前还要在符号系统界面对项目按值进行排序。这次直接使用字典,将对应的DLBM和DLMC做成一对键值,这样根据DLBM给标注赋值DLMC时便不受排序的影响。代码如下import arcpyp = arcpy.mp.ArcGISProject('CURRENT')m = p.listMaps('地图')[0]l = m.listLayers('DLTB')[0]sym = l.symbolohttps://blog.csdn.net/baidu_28157641/article/details/106652598之前编写的代码是在Pro自带的Python窗口中运行的,使用起来不是很方便,而且最近发现写的有点bug,所以修改之后做成了脚本工具,方便使用。
Python脚本
- import arcpy
-
- aprx = arcpy.mp.ArcGISProject('CURRENT')
- map = aprx.activeMap
- lyrName = arcpy.GetParameterAsText(0)
- lyr = map.listLayers(lyrName)[0]
- sym = lyr.symbology
-
- cursor = arcpy.SearchCursor(lyr)
- uniqueDict = {}
- uniqueDLBM = []
-
- valueFid = sym.renderer.fields[0]
- labelFid = arcpy.GetParameterAsText(1)
-
- for row in cursor:
- key = row.getValue(valueFid)
- value = row.getValue(labelFid)
- if key not in uniqueDLBM:
- uniqueDLBM.append(key)
- uniqueDict[key] = value
-
- for grp in sym.renderer.groups:
- for itm in grp.items:
- val = itm.values[0][0]
- itm.label = uniqueDict[val]
- arcpy.AddMessage(val+"--->"+itm.label)
-
- lyr.symbology = sym
参数设置

效果演示

工具说明