MATLAB XYZ到网格

时间:2011-11-24 14:49:37

标签: matlab grid interpolation raster geometry-surface

我有一个标签分隔的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(请参阅下面的命令)。我一直得到下面显示的结果(虽然看起来有点像我的表面): enter image description here

有什么想法导致这个结果?我认为问题在于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^

3 个答案:

答案 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)”