更新源、定义查询、缩放至图层
我目前的任务大概可以拆分为三部分:
1、需要在复制的一个工程文件内,将模板底图复制多份。(实现)
2、以地图为单位,改变每个Map的源(实现)
3、为Layer设置定义查询,以达到过滤的效果。(实现)
4、将经过换源和过滤的地图视角,缩放至具体的一个图层。(未实现)
1、复制Map
具体内容在我刚刚写完的博客“ArcGISProject工程文档的使用学习笔记”中有详细的说明,这里不再重复,只复制一遍相关的代码。
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
2.更换源
这一部分的官方文档网址是:https://pro.arcgis.com/zh-cn/pro-app/latest/arcpy/mapping/updatingandfixingdatasources.htm。
我看了文档也不是很清楚current_connection_info和new_connection_info两个参数具体是有啥区别,示例中甚至有俩参数都填写的情况,倒是可以用字典挺方便:
current_connection_info:用于表示工作空间路径或 Python 字典(包含要更新的源的连接属性)的字符串。
new_connection_info:用于表示工作空间路径或 Python 字典(包含连接属性与新源信息)的字符串。
从官方文档看,可以方便的替换整个工程文档、整个Map或者单个Layer的源。我是第一次使用,本着练手的目的,用了最基础的Layer。从官网示例中抄的代码如下:
aprx.updateConnectionProperties(current_connection_info='Historic_Data',new_connection_info='New_Data') #工程文档
Map.updateConnectionProperties(current_connection_info='Background.mdb',new_connection_info='Background_fGDB.gdb') # Map
Layer.updateConnectionProperties(l.connectionProperties, lyr.connectionProperties) # Layer
我翻看了半天的官方文档,勉强实现了我的要求,但还是有不少困惑,记录的实现代码如下:
replace_dict = {'connection_info': {'database': newDataSource}, # 新源所在文件夹or数据库
'dataset': newDataSet, # 新源具体的图层名称
'workspace_factory': 'File Geodatabase'} # 新源的类型,我这里为文件数据库
newDefinitionQuery = "fsda_name LIKE \'%{}%\'".format(region)
def layerChange(replace_dict, newDefinitionQuery):
layer.updateConnectionProperties(None, replace_dict) # 替换源
layer.definitionQuery = newDefinitionQuery # 设置定义查询
Layer图层直接有dataSource和definitionQuery 两个字段,可前者是只读的,还是需要使用updateConnectionProperties去换源;后者是可改写的。一开始将参数current_connection_info理解为旧的源,new_connection_info是新的源,导致频繁报错,甚至在python的调试模式查看图层的connectionProperties内的'connection_info'也是爆红字(现在实现了操作,再看也还是爆红)。多次尝试下,将current_connection_info设置为了None,反而程序跑通了。
3.为Layer设置定义查询
因为Layer的definitionQuery字段是可读写的,所以设置定义查询很简单,直接为该字段赋值新的SQL查询即可。代码见3内。只是我从软件中查看,实际上软件保留了原来的查询,新增和启用了新的查询,今天不打算查看怎么删旧查询了。
4、将地图视角,缩放至具体的一个图层
我查了这个实现整整一天,都没实现,文档翻遍了,甚至英文的Esri社区我都看了,有个老哥和我的要求类似,不知道他咋就实现了。这个内容我打算单开一个帖子,详细记录我踩的坑。
浙公网安备 33010602011771号