ArcGISProject是ArcGISPro的工程文档,相比于ArcGis的地图文档包含的内容更多更大。一个工程文档可以包含多个地图、多个布局,甚至包含了三维场景(虽然我用的少),而旧版的数据文档只能包含一个地图和对应的布局,三维场景还需要另外打开ArcScene。言归正传,ArcGISProject的内容如此庞杂,python可处理的东西也非常多,这里并不全部涉及,但是给出说明文档的路径,有需要请自行查阅(https://pro.arcgis.com/zh-cn/pro-app/latest/arcpy/mapping/arcgisproject-class.htm)。
我在这两天工作时涉及到ArcGISProject的部分包括:定位和打开工程文档、获取工程文档包含的地图、复制地图、保存或另存为。
1.定位和打开
官方习惯将工程文档的标识符设置为aprx,这里就入乡随俗了。让程序定位高程文档的路径是批处理第一步。
最常用的arcpy.mp.ArcGISProject()在这一页的说明文档里竟然没有介绍,只能去别的地方找它的参数介绍,这个说明文档经常这样。我这里不涉及它的参数这部分,就偷懒跳过了。
`
import arcpy
path_aprx=r"Your aprx path."
aprx = arcpy.mp.ArcGISProject(path_aprx) # “打开”工程文件
*2.获取文档包含的地图* 只定位到工程文档是不够的,我们需要进一步定位到Map(数据视图)和Layout(布局视图),乃至Layer(图层)才是我们操作的主体。我这里不涉及布局视图,只遍历了Map和Layer,代码如下:
import arcpy
path_aprx=r"Your aprx path."
aprx = arcpy.mp.ArcGISProject(path_aprx)
map_list = aprx.listMaps() # 获取Map列表
for map in map_list:
pass
for layer in map.listLayers(): # 获取并遍历Layer列表
pass
*3.复制地图* 我的任务需要把一个模板地图复制好几份,然后在复制Map的基础上设置专题图。复制地图的操作还费了我不少功夫,比较反直觉的是涉及aprx和map,在搜索栏搜索map是找不到这个功能的。 使用的语句是copyItem (project_item, {new_name}),说明是:创建现有 layout、map 或 report 工程项目的副本。我这里只复制了Map,没试其它的。
def copy_map(mouldName, mouldMap, aprx, region_dict):
for item in region_dict:
mapNameNew1 = item
mapNameNew2 = region_dict[item]
mapName = mouldName.replace("part1", mapNameNew1).replace("part2", mapNameNew2)
aprx.copyItem(mouldMap, new_name=mapName) # 复制Map
`
4.保存和另存为
保存还是比较简单的。
aprx.saveACopy(new_path) #另存为 aprx.save() #保存
