NetCDF文件提取网格框

34视图(30天)
詹姆斯•道格拉斯
詹姆斯•道格拉斯 2015年1月23日
评论道: 乍得格林 2017年3月5日
我新Matlab编程(通常使用IDL)但我一直负责在特定gridsquares从netcdf提取气象数据文件。我看着ncread文件的结构,但我的问题是,netcdf在193 x 130 y网格不匹配任何全球网格。现我寻找的是:在十进制度纬度28.046经度86.902。我怎么找到这是netcdf文件?
谢谢

答案(4)

乍得格林
乍得格林 2015年1月23日
我认为这个问题是纬度/经度网格不定期——他们在 旋转 坐标。如果你有工具箱的映射,这是第一个“切片” 助教 :
意大利= 28.046;
loni = 86.902;
助教= ncread (“test.nc”,“助教”);
rlat = ncread (“test.nc”,“rlat”);
rlon = ncread (“test.nc”,“rlon”);
起源= newpole (80、-123);
[rlati, rloni] = rotatem(拉提、loni起源、“前进”,“度”);
tas1 =挤压(助教(:,:1));
interp2 (rlat、rlon tas1、rlati rloni)
ans =
261.41
4评论
穆罕默德Abouali
穆罕默德Abouali 2015年1月26日
如果你想使用rlon / rlat乍得说在这里你需要改变你的目的地形成86.902,28.046还旋转版本,似乎你正在做的事情。
但如果你不想这样做的旋转版本存储在纬度/经度坐标变量,并且可以使用我提供的代码(interp2行不通non-rotated版本)。
原来是使用ConstructPolyInterpolant2D更快的执行时间序列插值,并non-rotated版本。我设计了这个函数特别是对于这类应用程序,你有相同的源和目标网格,但你想插入一个时间序列或你想插入很多不同的领域。如果你只有几个插值函数可能不合适,但如果你有快366插值,因为它显示了它的工作原理。

登录置评。


穆罕默德Elshamy
穆罕默德Elshamy 2017年3月3日
谢谢你的这些信息。有办法reproject整个领域。我已经找到了纬度和经度但矩阵向量所以interp2不接受他们。
2的评论
乍得格林
乍得格林 2017年3月5日
一个常见的问题, interp2 和地理数据的顺序。的问题是否网格是由
[latgrid, longrid] = meshgrid(纬度、经度);
[longrid, latgrid] = meshgrid(经度、纬度);
不同的数据集建立网格以不同的方式,所以你可能需要做的事
子= interp2 (latgrid, longrid, z,意大利loni);
子= interp2 (loni longrid, latgrid, z,意大利);

登录置评。


阿施施Uthama
阿施施Uthama 2015年1月23日
编辑:阿施施Uthama 2015年1月23日
我这么远. .然后意识到不存在精确匹配的纬度/经度。因此,从概念上讲,你想做什么?选择你所需的纬度/经度点最接近?(最近的欧几里得距离吗?还是有另一个指标来衡量两个背阔肌/经度之间的“距离”?)
我曾经疯狂的如下:
% %检查
ncFile =“test.nc”;
ncdisp (ncFile);
% %读不均匀(?)纬度和经度
alllat = ncread (ncFile,“纬度”);
alllon = ncread (ncFile,“朗”);
% %的索引所需的纬度/经度
lat = 28.046;
朗= 86.902;
% %寻找精确匹配
latInd =找到(alllat = = lat)
lonInd =找到(alllon = =经度)
% %寻找最接近的匹配(用平均绝对差)
madlatlon = abs (alllat-lat) + abs (alllon-lon);
[~,closestInd] = min (madlatlon (:));%注意——这是一个线性指数
closestLat = alllat (closestInd)
closestLon = alllon (closestInd)
% %读到的值:
[rlonInd, rlatInd] = ind2sub(大小(alllat), closestInd);%转换为x, y指数
%这个纬度/经度阅读所有的时间
助教= ncread (ncFile,“助教”[rlonInd rlatInd 1],[1 1正]);
助教=挤压(助教);%使数据单维度
情节(助教);标题([“助教”num2str (closestLat)“纬度”,num2str (closestLon)“朗”]);

乍得格林
乍得格林 2015年1月26日
使用
t = datenum (1949、12、ncread (“test.nc”,“时间”));
在Matlab的datenum格式,这是天0。日期向量包含年、月和日,并给出的
dv = datevec (t);
今年将是
年= dv (: 1);
实现y = datenum ([dv(:, 1:3), 0(大小(dv, 1), 3)])——datenum ([dv (: 1),
(大小(dv, 1), 1), 0(大小(dv, 1), 4)]);

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!