【问题标题】:Split many ArcGIS rasters in parallel using Python multiprocessing使用 Python 多处理并行拆分多个 ArcGIS 栅格
【发布时间】:2015-06-15 11:27:44
【问题描述】:

我希望将 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 结合了multiprocessingarcpy,尽管这些示例特定于矢量数据,我无法弄清楚如何利用这些工具来处理图像。

【问题讨论】:

    标签: python multiprocessing arcgis raster arcpy


    【解决方案1】:

    除非存在任何资源共享问题,否则使用 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 是可迭代的,它就应该可以映射到进程池。请记住,每个进程都将“继承”父进程的堆栈,这样每个进程都将使用自己的 arcpy.env.workspace 副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2020-07-23
      • 2015-11-08
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多