在利用python
对读取的点云数据构建KDTree索引时,可以利用Scipy
函数库中的spatial
库来构建kd树索引。
读取点云数据如下:
import laspy
import numpy as np
#las文件位置
lasfile = 'E:\las\Site1.las'
#打开las文件,‘r’表示以只读模式read
inFile = laspy.file.File(lasfile,mode = 'r')
#读取激光雷达点云的xyz坐标
x,y,z = inFile.x,inFile.y,inFile.z
读取的x,y,z点云数据均为等长的一维列表
构建KD树索引
from scipy import spatial
#封装x,y,z
lasdata = list(zip(x,y,z))
print(lasdata)
#构建kd树索引
tree = spatial.KDTree(lasdata)
运行错误显示:
Traceback (most recent call last):
File "E:/pycharm/las_test/las_read.py", line 30, in <module>
tree = spatial.KDTree(lasdata)
File "C:\Programs\Python\Python38\lib\site-packages\scipy\spatial\kdtree.py", line 244, in __init__
self.n, self.m = np.shape(self.data)
ValueError: not enough values to unpack (expected 2, got 0)
问题是在Python 3中,它zip
返回一个迭代器,并且当KDTree
代码np.asarray()
使用其参数调用时,将创建一个具有单个元素的“对象”数组:
解决办法:
将
zip()
更改为list(zip())
,以便它也可以在Python 3中工作