我有一个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]问题是,这样的话,我没有考虑到地形中的坡度。如何索引恰好低于最高点的点?
发布于 2017-02-20 20:08:50
这只是一个盲目的猜测,因为对于一个好的答案,有很多信息缺失。
假设我们有一个由3个点组成的数组,(x,y,z)
A= 1,2,3
B= 1,2,4
C= 0,1,2。
我们已经将点A确定为z中的最大值,并将其lat和long设置为
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 minimumhttps://stackoverflow.com/questions/42224468
复制相似问题