arcgis批量出gis图
接上一篇,把批量导出的图层利用统一底图,批量导出为gis文件。
工作空间
arcgis10.2,Python2.7以及arcpy。导入包如下:
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import arcpy as arc
import os
import re
读取文件夹下文件
在path中写入原mxd文件路径,以便读取文件名(有点儿多余,懒得改了)。new_path为生成的图层文件夹路径,以便读取批量生成的图层文件及名称。mxd_list放mxd文件名称,lyr_list放图层文件名称不带后缀,mxd_list_test放mxd文件名称不带后缀。
- 三水转换路径(原mxd文件)

- 图层路径(为批量导出图层,且图层和原mxd文件除后缀外,名称一致)

path = ur'G:\三水转换图' # 加u解码中文
new_path = ur'G:\lay'
filename = os.listdir(path) # 可读出文件夹下所有文件名称
filename_new = os.listdir(new_path)
mxd_list = []
lyr_list = []
mxd_list_test = []
for i in filename:
if re.findall(".mxd$",i): # 正则表达式,$,匹配字符串最后的字母为$前的字母
mxd_list.append(i)
mxd_list_test.append(i.split(".")[0] + "." + i.split(".")[1])
for j in filename_new:
if re.findall(".lyr$",j):
lyr_list.append(j.split(".")[0] + "." + j.split(".")[1])
print lyr_list
print mxd_list_test
遍历并激活mxd文件
这里为遍历mxd_list,也就是原mxd文件名称列表,遍历后取出mxd文件名称。然后利用mapdocument激活底图mxd,即1.mxd,这个图为新的底图,需要把图层文件夹下的图层导入到这个底图中,并生成新的gis图。
- 新底图1.mxd(有标题、图例、指北针等等要素)

for i in mxd_list:
mxd_name = i.decode('utf-8')
print(path + "\\" + mxd_name) # mxd文件绝对路径
file_name = mxd_name.split(".")[0] + "." + mxd_name.split(".")[1] # 获取mxd文件的名称作为照片的名字
mapdoc = arc.mapping.MapDocument(r"G:\lay\1.mxd") # 激活相应mxd文件
另存gis图
利用遍历mxd文件名称(file_name)和批量生成的图层文件列表做判断,如果遍历的名称在图层名称中则将相应图层添加到激活的mxd中。ListDataFrames可以读取激活mxd中的所有图层组,Layer则可以读取相应路径下的lyr文件。利用AddLayer可以在选定图层组中添加图层文件。ListLayoutElements可以读取激活的mxd文件中的标注,如图例、标题、指北针等都可以改,加入"TEXT_ELEMENT"参数后,可以读取mxd中的所有文本,打印后发现-3位置为图片标题。利用text可以改文本的内容,elementPositionX可以更改锚点的位置,我们可以利用中间的锚点,使得每一张图的标题基本居中。最后利用saveACopy另存mxd文件即可。
if file_name in lyr_list:
df = arc.mapping.ListDataFrames(mapdoc)[0]
lay_add = arc.mapping.Layer(r"G:\lay\\" + file_name + ".lyr")
arc.mapping.AddLayer(df,lay_add)
title = arc.mapping.ListLayoutElements(mapdoc,"TEXT_ELEMENT")[-3] # 取出标题
title.text = mxd_name.split(".")[1] # 更改标题为文件名
title.elementPositionX = 90 # 更改X锚点位置
print title.text
# print lay_add
mapdoc.saveACopy(r"G:\lay2\\" + i)
最终效果

代码
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import arcpy as arc
import os
import re
path = ur'G:\三水转换图' # 加u解码中文
new_path = ur'G:\lay'
filename = os.listdir(path) # 可读出文件夹下所有文件名称
filename_new = os.listdir(new_path)
mxd_list = []
lyr_list = []
mxd_list_test = []
for i in filename:
if re.findall(".mxd$",i): # 正则表达式,$,匹配字符串最后的字母为$前的字母
mxd_list.append(i)
mxd_list_test.append(i.split(".")[0] + "." + i.split(".")[1])
for j in filename_new:
if re.findall(".lyr$",j):
lyr_list.append(j.split(".")[0] + "." + j.split(".")[1])
print lyr_list
print mxd_list_test
for i in mxd_list:
mxd_name = i.decode('utf-8')
print(path + "\\" + mxd_name) # mxd文件绝对路径
file_name = mxd_name.split(".")[0] + "." + mxd_name.split(".")[1] # 获取mxd文件的名称作为照片的名字
mapdoc = arc.mapping.MapDocument(r"G:\lay\1.mxd") # 激活相应mxd文件
if file_name in lyr_list:
df = arc.mapping.ListDataFrames(mapdoc)[0]
lay_add = arc.mapping.Layer(r"G:\lay\\" + file_name + ".lyr")
arc.mapping.AddLayer(df,lay_add)
title = arc.mapping.ListLayoutElements(mapdoc,"TEXT_ELEMENT")[-3] # 取出标题
title.text = mxd_name.split(".")[1] # 更改标题为文件名
title.elementPositionX = 90 # 更改X锚点位置
print title.text
# print lay_add
mapdoc.saveACopy(r"G:\lay2\\" + i)
本文介绍如何在arcgis10.2环境下,通过Python2.7和arcpy模块,批量处理GIS地图的生成。首先设置工作空间,然后读取文件夹中的mxd文件,接着遍历并激活这些文件,将它们与统一底图结合,并保存为新的GIS文件。在遍历过程中,将图层文件导入到底图mxd中,并修改标题、图例等元素,确保每张地图的元素位置居中。最后,利用saveACopy方法保存处理后的GIS地图。

7084

被折叠的 条评论
为什么被折叠?



