Py学习  »  Python

基于Python的ArcGIS(ArcPy)多进程自动出图

遥感之家 • 3 月前 • 70 次点击  

点击上方蓝字,关注我带你飞!

前言:使用 Python 的多进程功能,批量从MXD中导出图片。文末附代码和操作视频,人人可用!


更新log:
2020年:发布文章
2023年11月22:文章优化,修改错误

 

程序化、自动化、集中化是计算机的优势项,电脑能干的就让电脑干,不仅仅干的更好还能全部干完。解放人类,摸鱼万岁!

 

 

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-.htm

 

 

2.什么是多进程和自动

多进程相对的是单进程。单进程就是一次做一件事,多进程就是同时做多件事。

举个例子,一个人打开一个 mxd 文档,执行导出地图操作,地图导出完成后,再打开下一个 mxd 重复上一个流程,这就可以理解为单进程;

 

  • 官方文档.https://docs.python.org/zh-cn/3/library/multiprocessing.html

 

但是这个人同时打开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 工具箱有冲突,该功能封装进工具箱中后,运行会报错,如果你能成功运行或者有什么建议的话,可以在文章末尾留言哦。

 


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/164754
 
70 次点击