其他分享
首页 > 其他分享> > matlab批量读取.hdf文件

matlab批量读取.hdf文件

作者:互联网

clc;
clear;
datadir=‘F:\OMI DATA\O3 PROFILE’;%指定批量数据所在的文件夹
filelist=dir([datadir,’*.he5’]);%指定批量数据的类型
k=length(filelist);
xx=10;yy=10;nu=1.;%我们取的是20到28N,97E到105E范围内的数据,想化成1度×1度的个点数据,因此有10×10个格点
gri=zeros(18,12,xx,yy);%最终的格点数据
num=zeros(18,12,xx,yy);%用于存放数据个数
mi=zeros(18,12,xx,yy);%格点内的数据和
for s=1:k
filename=[datadir,filelist(s).name];
file_id = H5F.open (filename, ‘H5F_ACC_RDONLY’, ‘H5P_DEFAULT’);

 DATAFIELD_NAME = 'HDFEOS/SWATHS/O3Profile/Data Fields/O3';
 data_id = H5D.open (file_id, DATAFIELD_NAME);
 
 TIME_NAME='HDFEOS/SWATHS/O3Profile/Geolocation Fields/Time';
 time_id=H5D.open(file_id, TIME_NAME);
 
 LATITUDE_NAME='HDFEOS/SWATHS/O3Profile/Geolocation Fields/Latitude';
 lat_id=H5D.open(file_id,LATITUDE_NAME);
 
 LONGITUDE_NAME='HDFEOS/SWATHS/O3Profile/Geolocation Fields/Longitude';
 lon_id=H5D.open(file_id,LONGITUDE_NAME);
 
 data1=H5D.read(data_id,'H5T_NATIVE_DOUBLE', 'H5S_ALL', 'H5S_ALL', ...
           'H5P_DEFAULT');        %臭氧数据三维   当三个维度都确定时,确定一个臭氧值,也确定了一个维度和经度,即为该臭氧值的经纬度
      
 lat=H5D.read(lat_id,'H5T_NATIVE_DOUBLE', 'H5S_ALL', 'H5S_ALL', ...
          'H5P_DEFAULT');         %纬度(二维)
 
 lon=H5D.read(lon_id,'H5T_NATIVE_DOUBLE', 'H5S_ALL', 'H5S_ALL', ...
          'H5P_DEFAULT');         %经度(二维)
      
 time=H5D.read(time_id,'H5T_NATIVE_DOUBLE', 'H5S_ALL', 'H5S_ALL', ...
                     'H5P_DEFAULT');  %时间,一维,时间是从1993年1月1日开始的秒数
 
 track=length(time);
 m=length(lat(:,1));
 
            %将打开的data1数据都循环一遍,用其对应的经纬度与格点相比较,把经纬度在格点内对应的臭氧数据相加再取平均作为该格点的值
 for i=1:m
     for j=1:track
         if(lat(i,j)>=20 && lat(i,j)<=30 && lon(i,j)>=97 && lon(i,j)<=107)
             ii=ceil(lat(i,j))-20;
             jj=ceil(lon(i,j))-97;
             timelvl=datestr(datevec(datenum(1993,1,1, 0, 0, 0)+time(j)/86400),'yyyymmddHH');%数据对应的时间,我们想取一月的平均
             nu=str2double(timelvl(5:6));  %取数据所在的月份
             for lev=1:18
                 if(data1(lev,i,j)>=0)
                     mi(lev,nu,ii,jj)=mi(lev,nu,ii,jj)+data1(lev,i,j);
                     num(lev,nu,ii,jj)=num(lev,nu,ii,jj)+1;
                 end
             end
         end
     end
 end

end
for lev=1:18
for nu=1:12
for ii=1:xx
for jj=1:yy
gri(lev,nu,ii,jj)=mi(lev,nu,ii,jj)/num(lev,nu,ii,jj);
end
end
end
end
save(‘F:\OMI DATA\omi2017.mat’,‘gri’)

标签:H5D,end,读取,nu,hdf,matlab,lev,H5S,id
来源: https://blog.csdn.net/qq_42010248/article/details/99988973