我有一个3D-LiDAR pointcoud,用laspy包重复加载到python中的树。它现在存储为numpy数组。我的目的是通过找到具有最高z值的点来计算树的高度,并计算到它下面的最低z值的距离。 所以我通过以下方式导入了数据:
inFile = laspy.file.File("~/DATA/tree.las", mode='r')
point_records = inFile.points
目前,我通过以下方式计算了身高:
min = inFile.header.min
max = inFile.header.max
zdist = max[2] -min[2]
问题是这样,我不考虑地形坡度。我如何索引正好低于最高点的点?
答案 0 :(得分:0)
这只是一个盲目的猜测,因为一个好的答案,缺少很多信息。
假设我们有一个带有(x,y,z)
的3个点的数组A = [1,2,3]
B = [1,2,4]
C = [0,1,2]。
我们已将点A确定为z中的最大值,并将其纬度和长度
lat = 1
long = 2
基本上,你会浏览点列表并过滤掉你要查看的所有点,然后选择最小点。下面是使用for循环执行此操作的简单方法。这不是速度的理想选择。可以使用np.where()
和花哨的索引,以便更轻松,更快速地执行此操作,但这更具可读性和可调性:
import numpy as np
# This is some test data, with three data points
a = np.array([[1,2,3],[1,2,4],[0,1,2]])
# Now we define the lat and long we want to get
filter_x = 1
filter_y = 2
filtered_points = []
for i in range(a.shape[0]): # iterating through all points
if a[i][0] == filter_x and a[i][1] == filter_y:
filtered_points.append(a[i][2]) # Append z of point to list
print min(filtered_points) # print minimum