首页 科技区

这里进行了一个很有趣的尝试,探索了使用 arcpy 批量修改 ArcGIS Pro “布局”中文本元素的可能。

背景

ArcGIS Pro 与 Arcmap 不同,它无法为不带投影系统的 contour line 生成 label。为了使轮廓线展示出 label,我必须先将数据投影到 WGS 84。这样带来的坏处是,原本无量纲的单位现在都带上了经纬度。同样的,我生成格网之后,格网的各个元素也都从1变成了1°E之类的数。

实际操作

因为格网元素的单位是根据投影坐标系默认指定的,始终无法在属性里调整,因此,我想是否可以有别的方法去修改元素的单位?经过一番尝试,我发现可以按如下方法处理:

为无坐标系指定WGS 84 → 生成格网 → 将格网转为graphic使用arcpy批处理

将格网转graphic:

image-20211014103116199

使用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

结果

最后的结果并不是完成体,实际上可以加几个逻辑判断加入负值,这样更符合直觉,这里只是简单说明下思路:

处理前与处理后:


image-20211014105518957
image-20211014110905673

小结

发现ArcGIS Pro不仅强大在简单易用的界面与强大的功能,更在于它的布局都可以使用 python 去批量调整,这个简直太友好了! 给我的启发是:

1、将一些生成的部分转为graphic,可以进行自定义的美化(如图例等)

2、转变思路,多多尝试,代码可以方便地做到很多鼠标不容易做的事情




文章评论

目录