1.数据准备
1.1在MXD文档中以其中一个图斑为例,准备好样式。
类似于下图,图层 重点居住单元 是需要分图斑出图的图层,图层 重点居住单元01 是每个图斑出图所需要的边框, 图层 重点居住单元遮罩 是给红色边界外添加白蒙蒙的遮罩。
1.2 在数据驱动页面 (ArcMAP上面空白处右击 勾选数据驱动页面)设置好参数。
1 处 需要 分图斑制图的 图层
2 处 每个图斑的名称字段 (本程序中名称字段需使用数值字段)
3 处 图斑排序字段(无关紧要,决定先后顺序)
4 处 110% 为缩放至图层的效果(适合图幅固定,比例尺不固定的出图模式)
1.3 简要熟悉一下 数据驱动页面 的属性表结构
基本上与 所需要分图斑出图的图层属性表一致
2. 代码部分
2.1 代码注意事项,代码过程中如有中文,需要在GIS创建脚本工具箱时,需关掉编译器的程序加载,并通过 记事本打开代码.py,确保编码格式为ANSI,其他编译器可能会默认保存成utf-8编码格式。
# -*- coding: cp936 -*-
import arcpy
from arcpy import env
import sys
stdi, stdo, stde = sys.stdin, sys.stdout, sys.stderr
reload(sys)
sys.stdin, sys.stdout, sys.stder = stdi, stdo, stde #以上为解决sys重载的问题
sys.setdefaultencoding('cp936')
arcpy.AddMessage("start")
MXD = arcpy.GetParameterAsText(0) #获取已配置好的数据驱动页面 的 MXD文档
fenqutuceng = arcpy.GetParameterAsText(1) #获取图片命名字段
PicName1 = arcpy.GetParameterAsText(2) #获取图片命名字段
biankuang = arcpy.GetParameterAsText(3) #获取边框图层
zhezhao = arcpy.GetParameterAsText(4) #获取遮罩图层
dingyichaxun = arcpy.GetParameterAsText(5) #定义遮罩内容,文本型,为运算符前内容
Output_folder = arcpy.GetParameterAsText(6) #保存路径
resolut = arcpy.GetParameterAsText(7) #设置分辨率
mxd=arcpy.mapping.MapDocument(MXD)
#图层序号是根据mx从上到下的顺利排列的,图层组也参与排序,可以用如下方式获取图层
'''
dlyr = fenqutuceng #arcpy.mapping.ListLayers(mxd)[4] #需要分图斑制图的数据源
dlyr01 = arcpy.mapping.ListLayers(mxd)[2] #红色边框
dlyr02 = arcpy.mapping.ListLayers(mxd)[3] #第四个图层 遮罩
'''
biankaunghouzhui = unicode(biankuang)[-4:] #utf-8编码一个中文占三个字符,Unicode 占一个
zhezhaohouzhui = unicode(zhezhao)[-4:]
print zhezhaohouzhui, biankaunghouzhui
arcpy.AddMessage(biankaunghouzhui) #打印边框图层名的后四位
arcpy.AddMessage(zhezhaohouzhui) #打印遮罩图层名的后四位
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.name.endswith(biankaunghouzhui):
dlyr01 = lyr
elif lyr.name.endswith(zhezhaohouzhui):
dlyr02 = lyr
else:
pass
for pageNum in range(0,mxd.dataDrivenPages.pageCount+1): #mxd.dataDrivenPages.pageCount+1
mxd.dataDrivenPages.currentPageID=pageNum
mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
PicName = mxd.dataDrivenPages.pageRow.getValue(PicName1)
dlyr01.definitionQuery = dingyichaxun + '=' + str(mapName)
dlyr02.definitionQuery = dingyichaxun + '<>' + str(mapName)
arcpy.mapping.ExportToJPEG(mxd, Output_folder+"\\"+str(PicName)+".jpg",resolution=int(resolut))
2.2 arcgis脚本工具实现
创建过程略
3. 参数解释 按填空顺序
3.1 输入已经准备好样式的MXD文件,并已完成第一步 数据驱动页面设置
3.2 输入需要按图斑出图的要素图层
3.3 输入3.2 图层中图斑的唯一编号字段,用于出图命名
3.4 输入图斑边框图层(第一张 红色虚线框 效果),该数据一般与3.2图层为同一要素(数据)源,若否,也要有与3.2图层有相同且对应 的名称字段(第二张图中的 2号 色框 的名称字段),图层命名后四位需具有唯一标识性。
3.5 输入 3.4边框外的蒙版遮罩图层,要求同3.4
3.6 输入字段名,用于边框和遮罩两个图层 的 “”定义查询“” 内容设置,与3.4 所提到的名称字段 相同
3.6 输出图片的保存文件夹
3.7 输出图片的保存分辨率,这里只为保存为JPG, 如需PDF,将最后一行代码改成toPDF, 并修改类型为.pdf.
--------------------------------------分割线 2022年07月04日更新---------------------------------------------------
1. 当名称字段 被改为 文本型 时.需使用以下替换对应部分,
注意遮罩和边框,都应有对应的 文本型 字段
dlyr01.definitionQuery = dingyichaxun + '='+ '\''+str(PicName)+'\''
dlyr02.definitionQuery = dingyichaxun + '<>' + '\''+str(PicName)+'\''
2. 当需要批量出 索引图时,在 数据驱动页面 将范围 改成 页面单位