基于Python的ArcGIS(ArcPy)多进程自动出图
Note: 由于微信不支持发布后的文章做大幅度的修改,所以删除了旧文章,重新发布修改版本。修改内容包括文章措辞,更严谨,代码片段改为图片显示,优化手机上查看的体验等等...前言:流程化、自动化、集中化是计算机的优势项,电脑能干的就让电脑干,不仅仅干的更好还能全部干完。解放人类,摸鱼万岁!使用 Python 的多进程导出图片,发挥计算机性能,节约人的时间。文末附代码和傻瓜式操作视频,人人都可用!1.什么是ArcPy
ArcPy 是一个安装 ArcGIS 会附带的站点包,通过 Python(安装 ArcGIS 的时候也会安装 python ) 实现。简言之,通过 Python 能直接调用 arcpy 执行地理数据分析、数据转换、数据管理和地图自动化等功能,满足多种客制化的需求。说人话就是,你买了一个超大的工具台名叫 ArcGIS;工具台上附赠了一个叫 Python 的工具箱(Python一门编程语言);工具箱中的一把螺丝刀就叫 ArcPy。官方文档:https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy/what-is-arcpy-.htm2.什么是多进程和自动
与多进程相对的是单进程。单进程就是一次做一件事,多进程就是同时做多件事。举个例子,一个人打开一个 mxd 文档,执行导出地图操作,地图导出完成后,再打开下一个 mxd 重复上一个流程,这就可以理解为单进程;但是这个人同时打开4个 mxd 文档,然后都执行地图导出操作,那么这个就可以理解为多进程导出地图。但是呢,这不是自动化的,是人工操作的。我们通过使用 Python 中一把叫做 multiprocessing 的螺丝刀实现多进程。多进程和自动不是连起来的哦,是分开的,既然有单进程,那么就有单进程自动化制图和多进程自动出图。简单来说:普通出图:一个人干活,得有人看着,一旦没人守着就停止工作了。单进程自动出图:计算机一件事情一件事情的做。多进程自动出图:计算机同时干几件事。官方文档:https://docs.python.org/zh-cn/3/library/multiprocessing.html3.实现多进程自动出图
为什么要自动出图,当然是解放人类、解放生产力啊!使用 ArcGIS 制图完成然后导出,我们知道通常,一张图片对应一个 mxd 文件。在生产环境或者学习实验中,能遇到一个县级行政区下辖的所有村都需要出一张某方面的专题图;又或者是某区域十年来的气温变化专题图的情况,光是需要制作 mxd 文件就有几十个乃至上百个(可以使用 Python 语言等进行自动化制图,以后详说),你还要一个个打开 mxd 文件,心累......而使用 arcpy 自动化出图,解放生产力,同时有多进程的加持能充分挖掘计算机的性能。在电脑最低配置都是4核的今天,总体出图速度提升个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完整代码完整代码如下:
附傻瓜操作演示和下载
该视频演示如何使用 Python 源代码执行多进程自动导出地图。傻瓜式操作,谁都能学会,只要你电脑有安装ArcGIS。 结束语