尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ArcGIS卫片图斑批量出图:Data Driven Pages与arcpy脚本实战
简介这份资源面向使用ArcGIS处理卫片图斑的GIS从业者与测绘人员聚焦按图斑批量导出JPG图片这一高频需求帮助解决手动逐张出图耗时低效的问题。资源包共1个doc文档约29KB以图文步骤形式讲解数据驱动页面配置、布局动态文本设置及Python脚本批量出图思路并附有可直接参考的arcpy示例代码涵盖图层与名称字段指定、排序与比例尺设定、ExportToPNG导出参数调整等关键环节。内容还涉及动态文本展示图斑编号、所在村、面积与类型等信息便于每张成图携带对应属性。目前已有8293人学习下载适合具备ArcGIS 10.2及以上环境、希望掌握自动化出图流程的中级用户参考可据此快速搭建批量出图方案并迁移到自身项目。1. 卫片图斑批量出图从手动一张张点到脚本一键跑完手里压着几百个卫片图斑每个图斑要单独出一张 JPG还要带上图斑编号、面积、类型这些信息——这事要是纯手工在 ArcMap 里一张张切、一张张导干到后半夜也出不完。ArcGIS 按图斑批量出图这套流程核心就是拿 Data Driven Pages数据驱动页面当引擎再用 arcpy 脚本把「翻页 导出」这个动作循环起来。它解决的不是画图问题而是「同一套布局模板按属性表逐行换内容、逐行导文件」的重复劳动。适合手里有卫片图斑层、需要按图斑出专题图的 GIS 从业者ArcGIS 10 以上版本都能跑10.2 是当年最稳的搭配。下面把我自己拆过、跑过、翻过车的完整链路摊开讲。2. 数据驱动页面配置让每个图斑自动占一页2.1 为什么是 Data Driven Pages 而不是手动切图批量出图这件事本质上要解决三个变量范围跟着图斑走、标题跟着属性走、文件名跟着字段走。手动切图是三个变量全靠人盯Data Driven Pages 是把这三个变量绑到图斑层的属性表上让 ArcMap 自己按行驱动。它的工作机制不复杂你指定一个索引图层Index Layer这个图层的每一条记录对应输出的一页再指定一个名称字段Name Field这个字段的值会成为页面的标识后面脚本拿它当文件名排序字段决定出图顺序显示范围和比例尺决定每页的视野。配置完之后ArcMap 的布局视图里就多了一套「翻页」能力你翻到第几页地图范围就跳到第几个图斑。选它而不是自己写游标遍历要素、逐个改范围理由很直接Data Driven Pages 把范围计算、比例尺锁定、动态文本刷新这几件事都封装好了脚本只需要负责「翻页」和「导出」两个动作。自己用 arcpy 的 extent 去算遇到不规则图斑、需要留边距、比例尺要统一的时候边界情况能写到你怀疑人生。提示索引图层不一定是图斑层本身。如果图斑太碎、一个页面想覆盖多个相邻图斑可以单独做一个「出图单元」图层当索引用空间连接把图斑属性挂上去。2.2 配置步骤与关键参数打开 ArcMap在 Customize → Toolbars 里勾上 Data Driven Pages工具栏就出来了。点 Setup 进入配置对话框几个参数逐个说清楚参数项作用常见设置Layers指定索引图层选卫片图斑层或专门的出图单元层Name Field页面名称来源脚本取它当文件名图斑编号字段如 TBBHSort Field出图顺序图斑编号或面积按需Extent每页显示范围一般选「Best Fit」或「Center And Scale」Scale比例尺统一比例尺填固定值或按图斑大小自适应Rotation页面旋转图斑有方向要求时按角度字段旋转配置里最容易翻车的是 Extent 和 Scale 的组合。选「Best Fit」会让每个图斑自动缩放到合适大小但比例尺就不统一了出图看着大小不一选「Center And Scale」配合固定比例尺图斑大小一致但特别大的图斑可能超出页面。卫片图斑出图一般要求比例尺统一方便比对所以我通常锁固定比例尺再给页面留够边距。配置完点 OK在布局视图里翻几页看看范围是不是跟着图斑跳、动态文本是不是跟着变。这一步没验证就去写脚本后面导出来一堆空图或者错位图排查起来更费劲。2.3 布局里的动态文本怎么加动态文本是让每张图「有信息量」的关键。在布局视图里 Insert → Dynamic Text能看到一堆可选类型Data Driven Page Name、Data Driven Page Attribute、Data Driven Page Number 等。Data Driven Page Name插入当前页名称也就是 Name Field 的值通常放标题位置。Data Driven Page Attribute插入索引图层任意字段的值。卫片图斑场景下把所在村、图斑面积、图斑类型这几个字段各插一个出图时每张自动带对应图斑的信息。Data Driven Page Number插入「第 X 页 / 共 Y 页」方便归档。插入的时候注意字段类型。面积字段如果是双精度直接插进去可能带一长串小数在动态文本属性里可以设格式保留两位就行。类型字段如果是编码要么在属性表里先算好中文要么在动态文本里做映射别导出来一堆「01」「02」看不懂。布局调好后保存 mxd。这一步的成果是手动翻页能正常出图动态文本内容正确。脚本只是把这个手动过程自动化手动都不对脚本只会错得更快。3. arcpy 批量导出脚本循环、命名与格式控制3.1 脚本骨架与逐行拆解原始脚本很短但每一行都有讲究。先看完整版再逐段说# coding:utf-8 import arcpy # 打开配置好 Data Driven Pages 的地图文档 mxd arcpy.mapping.MapDocument(rF:\GeoData\ChinaArea\ChinaVector.mxd) # 从第 1 页遍历到最后一页 for pageNum in range(1, mxd.dataDrivenPages.pageCount 1): # 切换到当前页 mxd.dataDrivenPages.currentPageID pageNum # 取当前页名称字段的值作为输出文件名 mapName mxd.dataDrivenPages.pageRow.getValue( mxd.dataDrivenPages.pageNameField.name ) print mapName # 导出当前页为 PNG arcpy.mapping.ExportToPNG( mxd, rF:\GeoData\ChinaArea\Province\\ mapName .png ) print ok逐行说。arcpy.mapping.MapDocument加载 mxd路径用原始字符串r...避免反斜杠被当转义符——这是 Windows 路径下最常见的翻车点不写r前缀\t、\n会被解释成制表符和换行路径直接废掉。mxd.dataDrivenPages.pageCount是总页数等于索引图层的记录数。循环用range(1, pageCount 1)因为currentPageID是从 1 开始计数的不是 0。原始脚本写的是range(1, pageCount)会漏掉最后一页这是个隐蔽的 off-by-one图斑少的时候不容易发现几百个图斑跑完少一张对账才对得出来。currentPageID pageNum是翻页动作执行后 mxd 的当前页面就切过去了布局里的动态文本、地图范围全部刷新到对应图斑。pageRow.getValue(pageNameField.name)取当前页名称字段的值。pageRow是当前页对应的属性行pageNameField是配置时指定的名称字段。取出来的值直接当文件名用。ExportToPNG导出当前布局。第一个参数是 mxd 对象第二个是输出路径。路径拼接用注意目录末尾要有反斜杠否则Province和文件名会粘在一起。3.2 导出格式与分辨率参数ExportToPNG只是导出函数家族里的一个。arcpy.mapping 提供了一整套函数输出格式典型用途ExportToPNGPNG无损、带透明通道适合后续叠加ExportToJPGJPG体积小适合汇报、存档ExportToPDFPDF矢量保留好适合打印ExportToTIFFTIFF带地理信息适合再分析ExportToBMPBMP无压缩体积大这些函数都支持resolution参数控制 DPI。默认导出用的是屏幕分辨率出图偏糊。卫片图斑出图如果要打印或者细看把 resolution 提到 200 或 300arcpy.mapping.ExportToJPG( mxd, rF:\GeoData\ChinaArea\Province\\ mapName .jpg, resolution300 )JPG 还可以传world_fileTrue生成坐标世界文件方便图片带地理参考。但注意 JPG 是有损压缩图斑边界线细的时候会有噪点对精度要求高就换 PNG 或 TIFF。注意导出分辨率拉高单张图体积和耗时都会涨。几百个图斑跑 300 DPI内存吃紧的机器可能中途卡死。稳妥做法是先拿 5 个图斑试跑看单张耗时和体积再决定全量参数。3.3 文件名清洗与目录预建mapName直接当文件名前提是名称字段的值「干净」。实际数据里图斑编号可能带斜杠、冒号、星号这些 Windows 文件名非法字符也可能有前后空格。不清洗脚本跑到那一页直接抛异常前面导出的全白跑。常见做法是加一层清洗import re def clean_name(name): # 去掉首尾空格 name name.strip() # 把 Windows 非法字符替换成下划线 name re.sub(r[\\/:*?|], _, name) # 空值兜底 if not name: name unnamed return name mapName clean_name( mxd.dataDrivenPages.pageRow.getValue( mxd.dataDrivenPages.pageNameField.name ) )re.sub那段正则把反斜杠、斜杠、冒号、星号、问号、双引号、尖括号、竖线全部替换成下划线这几个是 Windows 文件名明确不允许的字符。空值兜底是防止某些图斑名称字段为空空字符串拼出来的路径会变成目录本身导出直接失败。输出目录也要预建。脚本不会自动创建不存在的文件夹路径里Province目录不存在第一张图就报错。跑之前手动建好或者在脚本开头用os.makedirs判断创建import os out_dir rF:\GeoData\ChinaArea\Province if not os.path.exists(out_dir): os.makedirs(out_dir)3.4 在 Notepad 里跑脚本的实操细节原始流程提到用 Notepad 执行 Python图的是轻量、改完就能跑。Notepad 本身不执行 Python是靠 NppExec 插件调用系统 Python 解释器。配置路径Plugins → NppExec → Execute输入类似python $(FULL_CURRENT_PATH)$(FULL_CURRENT_PATH)是 Notepad 的宏代表当前文件完整路径。保存脚本时另存为.py后缀编码选 UTF-8因为脚本头有# coding:utf-8编码不对中文注释和中文文件名都会乱。这里有个版本坑ArcGIS 10.2 自带的是 Python 2.7print是语句不是函数脚本里写print mapName没问题写print(mapName)也能跑但语义不同。如果系统里同时装了 Python 3Notepad 调用的可能是 3.xprint mapName直接语法错误。稳妥做法是明确指向 ArcGIS 自带的解释器路径通常在C:\Python27\ArcGIS10.2\python.exe这类位置。跑起来后控制台会逐行打印图斑名称最后打印ok。看到ok再去目标文件夹核对数量别中途瞄一眼就开始数。4. 避坑与排查批量出图最常见的五类翻车4.1 导出图片数量对不上现象索引图层有 300 个图斑导出目录只有 299 张或者多出一张空图。原因循环范围写错是最常见的。range(1, pageCount)少一页range(0, pageCount)多一页且第 0 页无效。另外索引图层如果有重复的名称字段值后导出的会覆盖先导出的数量也会少。解决循环统一写range(1, pageCount 1)。名称字段先做重复检查在属性表里用字段计算或 Python 脚本找出重复值重复的加序号后缀区分。4.2 动态文本显示为字段名而不是值现象导出的图上标题位置显示的是「TBBH」而不是具体图斑编号。原因动态文本插入时选错了类型插成了普通文本或者字段名占位没有绑定到 Data Driven Page Attribute。也可能是 mxd 保存前没刷新页面。解决重新插入动态文本确认选的是 Data Driven Page 相关类型。插入后在布局里翻几页看文本是否跟着变。不变就是没绑对。4.3 路径报错或文件导到奇怪位置现象脚本报 IOError或者图片导到了上一级目录、文件名被截断。原因路径没加r前缀导致转义目录末尾漏了反斜杠导致路径拼接错误文件名含非法字符。解决所有路径加r前缀拼接时确保目录以\结尾文件名走清洗函数。这三条一起上路径类问题基本绝迹。4.4 比例尺不统一或图斑超出页面现象有的图斑占满整页有的只占一个小角或者大图斑被裁掉一部分。原因Extent 选了 Best Fit 导致比例尺自适应或者固定比例尺下页面边距留得不够。解决要统一比例尺就选 Center And Scale 加固定值然后在布局里把数据框缩小一点留边距。要自适应就接受比例尺不统一但至少保证图斑完整。两者不可兼得按出图目的选。4.5 脚本跑一半卡死或内存溢出现象跑到一两百张时 ArcMap 无响应或者报内存错误。原因mxd 对象在循环里持续累积状态高分辨率导出尤其吃内存。Python 2.7 的内存回收也不够积极。解决分批跑比如每 100 个图斑重启一次脚本用参数控制起止页。或者降低导出分辨率。跑之前关掉 ArcMap 里其他不相关的地图文档释放内存。5. 进阶把出图脚本改成可复用工具跑通基础版之后我一般会把脚本往「可复用」方向改省得每次换项目都重写。核心思路是把硬编码的路径、字段名、格式参数抽成变量再包一层命令行参数。# coding:utf-8 import arcpy import os import re import sys def clean_name(name): name name.strip() name re.sub(r[\\/:*?|], _, name) return name if name else unnamed def batch_export(mxd_path, out_dir, fmtJPG, dpi200): if not os.path.exists(out_dir): os.makedirs(out_dir) mxd arcpy.mapping.MapDocument(mxd_path) total mxd.dataDrivenPages.pageCount for pageNum in range(1, total 1): mxd.dataDrivenPages.currentPageID pageNum raw mxd.dataDrivenPages.pageRow.getValue( mxd.dataDrivenPages.pageNameField.name ) name clean_name(str(raw)) out_path os.path.join(out_dir, name . fmt.lower()) if fmt.upper() JPG: arcpy.mapping.ExportToJPG(mxd, out_path, resolutiondpi) elif fmt.upper() PNG: arcpy.mapping.ExportToPNG(mxd, out_path, resolutiondpi) print(%d/%d %s % (pageNum, total, name)) del mxd print(done) if __name__ __main__: batch_export( rF:\GeoData\ChinaArea\ChinaVector.mxd, rF:\GeoData\ChinaArea\Province, fmtJPG, dpi200 )改动点说几个。os.path.join拼路径跨平台且自动处理分隔符比手写稳。del mxd在循环结束后显式释放地图文档对象配合分批跑能缓解内存压力。进度打印改成当前页/总页 名称跑长任务时一眼能看出卡在哪一页。格式和 DPI 做成参数换需求不用改函数体。验证方法很直接拿一个只有 3 到 5 个图斑的小索引层先跑核对三件事——数量对不对、文件名对不对、图上动态文本对不对。三样都过再换全量数据。这个习惯是我踩过「跑了两小时发现字段绑错」的坑之后养成的从那以后每次改完脚本都强制先拿小数据走一遍全流程确认无误再上生产数据。如果图斑量特别大还可以在循环里加异常捕获单页失败不中断整体把失败页号记到日志里跑完统一补。这样即使个别图斑数据有问题也不至于让整批任务前功尽弃。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

