我有许多分类的激光雷达点云文件,我想将它们转换为 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'
. 但我没有通过列表,或者我是吗?这通常是并行化的方法吗?