朋友们,你们知道ArcGIS里面分式标注的四种写法么?
放错图了,是这个
我们可以把这类叫分式标注,网上也有博主分享过如何在ArcGIS中制作这类标注,但我觉得仍有一些不足。
一是基本都使用VB编写,我看不懂
二是没有很好解决分式标注的格式问题
三是需要直接操作表达式语句,较为繁琐。
为了解决以上三点不足,鼠鼠我啊创建了一个基于Python的ArcGIS Pro脚本工具,在无脑的道路上又前进了一步。
工具演示
多分式标注
工具代码
import arcpy
aprx = arcpy.mp.ArcGISProject(r"CURRENT")
m = aprx.activeMap
lyrs = m.listLayers()
tarLayer = arcpy.GetParameterAsText(0)
fid1 = arcpy.GetParameterAsText(1)
fid2 = arcpy.GetParameterAsText(2)
fid3 = arcpy.GetParameterAsText(3)
fid4 = arcpy.GetParameterAsText(4)
fidList=set([fid1,fid2,fid3,fid4])
fidsPara=""
for i in fidList:
fidsPara = fidsPara+"[{0}],".format(i)
fidsPara = fidsPara[:-1]
exp = """def FindLabel({4}):
def Len(txt):
lenTxt = len(txt)
lenTxt_utf8 = len(txt.encode('utf-8'))
size = int((lenTxt_utf8 - lenTxt)/2 + lenTxt)
return size
b=Len([{0}])
c=Len([{1}])
d=Len([{2}])
e=Len([{3}])
if b>c:
a=b
else:
a=c
if d>e:
label =[{0}] + "\\n"+ [{2}] +"-"*(a+2) +[{3}]+" "*((d-e)//2) + "\\n" + [{1}]
else:
label =[{0}] + "\\n"+ " "*((e-d)//2) +[{2}] +"-"*(a+2) +[{3}] + "\\n" + [{1}]
return "<LIN leading = '0.5' leading_type = 'multiple'>" + "<ALIGN horizontal = 'center'>" + label + "</ALIGN>" + "</LIN>" """.format(fid1, fid2, fid3, fid4, fidsPara)
for lyr in lyrs:
longName = lyr.longName
if longName == tarLayer and lyr.isFeatureLayer == True:
lyr_cim = lyr.getDefinition('V2')
lyr_cim.labelClasses[0].expressionEngine = 'Python'
lyr_cim.labelClasses[0].maplexLabelPlacementProperties.removeExtraWhiteSpace="False"
lyr.setDefinition(lyr_cim)
lblClass = lyr.listLabelClasses()[0]
lblClass.expression = exp
lyr.showLabels = "True"
工具说明
工具可以在ArcGIS Pro2.x和3.x版本中使用。
工具界面中,分子和分母字段是必填的,前缀和后缀选填。
图层的标注类保持只有一个
工具获取
代码可自取,完整工具请CSDN或公众号私信联系。
传播代码和工具请注明出处