AI赋能集成电路教育数字化:从知识切片到产教融合的落地路径

AI赋能集成电路教育数字化:从知识切片到产教融合的落地路径

简介:北京邮电大学发布的《2024年AI赋能集成电路教育数字化发展白皮书(1.0版)》,系统剖析AI与集成电路教育深度融合的路径,面向高校集成电路专业教师、教育管理者及相关产业人士,直接回应人才缺口、结构失衡…

📅 2026/10/24 13:57:29
人口预测的回归分析实战:从线性到非线性建模

人口预测的回归分析实战:从线性到非线性建模

简介:本资源是一份面向统计学专业本科生及数据分析初学者的课程实验论文,聚焦于人口数量预测这一典型现实问题,系统讲解回归分析建模全流程。内容覆盖一元线性回归(以人口与粮食产量关系为案例)、多元线性回归&#xf…

📅 2026/10/24 13:57:29
Kube-OVN:基于OVN的Kubernetes声明式SDN网络详解

Kube-OVN:基于OVN的Kubernetes声明式SDN网络详解

简介:本资源是一份面向Kubernetes运维工程师、云原生网络架构师及容器平台建设者的Kube-OVN深度技术文档,系统解析这一CNCF沙盒项目的原理、能力与落地实践。文档覆盖其作为SDN增强型容器网络方案的核心价值:在功能上支持子网管理、VPC多租户…

