美文网首页Ausplin插值
再议ANUSPLIN之月值气象数据转换为插值格式

再议ANUSPLIN之月值气象数据转换为插值格式

作者: 画长空_yin | 来源:发表于2018-07-07 20:55 被阅读107次

月值数据转换

月值数据处理,除了日值气象要素外,我们还经常用到月值数据,针对月值气象要素如何批量变成AUSPLIN需要的格式呢。
月值数据如下:


image.png

上图第一列为气象站点,第二列为月份,第三列为年份,第四列为气象要素
需要转换成以下形式:


image.png

代码如下所示:

a=xlsread('D:\日降水插值\中国气象站点shp\china-station1.xlsx'); %已经带有全部站点的变成以m为单位的经纬度和高程
filename='D:\temp-L1\new\数据\中国插值格式的'; %存放结果数据的位置
station=a(:,1);x=a(:,2);y=a(:,3);dem=a(:,4);%站点,经度,纬度,高程;
e=dir(fullfile('*.xlsx'));% 要转换的excel数据,见图1
for i=1:size(e,1)
    a=xlsread(e(i).name);
    st=a(:,1);year=a(:,3);month=a(:,2);termtemmax=a(:,4:end);
    sta=unique(st);
    datatotal=[];
    for j=1:size(sta,1)
        sta1=sta(j);
        sy=find(st==sta1);
        datasum=[];
        for mon=1:12
            symon=find(mon==month);
            sy_inter=intersect(symon,sy);
            if length(sy_inter)<1
                value=NaN;
                datasum=[datasum,value];
            else
                datasum=[datasum,termtemmax(sy_inter)];
            end
        end
        datatotal=[datatotal;datasum];
    end
    datatotal=[sta,datatotal];
   
    zz1=[];
    for n=1:length(sta)
        st1=sta(n);
        data2=datatotal(n,:);
        sy=find(station==st1);
        if length(sy)==1
            zz=[x(sy),y(sy),dem(sy),data2];
            zz1=[zz1;zz];
        end
    end
    %除掉存在NaN值的
    datasum=[];
    for kkk=1:size(zz1,1)
        value=zz1(kkk,:);
        if sum(abs(value)>=0)==16;
           datasum=[datasum;value];
        end
    end
    datasum=[datasum(:,4),datasum(:,1:3),datasum(:,5:end)];
    datasum=[[NaN,NaN,NaN,NaN,[1:12]];datasum];
    name1=e(i).name;
    name1=strcat(filename,name1);
    xlswrite(name1,datasum);
end

通过上述代码即可以得到图2,完成月份数据的转换

相关文章

网友评论

本文标题:再议ANUSPLIN之月值气象数据转换为插值格式

本文链接:https://www.haomeiwen.com/subject/gofguftx.html