首页 软件与工具 QGIS QGIS制图效率太低?自动化出图脚本分享(附:Python代码)

QGIS制图效率太低?自动化出图脚本分享(附:Python代码)

作者: GIS研习社 更新时间:2026-01-08 12:31:40 分类:QGIS

面对堆积如山的地图出图需求,你是否还在机械地重复“调整样式 -> 截图 -> 保存”?对于GIS从业者或科研人员来说,手动制图不仅效率低下,而且极易出错。当项目涉及上百张不同区域或不同年份的地图时,这种重复性劳动简直是一场灾难。本文将带你彻底告别这种低效模式,通过Python脚本实现QGIS的自动化出图,让你的制图效率提升10倍以上。

QGIS制图效率太低?自动化出图脚本分享(附:Python代码)

为什么手动出图是效率杀手?

在处理大规模地图生产任务时,手动操作的弊端显而易见。首先是时间成本,调整图层、标注、比例尺,然后导出图片,这一套流程在单张图上可能只需几分钟,但乘以100张,就是一整天的工作。

其次是一致性难以保证。人工操作难免会出现细微的样式偏差,比如字体大小不统一、指北针位置偏移等,这会严重影响成图的专业性。最后是易错性,一旦源数据更新,所有地图都需要重新制作,手动重做几乎是不可能完成的任务。

维度 手动制图 Python脚本自动化
效率 低,需逐张处理 极高,批量瞬间完成
一致性 难以保证,依赖人工状态 完美一致,代码定义规则
可复用性 差,每张图都是新开始 高,脚本可复用和修改

QGIS自动化出图核心流程

要实现自动化,我们需要使用QGIS内置的Python API (PyQGIS)。核心逻辑是编写一段Python脚本,让QGIS在后台模拟你的操作:打开工程、锁定视野、调整参数、执行打印布局、导出图片。

这套脚本可以独立运行,也可以在QGIS的控制台中执行。它能精准控制地图布局中的每一个元素,包括地图框、比例尺、图例、指北针以及自定义的文本标注。这不仅仅是截图,而是完整的、高分辨率的地图生成过程。

自动化出图脚本实战代码

以下是一个基础的Python脚本示例,用于在QGIS 3.x环境中导出当前布局为PNG图片。请根据你的实际文件路径进行修改。

提示: 在运行脚本前,请确保你的QGIS工程中已经创建了一个名为“Print Layout”的打印布局,并在其中添加了名为“Map 1”的地图项。

from qgis.core import QgsLayoutExporter
import os

# 1. 获取当前项目实例
project = QgsProject.instance()

# 2. 获取打印布局管理器
layout_manager = project.layoutManager()

# 3. 获取名为 "Default Layout" 的布局 (请修改为你实际的布局名称)
layout = layout_manager.layoutByName("Default Layout")

if layout:
    # 4. 设置导出器
    exporter = QgsLayoutExporter(layout)
    
    # 5. 定义导出设置 (这里使用PNG格式,300DPI)
    settings = QgsLayoutExporter.ImageExportSettings()
    settings.dpi = 300
    
    # 6. 定义输出路径 (请修改为你的路径)
    output_path = os.path.join("C:/Users/YourName/Desktop", "automated_map.png")
    
    # 7. 执行导出
    result = exporter.exportToImage(output_path, settings)
    
    if result == QgsLayoutExporter.Success:
        print(f"地图导出成功!路径: {output_path}")
    else:
        print("导出失败,请检查布局设置。")
else:
    print("未找到指定的打印布局。")

如何运行这段脚本?

  1. 打开布局管理器:在QGIS主菜单中,点击“项目” -> “新建打印布局”,并添加地图项。
  2. 打开Python控制台:在QGIS底部面板中找到“Python控制台”图标并点击打开。
  3. 粘贴并修改代码:将上述代码复制到控制台中,务必修改布局名称输出路径
  4. 运行脚本:点击控制台上的“运行脚本”按钮(绿色三角形),即可在指定路径看到生成的高清图片。

扩展技巧:如何批量处理多张地图?

单张导出只是入门,自动化真正的威力在于批量处理。你可以结合Python的循环语句,遍历一个文件夹内的所有数据,或者循环遍历一系列感兴趣的区域(AOI)。

例如,你可以创建一个包含多个区域名称的列表,然后在循环中:

  1. 使用 qgis.utils.iface.setActiveLayer()setSubsetString() 方法来筛选当前区域的数据。
  2. 更新打印布局中的标题文本,使其与当前区域名称一致。
  3. 调用上面的导出函数,保存为“区域名称.png”。

注意事项:在批量处理时,务必使用 QgsApplication.processEvents() 来确保UI及时刷新,避免数据渲染滞后导致的白屏问题。

FAQ 常见问题解答

1. 为什么我导出的图片是空白的?

这通常是因为地图项没有被正确关联。在打印布局中,你需要点击地图项,在右侧属性面板的“主属性”中,确保“锁定图层”未被勾选,或者明确指定了要绘制的图层。此外,检查当前地图范围(Scale)是否包含了所有可见要素。

2. 脚本可以在QGIS Server或命令行运行吗?

可以。这就是QGIS Processing Scripts的优势。你可以将脚本封装为QGIS处理工具,或者使用 qgis --code script.py 的方式在命令行无头模式(Headless Mode)下运行。这对于服务器端自动化生成报表非常有用。

3. 如何导出PDF而不是PNG?

非常简单。只需修改导出函数。将 exporter.exportToImage() 替换为 exporter.exportToPdf(),并使用 QgsLayoutExporter.PdfExportSettings。这样可以保留矢量信息,生成出版级的PDF文件。

总结

掌握QGIS的Python自动化出图,是从“制图员”进阶为“GIS开发者”的关键一步。它不仅解放了你的双手,更确保了大规模制图任务的专业性和准确性。不要犹豫,现在就打开QGIS控制台,粘贴第一行代码,开始你的自动化之旅吧!

相关文章