📅 2026/10/24 13:57:29
MORE NEWS

更多资讯

📰

系统分析师真题解析:从总线到隔离性,构建技术地图

简介:这份资源是2024上半年系统分析师综合知识真题的答案与解析文档,面向备考软考系统分析师(高级)的考生,尤其适合已完成基础复习、需要以真题检验知识覆盖与查漏补缺的中高级备考者。内容围绕综合知识科目展开&#…

📰

3GPP协议中文版:WCDMA术语、缩略语与版本对照指南

简介:面向移动通信协议学习者与WCDMA系统开发人员的3GPP中文参考资料,聚焦IMT-DS FDD(WCDMA)系统无线接口物理层的术语、定义与缩略语。内容依据3GPP Release-99技术规范TS 25.990 V3.0.0整理,源自信息产业部电信研究院2001年首次发布的通信标…

📰

SAP物料替代原理与配置:从非连续标识到BOM替代组

简介:SAP-PP 替代物料操作完全手册是一份面向 SAP 实施顾问、生产计划及物料管理人员的实操文档,系统讲解生产订单中替代物料的不同类型与配置方法。内容涵盖平行切换、非平行切换、后继物料、物料后继组等核心概念,覆盖批量更换组件、只消耗…

📰

血型遗传查询接口接入教程:参数、请求示例与返回结果解读

做科普教育或亲子问答类应用时,常会遇到“父母都是 A 型,孩子会不会是 O 型”这类问题。血型遗传查询接口就是根据父母血型返回子女可能和不可能的血型。本文从第一次调用讲起:要准备什么、最小请求怎么发、返回值怎么看。 一、适用场景 科…

📰

DNS 记录查询接口接入教程:参数、请求示例与结构化返回解读

排查域名解析问题或做域名资产盘点时,经常需要查 A、MX、CAA 等各类 DNS 记录。DNS 记录查询接口支持 8 种标准类型和 ANY 模式,并把结果做结构化解析。本文从第一次调用讲起:要准备什么、最小请求怎么发、返回值怎么看。 一、适用场景 解析…

📰

AI写专著主流工具盘点:多款AI专著写作工具实测助力20万字创作

写学术专著真的不容易,不光是写出来那么简单,更重要的是能不能顺利出版、被认可。在出版市场上,专著的读者不多,出版社对题目的学术价值和作者自身的影响力要求很高。很多书稿虽然写完了初稿,却因为“缺少新意”或者“…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