0

我有许多分类的激光雷达点云文件,我想将它们转换为 geotiff 光栅文件。为此,我编写了一个函数,该函数创建一个使用 PDAL 进行转换所需的 json-Pipeline 文件,然后执行该管道。

tiles = []
for file in glob.glob("*.las"):
    tiles.append(file)    

def select_points_and_raster(file, class_nr, resolution):
    filename_out = file.split('.')[0]+'_'+ str(do) +'.tif'
    config = json.dumps([ file, 
                         {'type':'filters.range', 'limits':classification[class_nr]},
                         {'resolution':resolution, 'radius':resolution*1.414, 
                          'gdaldriver':'GTiff', 
                          'output_type':['mean'], 
                          'filename':filename_out}
                         ])
    
    pipeline = pdal.Pipeline(config)
    pipeline.execute()
    return filename_out

for i in range(len(tiles)):
    print(f'do file {tiles[i]}')
    filename_out = select_points_and_raster(tiles[i], class_nr, resolution)
    print(f'finished and wrote {filename_out}')

哪里classification是包含与地面/建筑物/植被相对应的数字的字典,所以我不必记住这些数字。

通过遍历tiles. 但是,由于我有很多文件,我想为此使用多个内核。如何拆分任务以至少使用我机器中的所有四个内核?我试图用以下方法做到这一点:

from multiprocess import Pool
ncores = 2

pool = Pool(processes=ncores)

pool.starmap(select_points_and_raster, 
               [([file for file in tiles], classification[class_nr], resolution)]) 
pool.close()
pool.join()

但这不起作用,因为我得到了AttributeError: 'list' object has no attribute 'split'. 但我没有通过列表,或者我是吗?这通常是并行化的方法吗?

4

0 回答 0