遥感降水产品空间分辨率的转化

其实作为只把程序当工具的人来说,在写之前一定要仔细查查matlab有没有相关的函数可以简化工作量。

参考这个问题,与其不同的是,我是由高精度到低精度,其实是个求和的过程。

https://www.ilovematlab.cn/thread-544157-1-1.html

https://jingyan.baidu.com/article/4853e1e57ab56d1909f726a0.html

以下是程序:

A(从低精度到高精度的插值)

z1=interp2(x0,y0,z0,x1,y1,'method')

功能介绍:根据已知的数据(x0,y0,z0),用method方法进行插值,然后计算(x1,y1)对应的值z1.

用指定的算法method 计算二维插值:
’linear’:双线性插值算法(缺省算法);
’nearest’:最临近插值;
’spline’:三次样条插值;
’cubic’:双三次插值。

代码以下:

x=1.1:0.1:1.5;
y=1.1:0.1:1.5;
[x,y]=meshgrid(x,y);
z=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20;21,22,23,24,25];
x1=1.1:0.25:1.5;
y1=1.1:0.25:1.5;
[x1,y1]=meshgrid(x1,y1);
z1=interp2(x,y,z,x1,y1,'cubic');

 

 

B(从高精度到低精度,例如我需要从0.1°到0.25°,不是整数倍,可参考以下程序)

%遥感产品空间精度重采样,0.1°到0.25°
%for时间序列循环读入矩阵B
%B矩阵需要切掉2行1列
ini_year=2014;            %输入计算起始年份
end_year=2018;            %输入计算终止年份
NCOLS=20;                %数据集列数
NROWS=12;                %数据集行数
for year=ini_year:end_year
    %确定每年的天数是365或366天
    if year/4==fix(year/4)
        daynum=366;
    else
        daynum=365;
    end
    
    for day=1:daynum
        
        %读入初始分辨率的日数据
        B=load(strcat('F:\黑河+GPM(写论文中)\GPM data\GPMtxt\GPMV6',num2str(YYMMDD(year,day)),'.txt'));
        B=B(3:32,2:51);
        A=zeros(12,20);
        for i=1:12 
            for j=1:20 
                a=2*i+floor(i/2)-1;%奇数行
                b=2*(i-1)+floor((i-1)/2)+1;%偶数行
                c=2*j+floor(j/2)-1;%奇数列
                d=2*(j-1)+floor((j-1)/2)+1;%偶数列
                if mod(i,2) == 0
                    if mod(j,2) == 0 %3 b d
                        A(i,j)=sum(sum(B(b+1:b+2,d+1:d+2)))+0.5*(sum(sum(B(b,d+1:d+2)))+sum(sum(B(b+1:b+2,d))))+0.25*sum(sum(B(b,d)))
                    else %4 b c
                        A(i,j)=sum(sum(B(b+1:b+2,c:c+1)))+0.5*(sum(sum(B(b,c:c+1)))+sum(sum(B(b+1:b+2,c+2))))+0.25*sum(sum(B(b,c+2)))
                    end
                else
                    if mod(j,2) == 0 %2 a d
                        A(i,j)=sum(sum(B(a:a+1,d+1:d+2)))+0.5*(sum(sum(B(a+2,d+1:d+2)))+sum(sum(B(a:a+1,d))))+0.25*sum(sum(B(a+2,d)))
                    else %1 a c
                        A(i,j)=sum(sum(B(a:a+1,c:c+1)))+0.5*(sum(sum(B(a+2,c:c+1)))+sum(sum(B(a:a+1,c+2))))+0.25*sum(sum(B(a+2,c+2)))
                    end
                end
                %储存模型计算所需分辨率的列数据
                fid=fopen(strcat('F:\黑河+GPM(写论文中)\GPM data\GPM025\GPMV6',num2str(YYMMDD(year,day)),'.txt'),'wt');
                for I=1:NROWS
                    for J=1:NCOLS
                        if J==NCOLS
                            fprintf(fid,'%3.2f\n',A(I,J));
                        else
                            fprintf(fid,'%3.2f\t',A(I,J));
                        end
                    end
                end
                fclose(fid);
            end
        end
    end
end

你可能感兴趣的:(遥感降水产品空间分辨率的转化)