ARTICLE · 1111250
【原生路基01】六大利器,一张模板搞定 ArcGIS 批量制图
本文属于「原生路基」系列 · 第 01 篇
讲插件背后的 ArcGIS 原生功能。姊妹系列「AI造插件」走的是另一条路——把人工的复杂过程,做成机器流水线。
一120 幅图,我导了一整天
分幅成果图,120 幅。
按老办法干:打开布局,调地图范围到第 1 幅,改图名,导出;再调范围到第 2 幅,改图名,导出……第 120 次的时候,手是麻的,脑子是木的。
更气人的是:图面上一堆不属于本幅的要素。第 1 幅上画着测区所有的图斑,糊成一团。你辛辛苦苦调的图,一眼就是废的。
后来才知道,ArcGIS 里早就有解决这个问题的功能,叫数据驱动页面(Data Driven Pages)。学会之后,120 幅图从"一整天"变成"点一次导出"。
这篇文章讲透它,以及围绕它的六个别扭但决定成败的利器。
二先看结果
配图 1 ·一张模板,翻页式导出 120 幅图(GIF)

数据驱动页面到底是什么?只有两件事:
一个索引图层 + 一套布局模板 = 一堆图。
· 索引图层:一个面要素类,一行 = 一页。每一行的范围,就是那一页地图的显示范围。
· 布局模板:你在布局视图里摆好的图框、图例、比例尺、指北针、图签,所有页共用。
设置入口:工具栏空白处右键 → 数据驱动页面,点击“数据驱动页面设置”,勾选"启用",选索引图层,选名称字段。


配图 2 ·启动“数据驱动页面设置”
就这么简单。真正让人翻车的,是下面这六件事。
三六大利器
利器一:索引图层 —— 必须是一个"面"
1. 建议是面要素类,点、线不方便控制
2. 一行一页,一个面就是一页
3. 有一个唯一编号字段,用来排序、命名、过滤
几个必踩的坑:
· 要素顺序 = 页面顺序。想按图号排序,就按图号字段排序后再启用。
· 索引图层本身在图层列表里不要勾选,否则每张图上都印着那个方框。
反例:没有索引图层,你只能一页页手动改地图范围 —— 120 幅就是 120 次手工操作。

配图 3 · 索引图层(渔网/网格面)在 ArcMap 里的样子
利器二:动态文本 —— 把字段"印"到图面上
位置:插入 → 动态文本。
它能把索引图层的任意字段变成图面上的文字:
· 数据驱动页面属性(取索引图层的字段 → 图名、图号)
· 页码 / 总页数
· 出图日期、当前坐标系、比例尺
实用组合:图签里放"第 3 幅 / 共 120 幅",图名位置放索引图层的 Name 字段,图角放坐标。


配图 4 ·“数据驱动页面名称”

配图 5 ·“数据驱动页面属性”
动态文本效果数据驱动页面属性(取索引图层的字段 → 图名、图号)
利器三:页面定义查询 —— 一张模板能成立的根本原因 ★
这是全文最该记住的一个功能,也是 90% 的人不知道的那个。
位置:图层属性 → 定义查询 → 页面定义。
没有它会怎样:你导出 120 幅图,每一幅上面都画着全部 120 幅的要素。图面糊成一团,全是废图。而且——你是导完才发现。
有了它:同一套图层,翻到哪一页,就只显示哪一页该有的东西。
典型用法:
· 照片图层 → 数据驱动显示当前图幅范围内关联的照片

配图 6 ·初次插入图片

配图 7 · 切换为“数据驱动页面的简单路径”
· 图斑图层 → 只显示本图幅的图斑

配图 8 ·要素的“图层属性”中设置“页面定义查询”
· 注记图层 → 只显示本图幅的注记
三种模式:仅当前页面范围内的要素 / 与索引图层字段匹配 / 两者组合。
第三种的威力最大。举个例子:索引图层里如果有"所属村"字段,就能设定"只显示当前页面所属村的全部要素"——跨越图幅的要素也不会被切断。这就是"一张模板走天下"的真正实现方式。
一句话:利器一给你分幅,利器三给你分幅之后的"该显示什么"。
利器四:范围指示器 —— 装上它,图立刻"像正规院出的"
在布局里再放一个小的数据框,数据框属性 → 范围指示器,指向主数据框。
效果:主图角落出现一个小测区示意图,里面有个红框标出"当前这一幅在整个测区的哪个位置"。
成本 3 分钟,观感提升一个档次。

