0

我正在尝试在 LAS 文件(激光雷达格式)中查找点:

现在我正在以非常缓慢的方式进行操作:

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

4

1 回答 1

0

我不知道 las 或 laspy,但如果inFile.x& friends 是单独的 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 坐标数组的元组。

于 2019-03-06T14:34:52.937 回答