Как получить уникальные "идентификаторы точечного источника" для блока LIDAR?
Я пытаюсь получить информацию об уникальных полетных линиях, появляющихся в блоке данных LIDAR, используя laspy.
Я уже пытался запустить модуль lasInfo для всего блока, но я получаю только значения min и max 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 ответ
Решение
Процесс идет медленнее, чем мог бы быть, потому что вы делаете цикл в Python. Существует небольшая функция, которую вы можете использовать для ускорения процесса: 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)