配图 9 ·范围指示器效果:主图角落的小测区示意图 + 红框定位
利器五:页面设置与图廓整饰 —— 别让 120 张图对不齐
页面设置要解决的是:数据框在页面上的位置和大小,必须每一页完全一致。
做法:按锚点(左上角、中心等)把数据框对齐,页面尺寸跟数据框宽高同步。
图廓整饰清单(一张合格的成果图):图名、图号、比例尺(数字 + 线段)、指北针、图例、图签(坐标系、制图人、日期、资料来源)。
一个小技巧:图例只显示"可见图层"。配合利器三,翻到某页时该图层被过滤掉了,图例里也不会留下空目录,整饰会干净很多。
配图 6 · 待插入

图廓整饰效果:图例只显示可见图层,不留空目录
反例:数据框没对齐,120 张图的图框位置各差一点,后期拼成图册的时候你会想砸键盘。
利器六:导出与命名 —— 两种打法
打法 A:多页 PDF(快)
文件 → 导出地图 → PDF → 勾选"页面:全部"。得到一个 120 页的 PDF,翻起来爽,发出去也体面。
打法 B:逐页出文件(要命名规则)
需要"成果图_001_XX村.jpg"这种命名,并且 300dpi 出图 —— ArcMap 的导出对话框做不到自动按字段命名,得靠 ArcPy 写循环。
代码块
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
mxd = arcpy.mapping.MapDocument("CURRENT")
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
... mxd.dataDrivenPages.currentPageID = pageNum
... page_name=mxd.dataDrivenPages.pageRow.getValue("字段名称")
... arcpy.mapping.ExportToJPEG(mxd, r"E:\pic\\" + str(page_name) + ".jpg",resolution = 300)
... del mxd
#“字段名称”为数据驱动页面要素的制定'字段',导出时以次字段命名
# r"E:\pic\\"为导出路径
小结
四落地:搭好一张模板的七步
照着做,一遍就成:
1. 准备索引图层:面要素类,加唯一编号字段,按编号排好序
2. 启用数据驱动页面:数据框属性 → 数据驱动页面 → 勾选启用,选索引图层和名称字段
3. 设比例尺模式:固定比例 / 最佳比例 / 按字段驱动(注意:要用"按字段",索引图层里必须先有比例尺字段)
4. 摆布局:图框、图例、比例尺、指北针、图签,按锚点把数据框对齐,取消打印机纸张设置
5. 插动态文本:图名(索引图层字段)、页码、出图日期、坐标系
6. 逐图层配页面定义查询:把不该每页都出现的图层全部管起来
7. 加范围指示器,然后导出:多页 PDF 或逐页文件
第 2 步之前,如果没有一个"合格的索引图层",后面全是空谈。
五三个最常见的翻车
1.索引面重叠 → 出现重复图幅,两份成果互相打架
2.忘了配页面定义查询 → 导完 120 张才发现每张都糊着一堆不属于本幅的要素(最惨,因为返工成本最高)
3.数据框没对齐、没取消"使用打印机纸张设置" → 换台机器出图,A3 变 A4,图框全错位
这三条,本质上都是"开工前没检查索引图层和模板"。
六那么,索引图层从哪来?
六大利器全部围绕一个东西转 —— 索引图层。索引图层字段越厚,模板能自动化的东西就越多。
但现实里最常见的情况是:你手上根本没有合格的索引图层。
比如我那次:四百多张外业隐患点照片,有坐标,但一张张拖进 ArcMap 只是散落的图片,更别说什么"一行一页的索引面"了。手工去画 400 个矩形,画完天都亮了。
所以往后,我给你两个我自己写、并且都开源了的工具。
下一篇 · 路旁工坊 01
大疆照片元数据导 Excel,还带地形取景面
出图之前,先得知道照片到底拍到了哪。这个工具把每张无人机照片的视场投到 DEM 上,算出它真实的覆盖范围——顺带把元数据批量导成 Excel。
再下一篇 · AI造插件 01
GISer的工程图册:400 张照片铺成解译底图
它做三件事:读照片像素尺寸和 EXIF → 生成世界文件把照片排成整齐的工程图册 → 顺手把索引图层(渔网)也建好,直接喂给这篇讲的六大利器。
插件是用 AI 辅助写的,我会把 AI 翻车的两个真实案例一起贴出来。
系列导航
本篇:「原生路基 01」六大利器,一张模板搞定 ArcGIS 批量制图
下期预告:「路旁工坊 01」大疆照片元数据导 Excel,还带地形取景面
再下篇:「AI造插件 01」GISer的工程图册:400 张照片铺成解译底图
山行借路|造插件、讲路基、逛工坊
陪你少走弯路,多见风景