Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图
主要功能:按图斑批量出图
实际应用案例:有一个卫片图斑层(1、2、3卫片图斑),按1 2 3每个图斑出一个JPG图
主要参考文档:https://www.cnblogs.com/sunnyeveryday/p/6506347.html
功能准备:
第一 Arcgis10以上 9不行
第二 用 Data Driven Pages (数据页面驱动)
主要两个步骤
第一 用Data Driven Pages 配置好
第二 用python程序 实现批量出图
前提条件:
1. 安装了Arcgis10.2
2. 不安装notepad++,完全可以,按txt打开编辑就行,或者把下面的代码复制到txt,然后保存,把后缀改为.py,然后双击执行就可以。
执行前确定,存的文件夹存在,路径没有错误
如果安装个notepad++ 文本编辑器,执行python程序方便一点,下面是一点python的教程
其实没必要看后面的教程
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
下面是具体步骤
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)
----