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