基于Python的ArcGIS(ArcPy)多进程自动出图
文章目录
流程化、自动化、集中化是计算机的优势项,电脑能干的就让电脑干,不仅仅干的更好还能全部干完。
解放人类,摸鱼万岁!
什么是ArcPy
ArcPy 是一个安装 ArcGIS 会附带的站点包,通过 Python(安装 ArcGIS 的时候也会安装 python ) 实现。
简言之,能通过 Python 直接调用 arcpy 执行地理数据分析、数据转换、数据管理和地图自动化以及多种客制化的需求和功能。
说人话就是,你买了一个超大的“工具台”名叫 ArcGIS;
“工具台“”上附赠了一个叫 Python 的“工具箱”;
“工具箱“”中的一把螺丝刀就叫 ArcPy。
什么是多进程
单进程就是一件事情一个人干活,多进程就是几个人一起干活
我们通过使用”工具箱“中一把叫做 multiprocessing 的螺丝刀实现多进程。
简单来说:
- 普通出图就是一个人干活,干完一件事就摸鱼去了,得有其他人告诉他下一件事他才去干。
- ArcPy单进程自动出图 就是一个人不摸鱼使劲干,把一堆事情都干完。
- ArcPy多进程自动出图 就是几个人不摸鱼使劲干,可以把一堆事情更快的干完。
为什么要实现多进程出图?
为什么要自动出图,解放人类啊!
使用 arcgis 制图完成然后导出,我们知道通常,一张图片对应一个 mxd 文件。
在生产环境或者学习实验中,能遇到一个县级行政区下辖的所有村都需要出一张某方面的专题图;
又或者是某区域十年来的气温变化专题图的情况,光是需要制作 mxd 文件就有几十个乃至上百个
(可以使用 Python 语言等进行自动化制图,以后详说),你还要一个个打开 mxd 文件,心累…
而使用 arcpy 自动化出图,解放生产力,同时有多进程的加持能充分挖掘计算机的性能。
在电脑最低配置都是4核的今天,仅仅是出图速度至少翻3倍不是太大问题,更不用说电脑自动化操作,连半夜都能继续出图。
不再加班熬夜,拯救社畜。
(不推荐 ArcPy单进程自动出图 ,因为现在明明有更好的 ArcPy多进程自动出图 )
普通出图 | ArcPy单进程自动出图 | ArcPy多进程自动出图 | |
---|---|---|---|
进程 | 单进程 | 单进程 | 多进程 |
时间 | 慢(需要监督) | 一般 | 快 |
自动化 | 无 | 自动 | 自动 |
适用场景 | 只需要出几张图 | 无(明明有多进程了) | 大量专题地图 |
ArcPy单进程自动出图
还是简单的讲一下使用 ArcPy单进程自动出图 网上很多帖子,我去抄一个贴到下面:
把所有mxd文件放到这个文件夹里面,就可以让电脑自己出图了,很简单吧!
# -*- coding:cp936 -*-
# lcc
"""
批量将导出MXD文档导出为JPEG图片
"""
import arcpy,os
arcpy.env.overwriteOutput = True
def export(path, res):
"""
批量将导出MXD文档导出为JPEG图片
:param path: mxd文件夹目录 string
:param res: 出图分辨率 int
:return:
"""
for afile in os.listdir(path):
if afile[-3:].lower() == 'mxd':
mxd1 = arcpy.mapping.MapDocument(os.path.join(path, afile))
print u"正在出图..."
arcpy.mapping.ExportToJPEG(mxd1,
os.path.join(path, afile[:-3] + 'jpg'), resolution = res)
del mxd1
print 'Done'
else:
print u"\n非MXD文件,跳过"
if __name__ == '__main__':
export("path", 300)
ArcPy多进程自动出图
本文的重点来了!那么如何实现多进程了,前面我们已经说了:
我们通过使用“工具箱”中一把叫做 multiprocessing 的螺丝刀实现多进程。
基本思路
假如一个文件夹中有400个 mxd 文件需要出图:
首先我们需要把数据切片
我们读取该文件夹中的所有 mxd 文件的地址,然后切分成几个部分,比如分成4