我有一组3D坐标点:[lat,long,elevation]([X,Y,Z]),来自LIDAR数据。 这些点没有排序,点之间的步长或多或少是随机的。
我的目标是构建一个函数,将这组点转换为具有恒定像素数的2D numpy矩阵,其中每个(X,Y)单元格保持Z值,然后将其绘制为高程热图。
我想到的解决方案是为每个像素构建一个桶,迭代点并根据它的(X,Y)值将每个点放入桶中。最后创建一个矩阵,其中每个sell保存相应桶中Z值的平均值。
如果我构建非常稀疏的矩阵,其步长为
所有i,j,k,lmin [min {Xi,Xj},min {Yk,Yl}]
有没有办法减少"分辨率并将其转换为具有所需大小的矩阵?
谢谢!
答案 0 :(得分:2)
你不需要重新发明自行车。
from matplotlib.mlab import griddata
import numpy as np
#-- Your coordinates
x = np.random.random(100)
y = np.random.random(100)
z = np.random.random(100)*10
#--
#-- Your new grid
xsteps=200 # resolution in x
ysteps=200 # resolution in y
xi = linspace(min(x), max(x), xsteps)
yi = linspace(min(y), max(y), ysteps)
Z = griddata(x, y, z, xi, yi) # interpolates between points in your data
#--
plt.pcolormesh(xi, yi, Z, cmap=plt.cm.hot) # plot your elevation map :D
plt.show()
答案 1 :(得分:0)
我知道我没有回答你的一半问题,但我就是这样做的: