ArcPY实现分图斑批量制图

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.  当需要批量出 索引图时,在 数据驱动页面 范围 改成 页面单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小酥muse

不想填问卷,打赏1元获得提取码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值