飞道的博客

ArcGIS Pro脚本工具(17)——生成多分式标注

644人阅读  评论(0)

​朋友们,你们知道ArcGIS里面分式标注的四种写法么?

放错图了,是这个

分式标注的四种形式

我们可以把这类叫分式标注,网上也有博主分享过如何在ArcGIS中制作这类标注,但我觉得仍有一些不足。

一是基本都使用VB编写,我看不懂

二是没有很好解决分式标注的格式问题

分式上下未对齐

三是需要直接操作表达式语句,较为繁琐。

为了解决以上三点不足,鼠鼠我啊创建了一个基于Python的ArcGIS Pro脚本工具,在无脑的道路上又前进了一步。

工具演示

工具代码


  
  1. import arcpy
  2. aprx = arcpy.mp.ArcGISProject( r"CURRENT")
  3. m = aprx.activeMap
  4. lyrs = m.listLayers()
  5. tarLayer = arcpy.GetParameterAsText( 0)
  6. fid1 = arcpy.GetParameterAsText( 1)
  7. fid2 = arcpy.GetParameterAsText( 2)
  8. fid3 = arcpy.GetParameterAsText( 3)
  9. fid4 = arcpy.GetParameterAsText( 4)
  10. fidList= set([fid1,fid2,fid3,fid4])
  11. fidsPara= ""
  12. for i in fidList:
  13. fidsPara = fidsPara+ "[{0}],". format(i)
  14. fidsPara = fidsPara[:- 1]
  15. exp = """def FindLabel({4}):
  16. def Len(txt):
  17. lenTxt = len(txt)
  18. lenTxt_utf8 = len(txt.encode('utf-8'))
  19. size = int((lenTxt_utf8 - lenTxt)/2 + lenTxt)
  20. return size
  21. b=Len([{0}])
  22. c=Len([{1}])
  23. d=Len([{2}])
  24. e=Len([{3}])
  25. if b>c:
  26. a=b
  27. else:
  28. a=c
  29. if d>e:
  30. label =[{0}] + "\\n"+ [{2}] +"-"*(a+2) +[{3}]+" "*((d-e)//2) + "\\n" + [{1}]
  31. else:
  32. label =[{0}] + "\\n"+ " "*((e-d)//2) +[{2}] +"-"*(a+2) +[{3}] + "\\n" + [{1}]
  33. return "<LIN leading = '0.5' leading_type = 'multiple'>" + "<ALIGN horizontal = 'center'>" + label + "</ALIGN>" + "</LIN>" """. format(fid1, fid2, fid3, fid4, fidsPara)
  34. for lyr in lyrs:
  35. longName = lyr.longName
  36. if longName == tarLayer and lyr.isFeatureLayer == True:
  37. lyr_cim = lyr.getDefinition( 'V2')
  38. lyr_cim.labelClasses[ 0].expressionEngine = 'Python'
  39. lyr_cim.labelClasses[ 0].maplexLabelPlacementProperties.removeExtraWhiteSpace= "False"
  40. lyr.setDefinition(lyr_cim)
  41. lblClass = lyr.listLabelClasses()[ 0]
  42. lblClass.expression = exp
  43. lblClass.visible = True
  44. lyr.showLabels = True

工具说明

  1. 工具可以在ArcGIS Pro2.x和3.x版本中使用。
  2. 工具界面中,分子和分母字段是必填的,前缀和后缀选填。
  3. 生成的分式标注将作用在图层的第一个标注类上

工具获取

代码可自取,完整工具请私信联系。

传播代码和工具请注明出处


转载:https://blog.csdn.net/baidu_28157641/article/details/128748439
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场