月值数据转换
月值数据处理,除了日值气象要素外,我们还经常用到月值数据,针对月值气象要素如何批量变成AUSPLIN需要的格式呢。
月值数据如下:
上图第一列为气象站点,第二列为月份,第三列为年份,第四列为气象要素
需要转换成以下形式:
代码如下所示:
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,完成月份数据的转换