arcpy批量化出图浅试

需求

遥感反演的多项水质指标,虽然有模板,但一个个打开mxd文件替换源,整饰出图,还是挺麻烦的,于是学了下arcpy,简单用一下,省时间。

数据列表

  • 水质指标tif
  • 行政区划shp
  • 地名shp
  • 水系名shp
  • 影像底图tif

环境搭建

由于arcgis在安装时默认就安装了python2.7,用pycharm设置一下环境就可以

在这里插入图片描述

模板文件制作

首先利用arcgis制作一个模板,图层按顺序放置,其他的坐标系、图例、标题等正常放置即可,达到能够正常出图的标准,将mxd文件保存。
在这里插入图片描述

读取mxd文件

# -*- coding:utf-8 -*-
import arcpy
import os
import sys
reload(sys)
# 添加中文支持
sys.setdefaultencoding('utf8') 
# 允许覆盖同名文件
arcpy.env.overwriteOutput = True

# 设定mxd路径
input_mxd = r'E:\Zph\Python\arcgis0907\input\muban\test.mxd'
# 读取mxd文档对象
mxd = arcpy.mapping.MapDocument(input_mxd)
# 数据框(图层),返回的是列表,取第一个
df = arcpy.mapping.ListDataFrames(mxd)[0]
# 数据框下的各个文件
lyr_list = arcpy.mapping.ListLayers(mxd)
lyr_names = []
for lyr in lyr_list:
    print lyr.name
	lyr_names.append(lyr.name)

C:\Python27\ArcGIS10.8\python.exe E:/Zph/Python/arcgis0907/test1.py
CODMn
行政区划
行政地名_Clip
水系名
底图

进程已结束,退出代码0
  • 这里就把数据框里所有的图层列出来了,根据需求,目前只需要将第一项水质指标替换成别的指标就可以了。

替换指标文件

# 替换指标tif
lyr_list[0].replaceDataSource(wq_filepath,'RASTER_WORKSPACE', wq_filename, True)
# 将拉伸更新一下
arcpy.mapping.UpdateLayer(df, lyr_list[0], lyr_list[0], True)
  • 我在mxd模板中设置的拉伸方式为最大最小值拉伸(并未修改最大最小值),替换后可以直接自动适应拉伸方式。
  • 但若在模板中修改了最大最小值,实测无法自动适应,还是会沿用mxd模型中设置的最大最小值进行拉伸。
  • 如替换底图,波段会与mxd文件中波段合成顺序对应。

替换文字要素

# 获取当前图层中的全部文字要素
element_list = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT")
# 如需更改
element_list[0].text = '修改后文字'
  • 替换之前,最好在mxd模板中设置好对齐方式,免得乱跑。

替换图片要素

# 获取当前图层中的全部图片要素
pic_list = arcpy.mapping.ListLayoutElements(mxd,"PICTURE_ELEMENT")
# 如需更改
pic_list[0].sourceImage = new_pic_path
  • 根据官方文档的说法,替换后的图片应该会与替换前图片的最长边对齐。

在这里插入图片描述

替换其他要素

总体思路就是利用ListLayoutElements函数读取元素列表,再一一进行匹配修改。

DATAFRAME_ELEMENT —数据框元素
GRAPHIC_ELEMENT —图形元素
LEGEND_ELEMENT —图例元素
MAPSURROUND_ELEMENT —地图整饰要素元素
PICTURE_ELEMENT —图片元素
TEXT_ELEMENT —文本元素

保存为新mxd

mxd.saveACopy("new.mxd")

导出png图片

arcpy.mapping.ExportToPNG(mxd, "export.png", resolution=300)
  • 很需要arcgis中导出时“按图形范围裁剪输出结果”的功能,但翻了好久没找到相关接口,arcgis pro好像提供了,之后再试吧。

将上述功能写成函数,循环全部水质指标文件,每一份出一个png,保存一个mxd就完成了。半天的活3分钟完成,快乐~

欢迎关注VX:Hzz的地球调查组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值