社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

遥感之家 • 1 年前 • 164 次点击  

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

前言:使用 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
 
164 次点击