Arcgis 按图斑批量出图(按卫片图斑批量出图) 批量出JPG图(一个图斑一个jpg,一条数据一个jpg)

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)
----

评论 10 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

countsun

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值