arcgis批量出gis图

本文介绍如何在arcgis10.2环境下,通过Python2.7和arcpy模块,批量处理GIS地图的生成。首先设置工作空间,然后读取文件夹中的mxd文件,接着遍历并激活这些文件,将它们与统一底图结合,并保存为新的GIS文件。在遍历过程中,将图层文件导入到底图mxd中,并修改标题、图例等元素,确保每张地图的元素位置居中。最后,利用saveACopy方法保存处理后的GIS地图。

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)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值