1夏哭、總述
通過使用Map函數(shù),對ArcPy中的GP工具進行少量的改造献联,從而達到并行化調(diào)用的目的竖配。
2、Map函數(shù)
在使用ArcPy進行批處理的過程中里逆,雖然簡化了很多手動的操作进胯,但是對于大量重復性的操作并沒有一個效率上的考慮。因此在這一部分通過使用Python自帶的map函數(shù)原押,在講GP工具的函數(shù)稍加改造的基礎之上采用并行的方式來提高處理效率胁镐。
簡而言之,就是將原本的循環(huán)操作诸衔,改成map函數(shù)可以使用的形式盯漂,從而采用并行的方式進行處理。前提是相應的GP工具是支持同時操作笨农,并避免同時寫入的操作等就缆。
Map函數(shù)的詳細介紹,參考http://blog.jobbole.com/58700/
3谒亦、GP工具改造示例
如下所示為GP工具函數(shù)改造的過程竭宰,改造起來也比較簡單,將原本GP工具中的函數(shù)的參數(shù)作為一個列表傳入诊霹,對于一些默認的參數(shù)可以不傳入羞延,在改造過程中寫死,從而減少不必要的參數(shù)脾还。如下圖所示伴箩,是對求交函數(shù)進行的改造,對于求交函數(shù)鄙漏,一般情況下嗤谚,必備的參數(shù)有兩個需要相交的圖層以及結(jié)果圖層棺蛛。如下圖所示:
# -*- 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()