当前位置: 首页 > news >正文

使用 ArcPy 自动化导出并合并 ArcGIS 地图系列为 PDF 地图册

使用 ArcPy 自动化导出并合并 ArcGIS 地图系列为 PDF 地图册

使用 ArcPy 自动化导出并合并 ArcGIS 地图系列为 PDF 地图册

背景介绍

在制作区域地图册(如分县、市、乡镇的专题地图集)时,ArcGIS Pro 的地图系列(Map Series)功能非常强大,它能自动为每个页面切换范围并生成多页布局。然而,手动导出每个页面为 PDF、再用第三方工具合并的流程非常繁琐,尤其页面数量多达几十甚至上百时。

本文提供的 ArcPy 脚本能完全自动化这个过程:遍历地图系列的所有页面,动态更新标题(例如显示当前区域名称),可选调整图例位置,导出每个页面为单页 PDF,最后自动合并成一个完整的地图册 PDF。整个操作只需运行一次脚本,几分钟即可完成,极大提升效率。

运行完成后,你会在指定输出文件夹中看到每个页面的独立 PDF 文件,以及一个名为 地图册_合并.pdf 的最终合并文件,直接双击打开即可查看完整地图册。

代码功能说明

这段代码的核心功能是:

  1. 打开指定的 ArcGIS Pro 项目和地图系列布局;
  2. 遍历每一页,动态设置标题文本(使用页面名称);
  3. 可选调整图例位置;
  4. 将每页导出为高分辨率单页 PDF;
  5. 将所有单页 PDF 自动合并为一个最终地图册。

适用于任何基于地图系列的批量制图场景,特别是需要统一标题、保持一致布局的多页地图册制作(如规划报告、统计年鉴、灾害风险图集等)。

运行环境准备

  1. 安装 ArcGIS Pro(推荐 3.0 或更高版本),并确保已激活许可证;
  2. 准备一个已配置好地图系列的 ArcGIS Pro 项目(.aprx 文件):
    • 布局中已启用“空间地图系列”(Map Series);
    • 标题文本元素命名为“地图标题”;
    • 图例元素命名为“Legend”(如果需要调整位置);
  3. 项目布局名为代码中指定的名称(可自定义修改)。

注意:脚本会在指定目录自动创建输出文件夹,无需手动提前创建。

详细运行步骤

按照以下顺序操作,每一步都说明了“为什么要做”:

  1. 准备 ArcGIS Pro 项目
    打开你的 .aprx 项目,确保地图系列已正确启用(在布局面板中看到页面列表),标题和图例元素命名与代码一致。
    为什么:脚本依赖这些设置才能正确识别和操作布局元素。

  2. 打开 Python 窗口
    在 ArcGIS Pro 中,点击“分析”选项卡 → “Python” 窗口(或插入 → Python Notebook)。
    为什么:ArcPy 必须在 ArcGIS Pro 的内置 Python 环境中运行,才能访问项目和布局。

  3. 粘贴并修改代码
    将下面的完整代码复制到 Python 窗口中。
    必须修改的地方

    • project_path:改成你的 .aprx 文件完整路径;
    • layout_name:改成你的布局名称;
    • output_dir:改成你想存放 PDF 的文件夹路径。
    import arcpy
    import os# === 设置路径 ===
    project_path = r"C:\Users\【your_username】\【your_project_folder】\your_project.aprx"
    layout_name = "最小 A3 横向1"
    output_dir = r"C:\Users\【your_username】\【your_output_folder】"
    final_pdf = os.path.join(output_dir, "地图册_合并.pdf")# === 创建输出目录 ===
    os.makedirs(output_dir, exist_ok=True)# === 打开项目和布局 ===
    aprx = arcpy.mp.ArcGISProject(project_path)
    layout = aprx.listLayouts(layout_name)[0]
    map_series = layout.mapSeries# === 检查地图系列是否启用 ===
    if not map_series or not map_series.enabled:raise RuntimeError("❌ 地图系列未启用,请在布局中设置空间地图系列。")# === 获取布局元素(标题与图例)===
    elements = layout.listElements()
    title_element = next((e for e in layout.listElements("TEXT_ELEMENT") if e.name == "地图标题"), None)
    legend_element = next((e for e in elements if e.name == "Legend" and e.elementType == "LEGEND_ELEMENT"), None)# === 准备合并 PDF 文档 ===
    pdf_doc = arcpy.mp.PDFDocumentCreate(final_pdf)# === 遍历地图系列页面并导出单页 PDF ===
    for i in range(1, map_series.pageCount + 1):map_series.currentPageNumber = ipage_name = map_series.pageRow.name# 设置地图标题if title_element:title_element.text = f"{page_name} 地图"# 调整图例位置(可选)if legend_element:legend_element.elementPositionX = 2legend_element.elementPositionY = 18# 单页 PDF 临时路径single_pdf = os.path.join(output_dir, f"{page_name}_map.pdf")# 导出单页 PDFlayout.exportToPDF(single_pdf, resolution=300)print(f"✅ 导出第 {i} 页:{page_name}")# 添加到合并文档pdf_doc.appendPages(single_pdf)# === 保存合并 PDF ===
    pdf_doc.saveAndClose()
    print(f"🎉 成功生成地图册:{final_pdf}")
    

    为什么修改路径:脚本需要准确找到你的项目文件和输出位置,否则会报文件不存在错误。

  4. 运行脚本
    在 Python 窗口中按 Ctrl+Enter 执行全部代码(或在 Notebook 中运行单元格)。
    为什么:脚本会依次处理每一页,并在窗口中实时打印进度。

  5. 验证结果
    运行完成后:

    • 查看 Python 窗口最后一行输出的最终 PDF 路径;
    • 打开输出文件夹,检查是否有每个页面的单页 PDF 和合并后的 地图册_合并.pdf
    • 双击合并 PDF,翻页确认标题是否正确显示区域名称,图例位置是否调整到位。
      为什么:确保所有页面都成功导出且合并无误。

