专栏名称: 锐多宝
遥感技术教程、资讯与前沿论文
目录
相关文章推荐
昆明发布  ·  打造“15分钟公共就业服务圈” ... ·  18 小时前  
918云南交通台  ·  199元起入手999足金生肖手链,专柜礼盒, ... ·  3 天前  
51好读  ›  专栏  ›  锐多宝

Ai助力地调项目批量绘图

锐多宝  · 公众号  ·  · 2024-08-31 22:42

正文

本周到苏北项目 出差

记录了两个Arcgis批量出图的例子

供大家参考以提高制图效

一是将市级XX 实际 材料图

域再 重新制作一遍并打印出图

二是把含有数百个图层的地图

按每个图层分别输出一张图

这两个示例在我们日常做图中经常遇到

第一个很简单

用Arcgis内置工具“数据驱动”即可

第二个稍微复杂

需要借助Ai写个脚本

本文重点介绍第二个示例

如何借助Ai为我们制图工作提质增效



一、 数据驱动页面工具

第一个问题

将市级实际材料图按县域重新制作图件

随便打开一个大模型

以文心一言为例

https://yiyan.baidu.com/

Ai给出最常用且高效的方法

使用“数据驱动页面”

第一次接触这个工具可能不好理解

继续问“什么是Arcgis数据驱动页面”

Ai不但介绍了其定义功能和工作原理

同时介绍了使用场景

项目验收在即,报告编制需要制作大量图件

这个功能正是我们需要的

好了,Ai给出建议也确实是这个工具

那么怎么用呢

需求:把连云港市的地表基质实际材料图

(已配置好布局视图)

按每个县生成地表基质实际材料图

怎么实现

按照Ai给出的关键步骤

需要一个索引图层

即连云港市包含的所有县图层

如下图所示


接下演示具体操作

打开ArcGIS,在工具栏空白处右键

调出数据驱动页面工具栏


单击鼠标左键选择数据驱动页面

选择 定义菜单,勾选启用数据驱动页面

图层为将要出图的每个县域范围

名称字段:自动引用该字段内容为县名称

排序字段:自动出图的顺序

实际工作中

仅做这些配置还不够

还想把非本县的内容 裁掉

单击 鼠标右键图层,选择属性

选择数据框

勾选裁剪至当前数据驱动页范围

最后再完善一下图名
双击图名
输入以下内容


单击鼠标右键文件菜单

选导出地图

选择pdf即可实现地图全部导出

输出结果如下图所示

当然也可以调整同比例尺的系列图
比如全部按照1:10万输出
具体操作如下


批量导出1:10万地图




二、 遍历图层批量出图

第二个批量制图场景表达的有些拗口

结合案例来说

就是在同一个Arcmap布局视图下

将左侧内容列表里的每个图层分别输出一张地图

如下图所示

Arcgis没有现成工具实现这个功能

需要我们用python写个脚本

来吧,继续问Ai

问:Arcmap只有一个布局视图

在内容列表里有多个图层

遍历内容列表每个图层,挨个导出地图jpg


Ai给出答案并附了示例脚本

BatchPlotting.py
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行代码,继续执行脚本

BatchPlotting.py
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)图层名称

试着改成汉字立方厘米每克去掉“/”

再试试







请到「今天看啥」查看全文