这里进行了一个很有趣的尝试,探索了使用 arcpy 批量修改 ArcGIS Pro “布局”中文本元素的可能。
背景
ArcGIS Pro 与 Arcmap 不同,它无法为不带投影系统的 contour line 生成 label。为了使轮廓线展示出 label,我必须先将数据投影到 WGS 84。这样带来的坏处是,原本无量纲的单位现在都带上了经纬度。同样的,我生成格网之后,格网的各个元素也都从1
变成了1°E
之类的数。
实际操作
因为格网元素的单位是根据投影坐标系默认指定的,始终无法在属性里调整,因此,我想是否可以有别的方法去修改元素的单位?经过一番尝试,我发现可以按如下方法处理:
为无坐标系指定WGS 84 → 生成格网 → 将格网转为graphic → 使用arcpy批处理
将格网转graphic:
使用arcpy批处理
因为是在布局中处理,所以要先获取ArcGIS Pro工程下的布局,然后获取布局下所有的文本元素。因为格网已经被转成了图像,因此它的经纬度指示标签都转变成文本框,可以使用lyt.listElements("TEXT_ELEMENT")
方法获取。这样子就可以轻松批量修改文本元素,瞒天过海。
import arcpy
aprx = arcpy.mp.ArcGISProject(r"D:\Desktop\HK\pg_pr2\MyProject\Myproject.aprx")
for lyt in aprx.listLayouts(): # 获取目录中所有layout
for elm in lyt.listElements("TEXT_ELEMENT"):
# 获取指定layout中所有文本元素
if len(elm.text) in [2,3]:
elm.text = elm.text[0]
if '0' not in elm.text:
print(elm.text)
aprx.save()
del aprx
结果
最后的结果并不是完成体,实际上可以加几个逻辑判断加入负值,这样更符合直觉,这里只是简单说明下思路:
处理前与处理后:
小结
发现ArcGIS Pro不仅强大在简单易用的界面与强大的功能,更在于它的布局都可以使用 python 去批量调整,这个简直太友好了! 给我的启发是:
1、将一些生成的部分转为graphic,可以进行自定义的美化(如图例等)
2、转变思路,多多尝试,代码可以方便地做到很多鼠标不容易做的事情
www.yingshi.tv