ArcGIS工具箱并行化改造

1、總述

通過使用Map函數,對ArcPy中的GP工具進行少量的改造,從而達到并行化調用的目的。

2、Map函數

在使用ArcPy進行批處理的過程中,雖然簡化了很多手動的操作,但是對于大量重復性的操作并沒有一個效率上的考慮。因此在這一部分通過使用Python自帶的map函數,在講GP工具的函數稍加改造的基礎之上采用并行的方式來提高處理效率。
簡而言之,就是將原本的循環操作,改成map函數可以使用的形式,從而采用并行的方式進行處理。前提是相應的GP工具是支持同時操作,并避免同時寫入的操作等。
Map函數的詳細介紹,參考http://blog.jobbole.com/58700/

3、GP工具改造示例

如下所示為GP工具函數改造的過程,改造起來也比較簡單,將原本GP工具中的函數的參數作為一個列表傳入,對于一些默認的參數可以不傳入,在改造過程中寫死,從而減少不必要的參數。如下圖所示,是對求交函數進行的改造,對于求交函數,一般情況下,必備的參數有兩個需要相交的圖層以及結果圖層。如下圖所示:

# -*- coding: utf-8 -*-
import arcpy
from arcpy import env
from multiprocessing import Pool
# obtains the intersect
def mapIntersect_analysis(d):
    print(d)
    a = d[0]
    b = d[1]
    c = d[2]
    if arcpy.Exists(c):
        arcpy.Delete_management(c)
    arcpy.Intersect_analysis ([a,b], c, "ALL", "", "")
    return "successful!"
if __name__=="__main__":
    # 改成自己的路徑
    src = r"H:\tt"
    env.workspace = src
    workspaceList = arcpy.ListWorkspaces("","FileGDB")
    parameters = []
    for w in workspaceList:
        first = "{0}\\{1}".format(w, 'data01')
        second = "{0}\\{1}".format(w, 'data02')
        third = "{0}\\{1}".format(w, 'data03')
        d = [first,second,third]
        parameters.append(d)
    pool = Pool(4)
    results = pool.map(mapIntersect_analysis,parameters)
    # print the results
    print(results)
    pool.close()
    pool.join()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容