当前位置:   article > 正文

ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片_arcgis批量导出mxd

arcgis批量导出mxd

功能说明:

使用arcgis制图,有时候需要对某个图层中的所有要素进行制图,布局样式基本不变,这时候使用 数据驱动页面 工具配合arcpy代码就能非常方便的实现了。
本文以XZQ图层为数据层,制作每个村的MXD文档,并输出村的示意图。
本代码目标为:

  • 1 根据XZQ图层中的字段,如村名字段”XZQMC“,逐个保存MXD文档。
  • 2 同步输出村示意图。

1 准备工作

打开ArcMap,加载XZQ等数据层,设置页面布局,添加要素如指北针、比例尺等。

设置数据驱动页面

数据图层选择XZQ,名称字段选择”XZQMC"(此处的字段代码中会引用,作为MXD的名称字段),排序字段一般选择“BSM”。 注意: 行政区名称不能有重复值,即名称字段不能重复,否则在保存MXD文档时会报错。根据需要也可以选择“BSM”、“TBBH”等作为名称。

请添加图片描述

页面范围设置

1 地图范围是数据驱动显示的要素与图框的距离,默认最佳大小值是125%,要素与图框间距适中,如果设置100%即为要素最外边界与图框相交,此时页面布局被数据驱动要素填满,页面不美观。该比例可以尝试修改,最终显示效果还受到 “页面显示比例尺” 制约;
2 页面显示比例尺,比例尺四舍五入到10 、100、1000等整数值,会自动调整要素的显示大小。
3 居中显示并保存当前比例,此选项要素显示适中,但比例尺较为凌乱,不宜在图面上再添加比例尺要素。、
4 数据驱动比例,可以在要素属性表中设置一个比例尺字段,针对每个要素设置一个最佳比例尺,在此处调用,则数据驱动比例尺按设
定比例尺显示,一般用在特别精准的制图。

驱动2

保存MXD文档

保存设置好的MXD文档,因为我的软件环境是ArcGIS10.8,python2.7版本,对中文支持较差,所以最后为全英文目录。

2 代码分段

(1)设定基础数据

//设定基础
mxdfile = r"d:/test.mxd"  # 设置完毕数据驱动的MXD文档位置
fc = r"d:/test.mdb/XZQ"  # 数据驱动页面的 图层名称
path = r'd:/mulu'  # 修改自己想要存放的目录
mxd = arcpy.mapping.MapDocument(mxdfile) # 打开 mxd文档
  • 1
  • 2
  • 3
  • 4
  • 5

我是使用Pycharm来运行代码的,如果想要将代码复制粘贴到ArcGIS的python窗口中运行,最后一行代码可以修改为:

//在ArcGIS中运行代码
mxd = arcpy.mapping.MapDocument("CURRENT") # 即 在mxd文档打开状态下,调用当前活动MapDocument
  • 1
  • 2

(2)调用数据驱动

假设XZQ图层有100个要素,数据驱动页面的页面,是从1开始顺序排序到100。
而python的循环范围range(*a,b)是从 a 开始至 “b-1” 结束,即数量比(a,b)区间少一个,即99个;
如果没有 a ,直接 range 100 ,则默认从0开始,至 99结束,但是数据驱动页面起始页1,没有起始页0;
所以 range范围为(1,数据驱动页数 +1),即range(1,101),从1开始至100,刚好100页。

//调用数据驱动
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
    mxd.dataDrivenPages.currentPageID = pageNum
    fieldname = u"xzqmc"  # 修改自己想要的字段,双引号内为字段名称*必填*
    # fieldname = u"BSM"  # 修改自己想要的字段,双引号内为字段名称*必填*
    a = mxd.dataDrivenPages.pageRow.getValue(fieldname) # 名称字段,调用 XZQ层的“xzqmc”字段数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(3)循环保存MXD文档和导出图片

调用mxd.saveACopy()和arcpy.mapping.ExportToJPEG()保存文档和图片到 (1)设定基础数据 设置的目录中,
文档名称调用 (2)调用数据驱动 设置的名称字段 a
如果 该目录不存在,可以判断并新建该目录。代码如下:

//循环保存MXD文档和导出图片
    if os.path.exists(path):
        outpic = os.path.join(path, str(a))
        print(outpic)
        arcpy.mapping.ExportToJPEG(mxd, outpic, resolution=300)  # 按照字段名称出图
        mxd.saveACopy(outpic + ".mxd")  # 按照字段名称 保存mxd
    else:
        print("当前目录下不存在该文件夹,调用 makedirs 创建该文件夹")
        os.makedirs(path)
        outpic = os.path.join(path, str(a))
        print(outpic)
        arcpy.mapping.ExportToJPEG(mxd, outpic, resolution=300)
        mxd.saveACopy(outpic + ".mxd")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(4)关闭MXD文档

循环完毕后,关闭MXD文档,清除缓存。

//关闭文档
del mxd
  • 1
  • 2

(5)结果展示

XZQ图层中按照每个村的要素保存了一个MXD文档,并同步导出了该村图片。效果如下:
请添加图片描述
请添加图片描述

3 完整代码

# -*- coding: utf-8 -*-
import sys
import arcpy
import os

reload(sys)
sys.setdefaultencoding('utf-8')

mxdfile = r"d:/test.mxd"
fc = r"d:/test.mdb/XZQ"
path = r'd:/mulu'  # 修改自己想要存放的目录
mxd = arcpy.mapping.MapDocument(mxdfile)

for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
    mxd.dataDrivenPages.currentPageID = pageNum
    fieldname = u"xzqmc"  # 修改自己想要的字段,双引号内为字段名称*必填*
    # fieldname = u"BSM"  # 修改自己想要的字段,双引号内为字段名称*必填*
    a = mxd.dataDrivenPages.pageRow.getValue(fieldname)
    if os.path.exists(path):
        outpic = os.path.join(path, str(a))
        print(outpic)
        arcpy.mapping.ExportToJPEG(mxd, outpic, resolution=300)  # 按 照字段名称出图
        mxd.saveACopy(outpic + ".mxd")  # 按照字段名称 保存mxd
    else:
        print("当前目录下不存在该文件夹,调用 makedirs 创建该文件夹")
        os.makedirs(path)
        outpic = os.path.join(path, str(a))
        print(outpic)
        arcpy.mapping.ExportToJPEG(mxd, outpic, resolution=300)
        mxd.saveACopy(outpic + ".mxd")

del mxd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

4 后记

以上代码演示了数据驱动工具配合arcpy代码快速批量出图,单个MXD文档方便后期单独维护,注意将调用的 数据库 (.mdb 或者 .gdb)一并保存,否则数据驱动将丢失链接。syq

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/310813
推荐阅读
相关标签
  

闽ICP备14008679号