在(2)中我們已經得到了想要的全部不重復的站點信息,在(3)部分我將展示如何將(1)中的數(shù)據結合(2)來轉變成我們ausplin所需要的插值格式。代碼如下所示:
a=xlsread('D:\日降水插值\中國氣象站點shp\china-station1.xlsx'); %(2)中得到的站點信息
filename='H:\Day1951-2012yuanshi\插值格式\中國';
station=a(:,1);x=a(:,2);y=a(:,3);dem=a(:,4);%站點,經度,緯度,高程;
e=dir(fullfile('*.xlsx'));% (1)中存放數(shù)據的目錄
i=1;while i<=length(e)
a=xlsread(e(i).name);
st=a(:,1);year=a(:,2);month=a(:,3);day=a(:,4);termtemmax=a(:,5);
sy=[];
for j=1:length(station)
sy1=find(st==station(j));
sy=[sy;sy1];
end
st=st(sy);year=year(sy);month=month(sy);day=day(sy);termtemmax=termtemmax(sy);
sy=find(termtemmax>=32000 & termtemmax<32766);
termtemmax(sy)=0.1; %降水中的異常值》=32000 & <32766的是極小值,用0.1替代
sta=unique(st);
sta=sort(sta);%升序排列
year1=year(1);
if mod(year1,4)==0
kk=366;
else
kk=365;
end
term1=zeros(length(sta),kk);
for m=1:length(sta)
sy1=find(st==sta(m));
if length(sy1)==kk
term1(m,:)=termtemmax(sy1)';
else
term1(m,:)=zeros(1,kk)+32766;
end
end
term1(find(term1==32766))=NaN;
zz1=[];
for n=1:length(sta)
st1=sta(n);
sy=find(station==st1);
zz=[x(sy),y(sy),dem(sy)];
zz1=[zz1;zz];
end
term2=[sta,zz1,term1];
name1=e(i).name;
name1=strcat(filename,name1);
xlswrite(name1,term2);
i=i+1;
end
上述代碼將氣象數(shù)據中的異常值32766以空值來表示,結果輸出到excel時,異常值的部分是缺失的。
結果如下所示:
image.png
當一年中的異常值部分缺失較多時,則可以直接去掉該站點,而當一年的異常值缺失部分較少時,則可以通過線性插值法或鄰近站點插值法來進行填補,具體見下期(4),上面代碼在matlab上進行
更多需求,請查看個人介紹