0

我正在使用 Matlab 中的一些南极 DEM 数据。所以,到目前为止,我已经能够使用以下基本代码生成一个漂亮的网格:

load (Data.xyz)
X = Data(:,1);
Y = Data(:,2);
Z = Data(:,3);
xr = unique(X);
yr = unique(Y);
gz = zeros(length(yr),length(xr));
gz = griddata(X,Y,Z,xr,yr');

figure
mesh(xr,yr,gz);
hold on
contour3(xr,yr,gz,'k-');
hold off

现在我有几个问题,尽管从过去几天开始,我一直无法回答这些问题,并且日夜查看所有论坛和谷歌搜索。希望各位高手能给我一些建议。我的问题是:

  1. 上面的代码需要很多时间。同意南极洲的 DEM 尺寸大,代码响应时间慢并不一定意味着它不正确。但是,我完全无法在我的笔记本电脑(2.5 GHz/4GB)上运行这段代码——它太慢了。我想知道是否有其他方法可以更快、更高效地生成网格。

  2. 第二个问题是上面的“Data.xyz”包含来自所有南极洲的DEM数据。生成网格后,我想根据位置对其进行剪辑。例如,我想提取由 x1、y1、x2、y2、x3、y3 和 x4、y4 限制的区域的网格数据。我该怎么做呢?我在任何地方都找不到合适的功能或工具或任何用户脚本来允许我这样做。是否可以在matlab中切割网格?

我正在运行 Matlab 2012a,但我无权访问映射工具箱。有什么建议么???

4

1 回答 1

0

1.我只是想澄清一下你想让你的代码做什么。对于数据X,Y,Z,我假设这些点(X,Y)(不是在网格上采样),每个点都与一些海拔相关联Z

你打电话时

gz = griddata(X,Y,Z,xr,yr');

您是说每个可能的对(xr(i),yr(j))都是网格上要对表面进行采样以创建网格的位置。我可能是错的,但我认为这不是你想要的?我认为您宁愿在等间距的点进行采样,而不是使用类似...

xr = min(X):spacing:max(X);
yr = min(Y):spacing:max(Y);   
gz = griddata(X,Y,Z,xr,yr');  % ' is for the transpose
mesh(xr,yr,gz);

您的数据规模spacing的合理数字。您的代码现在的方式可能比您想要的要多得多,这可能就是您的代码需要这么长时间的原因。

对于 2。我认为你可以得到一个for循环,只需将感兴趣区域内的点添加到三个新的 X、Y、Z 值列表中。如果您的区域是由x_left,x_rightand包围的矩形y_left,y_right...

Xnew = []; Ynew = []; Znew = [];
for i = 1:length(X)
  if ( x_left<X(i) )&&( X(i)<x_right )&&( y_left<Y(i) )&&( Y(i)<y_right )
    Xew = [Xnew, X(i)];
    Ynew = [Ynew, Y(i)];
    Znew = [Znew, Z(i)];
  end
end
于 2014-06-28T01:37:21.470 回答