Как получить уникальные «идентификаторы точечного источника» для блока LIDAR? - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь получить информацию об уникальных полетных линиях, появляющихся в блоке данных 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 Ответ

0 голосов
/ 26 апреля 2019

Процесс идет медленнее, чем мог бы быть, потому что вы делаете цикл в 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)
...