核心代码解析

用最简单的话解释每一块,就像在给朋友讲故事:

  • 设置路径部分
    就像告诉脚本:“我的项目文件在这里,布局叫这个名字,PDF 要存到这个文件夹”。这样后面所有操作都知道去哪里找东西和放结果。

  • 打开项目和检查地图系列
    用 ArcPy 打开你的 .aprx 文件,找到指定布局,如果地图系列没开,就直接报错提醒你去手动启用。

  • 获取标题和图例元素
    在布局里搜名字叫“地图标题”的文本框和叫“Legend”的图例,找到后备着用。

  • 准备合并 PDF
    先创建一个空的“总PDF”文件,准备往里面塞页面。

  • 遍历每一页
    从第1页到最后一页,一页页切换:

    • 读取当前页的区域名称(page_name);
    • 把标题改成“XX 地图”;
    • (可选)把图例挪到指定坐标;
    • 把当前页面导出成一个临时单页 PDF(高清晰300 DPI);
    • 把这个单页 PDF 加到总PDF里。
      就像自动翻书、一页页拍照、再把照片装订成册。
  • 保存合并 PDF
    所有页面处理完后,保存并关闭总PDF,大功告成。

常见问题解决

  • 报错 “地图系列未启用”
    原因:布局中没有开启空间地图系列。
    解决:在布局面板右键 → “地图系列” → 启用,并选择页面字段。

  • 标题没有变化或报错找不到元素
    原因:标题文本元素名称不是“地图标题”。
    解决:在布局中选中标题元素,属性面板改名称为“地图标题”;或者修改代码中的名称匹配你的实际名称。

  • 图例没有移动
    原因:图例元素名称不是“Legend”,或布局中没有图例。
    解决:确认图例名称,或注释掉调整位置的代码(加 #)。

  • 文件路径错误或找不到 .aprx
    原因:路径写错或包含中文/特殊字符。
    解决:使用 raw 字符串(加 r""),仔细核对路径;推荐用英文路径。

  • 导出 PDF 空白或缺失内容
    原因:分辨率太高导致内存不足,或页面范围超出数据范围。
    解决:降低 resolution 参数(如 200),或检查地图系列范围设置。

按照以上步骤操作,即使是 ArcPy 新手也能轻松制作专业地图册。祝你制图愉快!

http://www.jsqmd.com/news/387318/

相关文章:

  • 2026年2月,这些靠谱异宠医院值得关注排行,宠物内科专家/腹腔镜绝育/宠物医院/宠物骨科专家,异宠专家哪家最好 - 品牌推荐师
  • 生产环境自go-zero走进微服务最佳实践与性能优化
  • 深度测评!研究生专属AI论文写作软件 —— 千笔ai写作
  • 完整教程:微信小程序WXSS 模板样式
  • 格子玻尔兹曼方法(LBM)中的MRT作用力模型
  • 互联网大厂Java求职面试实录:技术栈深度问答与业务场景解析
  • OpenClaw终于有了图形界面,一键安装使用你的24小时AI 研究助手!
  • 初学者福音!2026年值得入手的入门古筝盘点,瑶鸾古筝Y103系列(梦蝶),古筝生产厂家找哪家 - 品牌推荐师
  • 使用 ArcPy 快速统计 OD 线在网格中的起点-终点流量
  • 2025-2026年公寓装修、酒店翻新、商业办公装配式公司怎么选?这份选购指南帮你搞定 - 匠言榜单
  • 【诚挚邀请】为我的2025博客之星评选投上宝贵一票! - 教程
  • OpenClaw 工具策略配置完全指南
  • OpenClaw Node 节点完全指南
  • 题解:P13535 [IOI 2025] 纪念品(souvenirs)
  • 【UI自动化测试】4_web自动化测试 _元素定位(重点)
  • Python数据分析:时间序列数据分析
  • 鱼类异常状态检测数据集VOC+YOLO格式3895张2类别
  • 算法学习日记 | 双指针
  • Spring注解方式整合Mybatis
  • @Import整合第三方框架原理
  • 使用 Google Earth Engine 快速导出 Copernicus GLO-30 和 ASTER GDEM 高程数据
  • 现代控制理论(1)—— 概论
  • 05]delphi10.3中richedit中删除线
  • 关于学习技术栈的思考
  • 实测才敢推!自考必备的降AI率平台 —— 千笔·专业降AIGC智能体
  • 【Python】从0到1完成轻量级接口测试工具:基于Python+FastAPI+Pytest
  • 适用于室内和室外的集成式LED PCBA解决方案
  • 基础入门 Flutter for OpenHarmony:battery_plus 电池状态监控详解
  • ArcPy 脚本:批量生成郑州市 1990-2019 年空间分析结果(核密度、热点、平均中心、标准差椭圆)
  • 这次终于选对!圈粉无数的一键生成论文工具 —— 千笔AI