matlab实现对极地投影数据的投影转换

图片摘要

前段时间,我写了一个专栏《联合matlab和Arcgis进行netcdf格式的雪覆盖数据的重新投影栅格》,介绍了如何利用Arcgis实现极地投影的转换。今天,我提供一个matlab重采样的方法实现投影转换。

我们这次使用的数据是北冰洋逐日的海平面高度数据。但是我们发现其是极地投影,非常不利用后续的计算分析。我也在arcgis中尝试过,但是数据存在的区域远远大于实际合理的经纬度范围。如下图。真实际的范围应该是与中间的圆形边界相切。

于是,在matlab中,我们可以首先读取数据,然后得到内部相切的圆形区域。

file = ('dt_arctic_multimission_v1.1_sea_level_20160701_20190429.nc');
ncdisp(file)
lon = ncread(file,'longitude');
lat = ncread(file,'latitude');
sla1 = ncread(file,'sla');
time = ncread(file,'time');
P.lon = lon;P.lat = lat;
P.rg  = sla1(:,:,1);
imagesc(P.rg)
%% time convert
dt = datetime((time)*24*3600, 'ConvertFrom', 'epochtime', 'Epoch', '1950-01-01');
[y,m,d] = ymd(dt);

xv = -179.8358:0.25:179.8358;
yv = 50.0012:0.25:89.8417;
[xv1,yv1] = meshgrid(xv,yv);

lon1 = lon(186:535,186:535);
lat1 = lat(186:535,186:535);
lat1(lat1>1000)=0;
lon1(lon1>1000)=0;
xx = reshape(lon1,350*350,1);
yy = reshape(lat1,350*350,1);

接下来是采用内插的方法,得到规则化格网对应的数据。

N = sla1(:,:,1);
N(N>1000)=0;
%% 得到与圆形边界相切的区域
N1  = N(186:535,186:535);
zz = reshape(N1,350*350,1);
out = [xx,yy,zz];
ind = find(out(:,1)==0);
%% 将没有意义的经纬度格网赋值为0
out(ind,:)=[];
out = double(out);
%% 内插处理
fxy = scatteredInterpolant(out(:,1),out(:,2),out(:,3),'natural');
sla(:,:,i) = fxy(xv1,yv1);

将上述极地投影数据转换得到的重采样的结果

欢迎交流学习!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是水怪的哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值