python - 使用 Python 多重处理并行分割多个 ArcGIS 栅格

标签 python multiprocessing arcgis raster arcpy

我希望将 10 个图像分成两部分(每部分 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.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 副本。

关于python - 使用 Python 多重处理并行分割多个 ArcGIS 栅格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549658/

相关文章:

python - 多处理共享变量

python - Dask:如何有效地分发遗传搜索算法?

javascript - 查询 arcgis 并获取按距某个点的距离排序的结果

python - 在整数数组中查找偏移序列

python - 用于部署单节点的 Storm 替代方案

c# - C# 中的任意大整数

c - 是否有设置超时的 wait() 系统调用版本?

sqlite - 如何通过多处理传递sqlite连接对象

javascript - ArcGIS:将 where 子句添加到新要素图层

javascript - ArcGIS 要素图层在 arcgis 工具上显示标签,而不是在 web map 上显示标签