点击上方蓝字,关注我带你飞!
前言:使用 Python 的多进程功能,批量从MXD中导出图片。文末附代码和操作视频,人人可用! |
程序化、自动化、集中化是计算机的优势项,电脑能干的就让电脑干,不仅仅干的更好还能全部干完。解放人类,摸鱼万岁!
1.什么是ArcPy
ArcPy 是一个安装 ArcGIS 会附带的站点包,通过 Python(安装 ArcGIS 的时候也会安装 python ) 实现。
简言之,通过 Python 能直接调用 arcpy 执行地理数据分析、数据转换、数据管理和地图自动化等功能,满足多种客制化的需求。
说人话就是,你买了一个超大的工具台名叫 ArcGIS;工具台上附赠了一个叫 Python 的工具箱(Python一门编程语言);工具箱中的一把螺丝刀就叫 ArcPy。
2.什么是多进程和自动
与多进程相对的是单进程。单进程就是一次做一件事,多进程就是同时做多件事。
举个例子,一个人打开一个 mxd 文档,执行导出地图操作,地图导出完成后,再打开下一个 mxd 重复上一个流程,这就可以理解为单进程;
但是这个人同时打开4个 mxd 文档,然后都执行地图导出操作,那么这个就可以理解为多进程导出地图。但是呢,这不是自动化的,是人工操作的。
我们通过使用 Python 中一把叫做 multiprocessing 的螺丝刀实现多进程。
多进程和自动不是连起来的哦,是分开的,既然有单进程,那么就有单进程自动化制图和多进程自动出图。
简单来说:
3.实现多进程自动出图
为什么要自动出图,当然是解放人类、解放生产力啊!
使用 ArcGIS 制图完成然后导出,我们知道通常,一张图片对应一个 mxd 文件。
在生产环境或者学习实验中,能遇到一个县级行政区下辖的所有村都需要出一张某方面的专题图;
又或者是某区域十年来的气温变化专题图的情况,光是需要制作 mxd 文件就有几十个乃至上百个(可以使用 Python 语言等进行自动化制图,以后详说),你还要一个个打开 mxd 文件,心累......
而使用 arcpy 自动化出图,解放生产力,同时有多进程的加持能充分挖掘计算机的性能。
在电脑最低配置都是4-6核的今天,总体出图速度提升个2到3倍不是问题,更不用说电脑自动化操作,连半夜都能继续出图,不再加班熬夜,拯救社畜。
3.1ArcPy单进程自动出图
还是简单的讲一下使用 ArcPy单进程自动出图 网上很多帖子,我去抄一个贴到下面:
把所有mxd文件放到这个文件夹里面,就可以让电脑自己出图了,很简单吧!
函数 export 接收两个参数,第一个是存放了 mxd 文件的文件夹地址,同时该地址也是地图导出成果的输出文件夹。
第二个是出图分辨率,你可以填300。
3.2 ArcPy多进程自动出图
本文的重点来了!那么如何实现多进程?前面我们已经说了:
我们通过使用“工具箱”中一把叫做 multiprocessing 的螺丝刀实现多进程。
multiprocessing模块的官方文档
接下用一个例子来详细讲讲思路:假如一个文件夹中有400个 mxd 文件需要出图
3.2.1首先我们需要把数据切片
我们读取该文件夹中的所有 mxd 文件的地址,然后切分成几个部分,比如分成4分,每一部分都有100个 mxd 文件。
如何切分呢?电脑可没有人聪明。
主要思路是用列表的 pop() 方法操作。
打个比方:从兜里拿“硬币”出来,放到篮子1里面;再拿一个出来,放到篮子2里;
再拿一个出来,放到篮子3里;
再拿一个出来,放到篮子4里;再拿一个出来,再一次放到篮子1里,循环操作。直到”硬币“取完,操作结束。
以下附上自己写的分组代码(肯定有更好的写法,这个是很久以前写的了,但是也不想改了)
3.2.2然后是多进程的基本操作
需要注意的是:在 Windows 平台上,运行多进程必须在 if __name__ == '__main__':
中。以下是个简单示例:
3.3完整代码
完整代码如下:
4.操作演示和代码下载
该视频演示如何使用 Python 源代码执行多进程自动导出地图。傻瓜式操作,谁都能学会,只要你电脑有安装ArcGIS。
Python源文件下载:
公众号后台回复 多进程 获得源代码。
最后
基本的思路很简单,但是写着写着代码量就多起来了,哈哈。
另外多进程功能,和自带的 ArcGIS 工具箱有冲突,该功能封装进工具箱中后,运行会报错,如果你能成功运行或者有什么建议的话,可以在文章末尾留言哦。