本周到苏北项目
出差
记录了两个Arcgis批量出图的例子
供大家参考以提高制图效
率
一是将市级XX
实际
材料图
按
县
域再
重新制作一遍并打印出图
二是把含有数百个图层的地图
按每个图层分别输出一张图
这两个示例在我们日常做图中经常遇到
第一个很简单
用Arcgis内置工具“数据驱动”即可
第二个稍微复杂
需要借助Ai写个脚本
本文重点介绍第二个示例
如何借助Ai为我们制图工作提质增效
一、
数据驱动页面工具
第一个问题
将市级实际材料图按县域重新制作图件
随便打开一个大模型
以文心一言为例
https://yiyan.baidu.com/
Ai给出最常用且高效的方法
使用“数据驱动页面”
第一次接触这个工具可能不好理解
继续问“什么是Arcgis数据驱动页面”
Ai不但介绍了其定义功能和工作原理
同时介绍了使用场景
项目验收在即,报告编制需要制作大量图件
这个功能正是我们需要的
好了,Ai给出建议也确实是这个工具
那么怎么用呢
需求:把连云港市的地表基质实际材料图
(已配置好布局视图)
按每个县生成地表基质实际材料图
怎么实现
按照Ai给出的关键步骤
需要一个索引图层
即连云港市包含的所有县图层
如下图所示
接下演示具体操作
打开ArcGIS,在工具栏空白处右键
调出数据驱动页面工具栏
单击鼠标左键选择数据驱动页面
选择
定义菜单,勾选启用数据驱动页面
图层为将要出图的每个县域范围
名称字段:自动引用该字段内容为县名称
排序字段:自动出图的顺序
实际工作中
仅做这些配置还不够
还想把非本县的内容
裁掉
单击
鼠标右键图层,选择属性
选择数据框
勾选裁剪至当前数据驱动页范围
输入以下内容
单击鼠标右键文件菜单
选导出地图
选择pdf即可实现地图全部导出
输出结果如下图所示
具体操作如下
批量导出1:10万地图
二、
遍历图层批量出图
第二个批量制图场景表达的有些拗口
结合案例来说
就是在同一个Arcmap布局视图下
将左侧内容列表里的每个图层分别输出一张地图
如下图所示
Arcgis没有现成工具实现这个功能
需要我们用python写个脚本
来吧,继续问Ai
问:Arcmap只有一个布局视图
在内容列表里有多个图层
遍历内容列表每个图层,挨个导出地图jpg
Ai给出答案并附了示例脚本
1import arcpy
2import os
3
4# 获取当前MXD文件
5mxd = arcpy.mapping.MapDocument("CURRENT")
6
7# 设置输出目录
8output_folder = "C:\\path\\to\\your\\output\\folder"
9
10# 遍历所有图层
11for lyr in arcpy.mapping.ListLayers(mxd):
12 # 创建一个新的布局视图名(这里实际上不创建新视图,但用于文件名)
13 view_name = lyr.name.replace(" ", "_") + ".jpg"
14 output_path = os.path.join(output_folder, view_name)
15
16 # 隐藏所有图层
17 for other_lyr in arcpy.mapping.ListLayers(mxd):
18 if other_lyr.name != lyr.name:
19 other_lyr.visible = False
20
21 # 仅显示当前图层
22 lyr.visible = True
23
24 # 刷新视图(如果有必要的话)
25 arcpy.RefreshActiveView()
26
27 # 导出当前视图为JPG
28 arcpy.mapping.ExportToJPEG(mxd, output_path, resolution=300)
29
30 # 恢复所有图层可见性
31 for other_lyr in arcpy.mapping.ListLayers(mxd):
32 other_lyr.visible = True
33
34 # 刷新视图(确保所有图层都再次可见)
35 arcpy.RefreshActiveView()
36
37# 保存MXD(如果需要)
38mxd.save()
39
40# 清理(释放资源等)
41del mxd
大概看一下中文注释
代码暂时看不懂的话也没关系
先研究怎么执行脚本
可以在ArcMap中的Python窗口执行
也可以使用Python IDE
如PyCharm, VSCode等执行代码
本文演示最简单的方法
ArcMap中的Python窗口执行
首先调出
Python页面
在ArcMap菜单栏中选择
Python窗口
然后粘贴代码
按两次回车键即可执行
脚本没有正常执行
还报了很多错误
复制前三行提示的问题
继续问AI
这第28行到底怎么回事
Ai给出几个可能存在的问题
第一说是输出目录不存在
确实这个目录是Ai随机生成的
怎么修改呢
我们
在桌面新建一个文件夹aa
并修
改输出目录代
码
1# 设置输出目录
2output_folder = r"C:\Users\Administrator\Desktop\aa"
更换第8行代码,继续执行脚本
1import arcpy
2import os
3
4# 获取当前MXD文件
5mxd = arcpy.mapping.MapDocument("CURRENT")
6
7# 设置输出目录
8output_folder = r"C:\Users\Administrator\Desktop\aa"
9
10# 遍历所有图层
11for lyr in arcpy.mapping.ListLayers(mxd):
12 # 创建一个新的布局视图名(这里实际上不创建新视图,但用于文件名)
13 view_name = lyr.name.replace(" ", "_") + ".jpg"
14 output_path = os.path.join(output_folder, view_name)
15
16 # 隐藏所有图层
17 for other_lyr in arcpy.mapping.ListLayers(mxd):
18 if other_lyr.name != lyr.name:
19 other_lyr.visible = False
20
21 # 仅显示当前图层
22 lyr.visible = True
23
24 # 刷新视图(如果有必要的话)
25 arcpy.RefreshActiveView()
26
27 # 导出当前视图为JPG
28 arcpy.mapping.ExportToJPEG(mxd, output_path, resolution=300)
29
30 # 恢复所有图层可见性
31 for other_lyr in arcpy.mapping.ListLayers(mxd):
32 other_lyr.visible = True
33
34 # 刷新视图(确保所有图层都再次可见)
35 arcpy.RefreshActiveView()
36
37# 保存MXD(如果需要)
38mxd.save()
39
40# 清理(释放资源等)
41del mxd
然后发现脚本执行了
但只生成了7幅图
卡到容重(g/cm3)图层
这是什么问题,
看看控制台
报错还跟前面的一样
对,第二个问题我们还没解决
图层名称问题
将容重(g/cm3)图层名称
试着改成汉字立方厘米每克去掉“/”
再试试