我有一个包含很多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值。
谢谢
答案 0 :(得分:4)
传入的.data
参数也必须是数组:
coord_z