通过坐标在LAS文件中查找点

时间:2019-03-06 14:27:37

标签: python-3.x numpy lidar laspy las

我正在尝试在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

1 个答案:

答案 0 :(得分:0)

我不熟悉laspy或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坐标数组的元组。