Поиск точек в файле LAS по координатам - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь найти точки в файле 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

1 Ответ

0 голосов
/ 06 марта 2019

Я не знаю, las или laspy, но если inFile.x & friends - это отдельные массивы (исходя из вызова 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 для действительных точек.

...