如何获得LIDAR块的唯一“点源ID”?

时间:2019-04-16 12:44:20

标签: python-3.x lidar laspy las

我正在尝试使用散件获取有关出现在LIDAR数据块中的独特飞行路线的信息。

我已经尝试过为整个模块运行lasInfo模块,但是得到的只是与我需要的单个飞行路线列表相对的最小和最大point_source_ID值。

这是我到目前为止尝试过的:

import laspy
import glob

las_files_list = glob.glob(r'PATH\*.las')
print(las_files_list)

las_source_id_set = set()

for f in las_files_list:
    las_file = laspy.file.File(f, mode='r')
    las_source_id_list = las_file.pt_src_id


    for i in las_source_id_list:
        las_source_id_set.add(i)

    las_file.close()
    print(las_source_id_set,' ', f)

print(las_source_id_set)

with open('point_source_id.txt', 'w') as f:
    f.write(las_source_id_set)

不幸的是,整个过程相当缓慢,而且对于较大的数据集,我会遇到堆栈溢出错误,最终从不涉及“写文件”部分。

1 个答案:

答案 0 :(得分:0)

此过程比预期的要慢,因为您正在使用Python进行循环。 您可以使用一个numpy函数来加快处理速度:numpy.unique

您的脚本将变为:

import laspy
import glob
import numpy as np

las_files_list = glob.glob(r'PATH\*.las')
print(las_files_list)

las_source_id_set = set()

for f in las_files_list:
    with laspy.file.File(p) as las:
        las_source_id_set.update(np.unique(las.pt_src_id))


    print(las_source_id_set,' ', f)

print(las_source_id_set)

with open('point_source_id.txt', 'w') as f:
    f.write(las_source_id_set)