将不规则的3d数据从XYZ文件插入到常规网格中

时间:2015-11-25 15:05:44

标签: python numpy grid interpolation

我有一个包含很多3D坐标的xyz文件,如下所示:

 370373.771    6535261.431      2.908       
 370373.788    6535261.441      2.911       
 370373.787    6535261.442      2.909       
 370373.809    6535261.449      2.908       
 370373.810    6535261.439      2.909       
 370373.743    6535261.466      2.922       
 370373.584    6535261.455      2.915       
 370373.559    6535261.471      2.898       
 370373.544    6535261.559      2.887       
 370373.552    6535261.538      2.866       
 370373.797    6535261.486      2.876       
 370373.795    6535261.557      2.892       
 ..........    ...........      .....

此文件非常密集且不规则,我想在常规网格上插入这些坐标,例如每个5米点。

这是我到目前为止所尝试的内容:

import numpy as np
from scipy.interpolate import griddata

coord_x = []
coord_y = []
coord_z = []
coord_xy = []

xyzfile = open("xyzfile.txt")
for line in xyzfile:
    x,y,z = line.split()
    coord_x.append(float(x))
    coord_y.append(float(y))
    coord_xy.append([float(x),float(y)])
    coord_z.append(float(z))
xyzfile.close()

lon = np.linspace(min(coord_x), max(coord_x), 200)
lat = np.linspace(min(coord_y), max(coord_y), 200)
X, Y = np.meshgrid(lon, lat)

grid = griddata(np.array(coord_xy), coord_z, (X, Y), method='nearest')

不幸的是我收到了错误:

TypeError: only integer arrays with one element can be converted to an index

我也不确定如何在常规网格中的每个点之间获得5米的间距。我怎么能这样做?

第二个问题,比如我在这个网格上有6个已知点,如何在这个常规的5米间隔网格上提取这6个点的z值。

谢谢

1 个答案:

答案 0 :(得分:4)

传入的.data参数也必须是数组:

coord_z