小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

基于Python的ArcGIS(ArcPy)多進程自動出圖

 GIS薈 2021-09-19
Note: 由于微信不支持發(fā)布后的文章做大幅度的修改,所以刪除了舊文章,重新發(fā)布修改版本。修改內(nèi)容包括文章措辭,更嚴謹,代碼片段改為圖片顯示,優(yōu)化手機上查看的體驗等等...
前言:流程化、自動化、集中化是計算機的優(yōu)勢項,電腦能干的就讓電腦干,不僅僅干的更好還能全部干完。解放人類,摸魚萬歲!使用 Python 的多進程導出圖片,發(fā)揮計算機性能,節(jié)約人的時間。文末附代碼和傻瓜式操作視頻,人人都可用!

1.什么是ArcPy

ArcPy 是一個安裝 ArcGIS 會附帶的站點包,通過 Python(安裝 ArcGIS 的時候也會安裝 python ) 實現(xiàn)。

簡言之,通過 Python 能直接調(diào)用 arcpy 執(zhí)行地理數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動化等功能,滿足多種客制化的需求。

說人話就是,你買了一個超大的工具臺名叫 ArcGIS;工具臺上附贈了一個叫 Python 的工具箱(Python一門編程語言);工具箱中的一把螺絲刀就叫 ArcPy。

官方文檔:https://desktop./zh-cn/arcmap/10.3/analyze/arcpy/what-is-arcpy-.htm


2.什么是多進程和自動

多進程相對的是單進程。單進程就是一次做一件事,多進程就是同時做多件事。舉個例子,一個人打開一個 mxd 文檔,執(zhí)行導出地圖操作,地圖導出完成后,再打開下一個 mxd 重復上一個流程,這就可以理解為單進程;

但是這個人同時打開4個 mxd 文檔,然后都執(zhí)行地圖導出操作,那么這個就可以理解為多進程導出地圖。但是呢,這不是自動化的,是人工操作的。

我們通過使用 Python 中一把叫做 multiprocessing 的螺絲刀實現(xiàn)多進程。

多進程和自動不是連起來的哦,是分開的,既然有單進程,那么就有單進程自動化制圖和多進程自動出圖。

簡單來說:

  • 普通出圖:一個人干活,得有人看著,一旦沒人守著就停止工作了。

  • 單進程自動出圖:計算機一件事情一件事情的做。

  • 多進程自動出圖:計算機同時干幾件事。

官方文檔:https://docs./zh-cn/3/library/multiprocessing.html 


3.實現(xiàn)多進程自動出圖

為什么要自動出圖,當然是解放人類、解放生產(chǎn)力??!

使用 ArcGIS 制圖完成然后導出,我們知道通常,一張圖片對應一個 mxd 文件。

在生產(chǎn)環(huán)境或者學習實驗中,能遇到一個縣級行政區(qū)下轄的所有村都需要出一張某方面的專題圖;又或者是某區(qū)域十年來的氣溫變化專題圖的情況,光是需要制作 mxd 文件就有幾十個乃至上百個(可以使用 Python 語言等進行自動化制圖,以后詳說),你還要一個個打開 mxd 文件,心累......

而使用 arcpy 自動化出圖,解放生產(chǎn)力,同時有多進程的加持能充分挖掘計算機的性能。

在電腦最低配置都是4核的今天,總體出圖速度提升個2到3倍不是問題,更不用說電腦自動化操作,連半夜都能繼續(xù)出圖,不再加班熬夜,拯救社畜。

3.1ArcPy單進程自動出圖

還是簡單的講一下使用 ArcPy單進程自動出圖 網(wǎng)上很多帖子,我去抄一個貼到下面:

*把所有mxd文件放到這個文件夾里面,就可以讓電腦自己出圖了,很簡單吧!

函數(shù) export 接收兩個參數(shù),第一個是存放了 mxd 文件的文件夾地址,同時該地址也是地圖導出成果的輸出文件夾。第二個是出圖分辨率,你可以填300。

3.2 ArcPy多進程自動出圖

本文的重點來了!那么如何實現(xiàn)多進程?前面我們已經(jīng)說了:

我們通過使用“工具箱”中一把叫做 multiprocessing 的螺絲刀實現(xiàn)多進程。

multiprocessing模塊的官方文檔

接下用一個例子來詳細講講思路:假如一個文件夾中有400個 mxd 文件需要出圖

3.2.1首先我們需要把數(shù)據(jù)切片

我們讀取該文件夾中的所有 mxd 文件的地址,然后切分成幾個部分,比如分成4分,每一部分都有100個 mxd 文件。

如何切分呢?電腦可沒有人聰明。

主要思路是用列表的 pop() 方法操作。打個比方:從兜里拿“硬幣”出來,放到籃子1里面;再拿一個出來,放到籃子2里;再拿一個出來,放到籃子3里;再拿一個出來,放到籃子4里;再拿一個出來,再一次放到籃子1里,循環(huán)操作。直到”硬幣“取完,操作結(jié)束。

以下附上自己寫的分組代碼(肯定有更好的寫法,這個是很久以前寫的了,但是也不想改了)

3.2.2然后是多進程的基本操作

以下是多進程的一個簡單使用演示,雖然看上去好像沒有效果,但是確實開啟了多進程。??

需要注意的是:在 Windows 平臺上,運行多進程必須在 if __name__ == '__main__': 中。以下是個簡單示例:

3.3完整代碼

完整代碼如下:


附傻瓜操作演示和下載

該視頻演示如何使用 Python 源代碼執(zhí)行多進程自動導出地圖。傻瓜式操作,誰都能學會,只要你電腦有安裝ArcGIS。



結(jié)束語


    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多