Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图

主要功能:按图斑批量出图

实际应用案例:有一个卫片图斑层(1、2、3卫片图斑),按1 2 3每个图斑出一个JPG图

功能准备:

第一 Arcgis10以上 9不行

第二 用 Data Driven Pages

主要两个步骤

第一 用Data Driven Pages 配置好

第二 用python程序 实现批量出图

前提条件:

1. 安装了Arcgis10.2

2. 不安装notepad++,完全可以,按txt打开编辑就行,或者把下面的代码复制到txt,然后保存,把后缀改为.py,然后双击执行就可以。

执行前确定,存的文件夹存在,路径没有错误

如果安装个notepad++ 文本编辑器,执行python程序方便一点

下面是具体步骤

1. Data Driven Pages 这个自己看看,基本很好设置

打开ArcMap的Customize->Toolbars->Data Driven Pages,设置好图层、名称字段

(不能重复mxd.dataDrivenPages.pageNameField.name后面用到了,重复会发现图片缺失,因为文件名一样,前面被覆盖了;

)、排序字段、显示范围和比例尺,保存地图

mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)

这个是文件名,先in range(1,mxd.dataDrivenPages.pageCount+1): 这里改成in range(1,6):

出个6个试试看

2.layout 设置

这边可以 设置 动态文本,看看动态文本的帮助,就是说可以在界面上 显示当前图斑的,其他信息,比如 当前图斑行的,其他字段,比如所在村,卫片图斑的面积,卫片图斑的类型,卫片的图斑的其他信息 都可以

3. 在记事本打开( notepad++文本编辑器,有执行按钮),编辑两个路径 把下面这个文件另存为py后缀的文件,然后执行就行了。

# coding:utf-8
import arcpy
mxd=arcpy.mapping.MapDocument(r"F:\GeoData\ChinaArea\ChinaVector.mxd")
for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):
         mxd.dataDrivenPages.currentPageID=pageNum
         mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
print mapName
         arcpy.mapping.ExportToPNG(mxd,r"F:\GeoData\ChinaArea\Province\\"+mapName+".png")
print 'ok'

# 可以修改文件名称 ExportToPNG 可以看其他类似的ExportToXXX函数,设置jpg的大小等,参数,程序里边不要出现中文,中文可能失败,比如文件路径等最好不要有中文

4 到相应文件夹 查看这批JPG或者png格式的文件

F:\GeoData\ChinaArea\ChinaVector.mxd  这个是mxd存的地方 F:\GeoData\ChinaArea\Province\ 这个文件夹必须存在,

可以简单一点F:\GeoData f盘搞个文件夹GeoData

 range(1,mxd.dataDrivenPages.pageCount) 应该是mxd.dataDrivenPages.pageCount+1,以前不懂,现在看python是包括1,不包括后面的range(1,6) 只取到5

----20201010更新了下面的程序,多了个过滤  应用场景,就是一个图版一个图(相邻图版不显示,过滤掉了)

特别适合多个图斑相邻,图斑又很小的时候;或者分村出图的时候;

比如 30个村 每个村出一个图,把不是本村的过滤掉

--# coding:utf-8
 import arcpy
 mxd=arcpy.mapping.MapDocument(r"G:\lin.mxd")
 for lyr in arcpy.mapping.ListLayers(mxd):
     if lyr.name.startswith("cun12"):
       dlyr=lyr
     if lyr.name.startswith("lz01"):
       dlyr01=lyr
 for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):#mxd.dataDrivenPages.pageCount+1
   mxd.dataDrivenPages.currentPageID=pageNum
   mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
   print '[XZQMC] ='+"'"+mapName+"'"
   dlyr.definitionQuery ='[XZQMC] ='+"'"+mapName+"'"
   dlyr01.definitionQuery ='"LB_NAME" ='+"'"+mapName+"'"
   # shap文件这么过滤"TBYBH" ='XZ10065' 如果是数据库文件,过滤方式不一样的数据库格式[TBYBH] = 'XZ10009'
   # 数据库格式 dlyr.definitionQuery ='[TBYBH] ='+"'"+str(mapName)+"'"
   # shap格式 dlyr.definitionQuery ='"TBYBH" ='+"'"+str(mapName)+"'"
   arcpy.mapping.ExportToPNG(mxd,r"G:\lin500\\"+mapName+".png",resolution=500)
 print 'ok'

---这个是开了2个动态过滤,在cun12和lz01两个层里边开的过滤,可以开一个;

----2021.8.24 增加红色的地方(支持中文),改了紫色的地方,否则文件名如果mapName是数字会报错

# coding:utf-8
 import arcpy
import sys 
 reload(sys) 
 sys.setdefaultencoding('utf8')
mxd=arcpy.mapping.MapDocument(r"D:\gd.mxd")
 for pageNum in range(1,mxd.dataDrivenPages.pageCount+1):
          mxd.dataDrivenPages.currentPageID=pageNum
          mapName=mxd.dataDrivenPages.pageRow.getValue(mxd.dataDrivenPages.pageNameField.name)
          print mapName
          arcpy.mapping.ExportToPNG(mxd,r"D:\FKWT\\"+str(mapName)+"da22.png",resolution=200)
 ----