我有一个标签分隔的XYZ文件,其中包含3列,例如
586231.8 2525785.4 15.11
586215.1 2525785.8 14.6
586164.7 2525941 14.58
586199.4 2525857.8 15.22
586219.8 2525731 14.6
586242.2 2525829.2 14.41
第1列和第2列是X和Y坐标(以UTM计),第3列是X,Y点的相关Z值;例如某点的高程(z)为z(x,y)
我可以使用dlmread()
在此文件中读取以获取工作区中的3个变量,例如X = 41322x1 double
,但我想使用这些变量创建一个大小为(m x n)
的表面。我该怎么做呢?
根据以下评论,我尝试使用TriScatteredInterp(请参阅下面的命令)。我一直得到下面显示的结果(虽然看起来有点像我的表面):
有什么想法导致这个结果?我认为问题在于meshgrid
命令,尽管我不确定在哪里(或为什么)。我目前正在输入以下一组命令来计算上图(我的X和Y列以米为单位,我知道我的网格大小为8米,因此ti / tj在8s内上升):
F = TriScatteredInterp(x,y,z,'nearest');
ti = ((min(x)):8:(max(x)));
tj = ((min(y)):8:(max(y)));
[qx,qy] = meshgrid(ti,tj);
qz = F(qx,qy);
imagesc(qz) %produces the above figure^
答案 0 :(得分:3)
我想你想要griddata
功能。请参阅MATLAB帮助中的Interpolating Scattered Data。
答案 1 :(得分:1)
Griddata和tirscattteredinterp非常慢。在文件交换机上使用utm2deg函数,然后将vec2mtx组合成一个常规网格,然后使用imbedm将数据拟合到网格中。 即。
for i = 1:length(X)
[Lat,Lon ] = utm2deg(Easting ,Northing ,Zone);
end
[Grid, R] = vec2mtx(Lat, Lon, gridsize);
Grid= imbedm(Lat, Lon,z, Grid, R);
答案 2 :(得分:0)
也许你正在寻找函数“ndgrid(x,y)”或“meshgrid(x,y)”