使用Python多处理并行分割多个ArcGIS光栅

2024-09-29 07:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我期待分割10个图像为2个部分每个(20个结果图像)。图像是4波段(R,G,B,nIR)NAIP图像,可从this website获得。我使用ArcGIS的arcpy包一次拆分一个图像:

import arcpy, os

inws = r'D:\temp\temp_NAIP'  #Contains ~10 .tif images
outws = r'D:\temp\temp_NAIP_tiles'

arcpy.env.workspace = inws
rasters = arcpy.ListRasters()

for ras in rasters:
    arcpy.SplitRaster_management(
        ras, outws, 
        os.path.basename(ras).split('.')[0], 
        split_method='NUMBER_OF_TILES', 
        format='TIFF', 
        num_rasters='1 2',
        overlap=50, units='PIXELS)

如何将multiprocessing模块集成到上面的脚本中,以便一次处理4个图像?在

顺便说一句,我知道一个blog post组合了multiprocessing和{},尽管这些例子是针对矢量数据的,我不知道如何利用这些工具来处理图像。在


Tags: 图像os波段websitethismultiprocessingtempsplit
1条回答
网友
1楼 · 发布于 2024-09-29 07:20:07

除非有任何资源共享问题,用multiprocessing.Pool将简单的for循环转换为多处理很容易。试试这样的方法:

from multiprocessing import Pool
import arcpy, os

inws = r'D:\temp\temp_NAIP'  #Contains ~10 .tif images
outws = r'D:\temp\temp_NAIP_tiles'

arcpy.env.workspace = inws    
rasters = arcpy.ListRasters()

def process_img(ras):
    arcpy.SplitRaster_management(
        ras, outws, 
        os.path.basename(ras).split('.')[0], 
        split_method='NUMBER_OF_TILES',
        format='TIFF', 
        num_rasters='1 2',
        overlap=50, units='PIXELS')

pool = Pool(processes=4)
pool.map(process_img, rasters)

只要rasters是iterable,它就应该可以映射到进程池。请记住,每个进程将“继承”父进程的堆栈,这样每个进程将使用它自己的arcpy.env.workspace副本。在

相关问题 更多 >