Поиск точек в файле LAS по координатам

Я пытаюсь найти точки в файле LAS (формат Lidar):

Сейчас я делаю это очень медленно:

from laspy.file import File
import numpy as np

inFile = File('inputfile.las', mode='r')

coord = np.vstack((inFile.x, inFile.y, inFile.z)).transpose()

def find_pt(coord, x, y, z):
    found = []
    for i in coord:
        if(i[0] >= x and i[0] < x+1):
            if(i[1] >= y and i[1] < y+1):
                if(i[2] >= z and i[2] < z+1):
                    found.append(i)

    return found

Затем я вызываю это с помощью:

find_pt(coord, 358397, 5280527, 550)

Что конечно занимает некоторое время, особенно когда точек в файле много.

Есть ли способ лучше/быстрее? coords относится к типу numpy.ndarray


person fsp    schedule 06.03.2019    source источник
comment
Вы должны иметь возможность использовать функциональность NumPy where. Это может быть проще сделать с отдельными индексами x, y и z и объединить результаты. Или прямое сравнение массивов с вашими входными данными x, y и z и логическими результатами.   -  person 9769953    schedule 06.03.2019


Ответы (1)


Я не знаю las или laspy, но если inFile.x и друзья являются отдельными массивами numpy (судя по вызову vstack), вы можете просто использовать и сравнивать их по отдельности, а затем объединять результаты:

xgood = (inFile.x >= x) & (inFile.x < x+1)
ygood = (inFile.y >= y) & (inFile.y < y+1)
zgood = (inFile.z >= z) & (inFile.z < z+1)
good = xgood & ygood & zgood
found = (inFile.x[good], inFile.y[good], inFile.z[good])

Результирующий found немного отличается, так как это кортеж массивов координат x, y и z для допустимых точек.

person 9769953    schedule 06.03.2019