QGIS图册自动生成?Atlas功能怎么配置?
《QGIS图册自动生成?Atlas功能怎么配置?》这个问题,通常出现在你已经有一套面状行政区、地块、网格或项目范围数据,希望按每一个要素自动输出一张地图页,而不是手工复制几十个布局。QGIS 的 Atlas 图册功能正是为这种批量制图场景设计的:用一个覆盖图层控制地图范围、标题、页码和导出文件名,实现一套版式自动生成多张地图。
引言:QGIS图册自动生成适合解决什么问题
在日常 GIS 工作中,很多地图并不是只出一张。例如:
- 按乡镇、村界逐页输出行政区划图。
- 按地块编号批量生成宗地图或调查图。
- 按监测网格自动生成巡查图册。
- 按项目红线、管线分段或样方范围批量导出 PDF。
如果用普通布局手工调整地图范围,不仅耗时,还容易出现比例尺不一致、标题漏改、导出文件名混乱等问题。QGIS Atlas 功能的核心思路是:先准备一个“覆盖图层”,然后让布局根据覆盖图层中的每个要素自动切换地图范围和文字内容。

背景:为什么要用 Atlas,而不是复制多个布局
很多初学者第一次做批量地图时,会复制多个布局,然后逐个修改地图范围、标题和导出文件名。这个办法在 3 到 5 张图时还能接受,但一旦达到几十张或上百张,就会出现明显问题。
- 效率低:每一页都要手动缩放、检查、导出。
- 容易错:标题、编号、比例尺、图幅范围很容易遗漏修改。
- 难维护:数据更新后,需要重新调整所有布局。
- 版式不统一:手动操作容易导致地图框位置、缩放比例和标注效果不一致。
QGIS图册自动生成的价值在于,把“重复制图”变成“规则驱动制图”。只要覆盖图层和布局模板设置正确,后续数据更新后可以重新导出,不必从头排版。
原理:Atlas 功能的核心机制
Atlas 可以理解为 QGIS 布局中的“循环导出器”。它会遍历指定覆盖图层中的每一个要素,并在每一页执行以下动作:
- 读取当前要素的几何范围。
- 让地图框缩放到当前要素附近。
- 读取当前要素的属性字段。
- 把字段值写入标题、编号、说明文字或导出文件名。
- 按同一套版式导出当前页。
这里最关键的是覆盖图层。覆盖图层不是底图,而是决定“每一页对应哪个对象”的图层。例如你要按乡镇出图,覆盖图层就是乡镇边界;你要按地块出图,覆盖图层就是地块面;你要按网格出图,覆盖图层就是网格图层。
QGIS Atlas 功能配置时,通常会涉及三个对象:
- 覆盖图层:控制每一页地图的范围和属性内容。
- 地图项:布局中的地图框,用来显示当前 Atlas 要素对应的地图范围。
- 动态文本:通过表达式读取当前要素字段,例如地块编号、乡镇名称、面积等。
步骤:QGIS Atlas 功能怎么配置
步骤一:准备覆盖图层和字段
在配置 Atlas 之前,先检查覆盖图层是否适合批量出图。建议覆盖图层至少包含以下字段:
- 名称字段:例如 name、乡镇名、地块名称。
- 编号字段:例如 id、code、地块编号。
- 排序字段:例如 sort、序号,用于控制图册页顺序。
- 文件名字段:例如 map_name,用于导出单页 PDF 或图片时命名。
如果没有合适字段,可以在 QGIS 属性表中新增字段。例如新增一个 map_name 字段,把编号和名称组合成导出文件名,后面 Atlas 导出时会更清晰。
concat("code", '_', "name")
这个表达式会把 code 字段和 name 字段拼接为类似 001_中心城区 的文本,适合用于批量导出文件名。
步骤二:新建打印布局
在 QGIS 主界面中,打开项目并加载需要制图的图层,然后执行:
- 点击菜单 项目。
- 选择 新建打印布局。
- 输入布局名称,例如 乡镇图册 或 地块图册。
- 进入布局窗口后,设置纸张大小和方向。
如果是常规报告图册,A4 纵向或横向比较常见;如果是工程图件,可以根据项目要求选择 A3 或自定义纸张尺寸。
步骤三:添加地图框并锁定图层样式
在布局窗口中添加地图框:
- 点击 添加地图。
- 在页面上拖拽出地图显示范围。
- 调整地图框大小和位置。
- 在右侧项目属性中检查比例尺、范围和图层显示状态。
建议在正式启用 Atlas 前,先在 QGIS 主界面中设置好图层样式,包括边界线、填充颜色、标注、底图透明度等。Atlas 只是自动切换范围,不会替你解决符号化不清晰的问题。
步骤四:启用 Atlas 图册
在布局窗口右侧找到 Atlas 面板。如果没有看到,可以通过布局窗口菜单或面板设置打开。
按下面方式配置:
- 勾选 生成图册 或 启用 Atlas。
- 在 覆盖图层 中选择用于分页的图层,例如乡镇边界或地块图层。
- 如果只想输出部分要素,可以启用过滤表达式。
- 如果需要固定顺序,启用排序并选择排序字段。
到这一步,QGIS 已经知道“要按哪个图层的哪些要素逐页出图”。但地图框还需要绑定 Atlas,否则页面切换时地图范围不会自动跟随。
步骤五:让地图框跟随 Atlas 要素
选中布局中的地图框,在右侧地图项属性中找到 Atlas 相关设置,通常需要勾选:
- 由 Atlas 控制
- 缩放到要素
然后设置边距或缩放方式。边距的作用是避免当前要素紧贴地图框边缘。例如设置 10% 或 20% 的边距,可以让图面更舒适。
如果每页要素大小差异很大,可以使用“缩放到要素并保留边距”。如果希望所有页面保持同一比例尺,则需要谨慎设置固定比例尺,否则小地块和大区域的显示效果会差异明显。
步骤六:添加动态标题和字段文本
Atlas 最实用的功能之一,是让标题自动读取当前要素属性。添加文本框后,可以使用表达式插入字段。
常见写法如下:
[% "name" %]
如果想生成更完整的标题,可以写成:
[% "name" %] 地块位置图
也可以组合多个字段:
编号:[% "code" %] 名称:[% "name" %]
如果要显示页码,可以使用 Atlas 变量:
第 [% @atlas_featurenumber %] 页 / 共 [% @atlas_totalfeatures %] 页
这些表达式会在 Atlas 切换到不同要素时自动更新。这样就不需要每页手动修改标题、编号和说明。
步骤七:设置当前要素高亮效果
批量出图时,读图者需要快速识别“当前页对应哪个对象”。推荐给覆盖图层设置基于 Atlas 当前要素的高亮样式。
一种常用做法是复制覆盖图层一份,作为高亮图层使用,然后在图层过滤或样式表达式中突出当前 Atlas 要素。简单场景下,可以使用基于字段匹配的规则样式。
例如当前图册按 code 字段出图,可以设置规则,使当前 code 对应的要素使用醒目的边界和半透明填充。这样每一页都会突出显示当前要素,其他要素作为背景参考。
步骤八:预览 Atlas 图册
正式导出前,一定要使用 Atlas 预览功能逐页检查。建议重点检查:
- 地图范围是否正确跟随当前要素。
- 标题是否读取了正确字段。
- 页码是否正常变化。
- 当前要素是否被清楚突出显示。
- 标注是否遮挡重要内容。
- 比例尺、指北针、图例是否适合所有页面。
如果某些页面显示不完整,通常需要调整地图框 Atlas 边距、比例尺策略或覆盖图层几何范围。
步骤九:批量导出 PDF 或图片
确认预览无误后,可以在布局窗口中选择导出 Atlas。常见导出方式有两种:
- 导出为一个 PDF:适合制作完整图册,一个文件包含多页。
- 导出为多个文件:适合按地块、乡镇或项目单独归档。
如果导出多个文件,建议使用字段作为文件名表达式,例如:
"map_name"
或者:
concat("code", '_', "name")
这样可以避免导出后出现 page_1、page_2 这类不便管理的文件名。
常见坑:QGIS图册自动生成失败通常卡在哪里
1. 地图框没有勾选由 Atlas 控制
这是最常见的问题。你虽然启用了 Atlas,但地图框没有绑定 Atlas,所以预览切换页面时,标题可能变了,地图范围却没有变化。
解决方法:选中地图框,在地图项属性中检查 Atlas 设置,确保地图框由 Atlas 控制,并启用缩放到当前要素。
2. 覆盖图层选错了
如果你要按乡镇出图,却选择了道路图层作为覆盖图层,Atlas 就会按道路要素逐页导出,结果当然不符合预期。
解决方法:确认覆盖图层就是你希望“一页对应一个对象”的图层。
3. 字段表达式写错
动态文本不显示,常见原因是字段名写错、引号使用错误,或者字段为空。
建议先用简单表达式测试:
[% "name" %]
如果能正常显示,再逐步组合更复杂的标题。
4. 要素范围太小或太大
有些地块很小,有些区域很大,Atlas 自动缩放后可能出现比例尺差异过大。小地块页面看起来过于放大,大区域页面又显得拥挤。
解决方法:根据制图目的选择固定比例尺、动态缩放或分组出图。对于尺寸差异极大的对象,不建议强行放在同一个图册模板里。
5. 坐标系不统一导致范围异常
如果项目坐标系、覆盖图层坐标系和底图坐标系混乱,可能出现图层偏移、地图范围异常或比例尺不符合预期。
解决方法:检查项目 CRS 和图层 CRS。对于正式制图,尽量使用适合本地区的投影坐标系,而不是仅依赖经纬度坐标系。
6. 导出文件名包含非法字符
如果字段值中包含斜杠、冒号、问号等字符,导出多个文件时可能失败或生成异常文件名。
解决方法:提前清洗文件名字段,只保留编号、中文名称、下划线、短横线等安全字符。
方法比较:Atlas、手工布局和脚本批量制图怎么选
| 方法 | 适合场景 | 优点 | 限制 |
|---|---|---|---|
| 手工复制布局 | 只需要输出少量地图 | 上手快,不需要配置表达式 | 数量一多就容易出错,维护成本高 |
| QGIS Atlas 图册 | 按行政区、地块、网格等要素批量出图 | 配置直观,支持动态标题、动态范围和批量导出 | 复杂逻辑和高级自动化能力有限 |
| PyQGIS 脚本制图 | 需要高度自动化、批量制图流程固定 | 可编程控制强,适合集成到生产流程 | 需要 Python 和 QGIS API 基础 |
| ArcGIS Pro Map Series | ArcGIS Pro 环境下批量制图 | 企业 GIS 流程中常见,制图元素完善 | 软件授权和环境要求较高 |
如果你的目标是“在 QGIS 中快速按要素生成多页图册”,Atlas 是最合适的起点。只有当你需要更复杂的条件判断、自动切换图层、批量修改样式或集成数据库流程时,才需要考虑 PyQGIS 脚本。
检查清单:导出前逐项确认
- 覆盖图层是否就是每页对应的对象图层?
- 覆盖图层是否有稳定的编号字段和名称字段?
- Atlas 是否已经启用?
- 地图框是否勾选由 Atlas 控制?
- 地图框边距是否足够,当前要素是否完整显示?
- 标题、编号、页码是否使用了正确表达式?
- 当前要素是否有明显高亮?
- 图例是否过长,是否遮挡地图主体?
- 标注是否在所有页面都能正常阅读?
- 导出文件名表达式是否安全、唯一、易识别?
- 是否至少预览过前几页、中间页和最后一页?
实际项目中,建议先用 3 到 5 个要素做小范围测试导出,确认版式、字段和文件名都正确后,再导出完整图册。
FAQ:QGIS Atlas 功能常见问题
QGIS图册自动生成必须使用面图层吗?
不一定。Atlas 覆盖图层可以是点、线或面,但面图层最常见。如果使用点图层,需要设置合适的固定比例尺或缓冲范围,否则地图框可能只围绕点位缩放,显示范围太小。
Atlas 功能可以按字段筛选部分要素出图吗?
可以。在 Atlas 设置中可以使用过滤表达式。例如只导出 status 字段为“已完成”的要素,可以设置类似表达式:
"status" = '已完成'
这样 Atlas 只会遍历满足条件的要素。
QGIS Atlas 怎么控制图册页顺序?
可以在 Atlas 设置中启用排序,并选择排序字段。建议使用数字型 sort 字段控制顺序,而不是直接依赖名称字段,因为中文名称排序在不同环境下可能不符合业务顺序。
为什么 Atlas 预览时标题变了,但地图范围不变?
通常是地图框没有启用“由 Atlas 控制”。需要选中布局中的地图框,在地图项属性中找到 Atlas 设置,并勾选由 Atlas 控制和缩放到当前要素。
QGIS Atlas 可以导出每个要素一个 PDF 吗?
可以。导出时选择按 Atlas 批量导出,并使用字段或表达式作为文件名。建议提前准备 map_name 字段,避免导出文件名重复或包含非法字符。
Atlas 输出的地图比例尺总是不统一怎么办?
这是因为 Atlas 默认会根据每个要素范围动态缩放。如果业务要求比例尺统一,可以在地图项中设置固定比例尺,或者按对象大小分成多个图册模板分别导出。
QGIS Atlas 和 ArcGIS Pro Map Series 是一回事吗?
两者思路相似,都是按索引图层或覆盖图层批量生成地图页。QGIS 中叫 Atlas,ArcGIS Pro 中常见对应功能是 Map Series。具体界面和表达式语法不同,但工作流都是“覆盖图层控制页面”。
结论:用 Atlas 把重复制图变成可复用模板
QGIS图册自动生成的关键,不是简单点击导出,而是把覆盖图层、地图框、动态文本和导出文件名组织成一套稳定模板。只要 Atlas 功能配置正确,就可以按乡镇、地块、网格或项目范围快速生成多页地图。
实际操作时,记住四个重点:先准备干净的覆盖图层,再启用 Atlas,然后让地图框由 Atlas 控制,最后用字段表达式生成标题和文件名。这样做出来的图册不仅效率更高,也更容易检查、更新和复用。