利用Python多进程,进行ARCGIS10.2批量出图

本文介绍了如何利用Python控制ARCGIS进行地理信息行业的批量地图制作,包括准备模板、设置查询、调整比例尺和导出不同格式文件的过程,通过多进程提高效率。
摘要由CSDN通过智能技术生成

     博主主要从事国土地理信息行业,经常遇到需要大批量出图的任务,刚好Pyhton可以控制ARCGIS进行后台出图,大大提高工作效率。

     在开始运行程序之前,需要将出图模板制作好,完善出图矢量的注记以及图面整饰等工作,最重要的是给布局界面的元素命名,方便出图程序调用,比如出图标题及图例等。

      准备好制图模板之后,就可以利用下面的Python代码在IDLE里面行多进程批量出图了。话不多说,源码奉上。

# -*- coding: cp936 -*-
import os
import arcpy
import arcpy.da as da
import multiprocessing
from multiprocessing import Pool

def chutu(variable):
    xmmc = variable.encode('gbk') #由于python2.7的特殊性,需要将字段内容进行编码转换
    mxd_path = r'C:\Users\Administrator\Desktop\出图模板.mxd' 
    save_path = r'C:\Users\Administrator\Desktop\出图'
    layer = '范围线'
    feild = 'XMMC'
    base_scale = 5000 #给定一个基础的出图比例尺,避免矢量过小导致出图比例尺过大,需根据自己的页面尺寸自己调试。
    mxd = arcpy.mapping.MapDocument(mxd_path) #获取出图文档
    df = arcpy.mapping.ListDataFrames(mxd,'图层')[0] #获取数据框
    layer = arcpy.mapping.ListLayers(mxd, layer,df)[0] #获取图层
    datasource = layer.dataSource  #获取数据源
    '''数据源不同,定义查询的写法不同'''
    if os.path.basename(datasource)[-3:] == 'shp': 
        query = "\"{0}\" = '{1}'".format(feild,xmmc)  
    elif os.path.dirname(datasource)[-3:] == 'gdb':
        query = "{0} = '{1}'".format(feild, xmmc)  
    elif os.path.dirname(datasource)[-3:] == 'mdb':
        query = "[{0}] = '{1}'".format(feild, xmmc)
    layer.definitionQuery = query #定义查询出需出图矢量
    df.extent = layer.getExtent() #缩放至定义查询后的要素
    scale = df.scale #获取当前比例尺
    if scale < base_scale: 
        df.scale = base_scale
    else:
        df.scale = df.scale*1.5 #适当缩小比例尺,使出图内容更饱满,依据情况自己调试
    title = arcpy.mapping.ListLayoutElements(mxd, 'TEXT_ELEMENT', '标题')[0] #获取标题,元素名称需在MXD里自定义。
    title.text = '%s影像套合图' % (xmmc)  # 修改标题内容
    arcpy.mapping.ExportToJPEG(mxd, os.path.join(save_path,'%s影像套合图.jpg' % (xmmc)),resolution=300) #导出300分辨率的JPG图片
    arcpy.mapping.ExportToPDF(mxd, os.path.join(save_path, %s影像套合图.pdf' %(xmmc)),resolution=300) #导出300分辨率的PDF文件
    arcpy.mapping.ExportToPNG(mxd, os.path.join(save_path, %s影像套合图.png' %
(xmmc)),resolution=300,background_color= "255,255,255",transparent_color= "255,255,255")
    #导出300分辨率且背景透明的PNG图片
    mxd.saveACopy(os.path.join(save_path, '%s影像套合图.mxd'% (xmmc)))#出图模板另存


if __name__ == "__main__":

    f1 = r'C:\Users\Administrator\Desktop\新建文件地理数据库.gdb\范围线' #出图矢量
    variable_list = [] 
    with arcpy.da.SearchCursor(f1,['XMMC']) as cursor: #以XMMC字段为例,构建出图的循环列表
        for row in cursor:
            if row[0] not in variable_list:
                variable_list.append(row[0])
    pool = Pool(processes=6) #创建进程池
    pool.map(chutu,sorted(variable_list,reverse=False)) #多进程进行出图
    pool.close()
    pool.join()
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

装疯迷窍_A

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值