matlab-OMI/MLS的臭氧数据读取和处理(写入nc并转为tif)
学习笔记
·
接上篇OMI廓线数据结果分析不好,最终决定用OMI/MLS臭氧对流层数据,虽然空间分辨率太粗,,,
太感谢博主的分享了,关键时刻的救命稻草!!!
数据处理——OMI/MLS的臭氧卫星数据读取和处理_omi臭氧数据_J同学的大气笔记的博客-CSDN博客
代码完全参考博主,自己按照自己的数据需求加了循环,并且重新写入了nc,并转为tif方便后续分析;
%%%%2005-2019
year = {'05','06','07','08','09','10','11','12','13','14','15','16','17','18','19'};
month = {'jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'};
m=['01';'02';'03';'04';'05';'06';'07';'08';'09';'10';'11';'12'];
y=['2005';'2006';'2007';'2008';'2009';'2010';'2011';'2012';'2013';'2014';'2015';'2016';'2017';'2018';'2019'];
lat=-59.5:1:59.5; %定义纬度
lon=-179.375:1.25:179.375; %定义经度
for iy = 1:15 %年份循环
O3 = nan(288,120); %预定义O3数组
for im = 1:3 %月份循环
fn = ['L3_tropo_ozone_column_',month{im},year{iy},'.txt']; %设置文件名
fid = fopen(fn); %打开文件
for i = 1:3
fgetl(fid); %这个循环的目的是跳过数据文件的前三行title信息
end
for ilat = 1:120
data(:,ilat) = fscanf(fid,'%3d',288); %读取文件(3个字符为对应一个经度的数据)
fgetl(fid);
end
fclose(fid); %关闭文件
data(data == 999) = NaN; %将缺省值999变为NaN,不过实际上好像没有999出现
O3(:,:) = data./10; %注意原数据文件里面把数据乘了10倍
% 创建nc文件并导入经纬度信息
InPath=strcat('D:\ERL\datapre\omi_mls_nc\OMI-Aura_L2-MLS_',y(iy,:),m(im,:),'.nc');
nccreate(InPath,'lon','Dimensions',{'lon',288});
nccreate(InPath,'lat','Dimensions',{'lat',120});
% 读取经纬度信息
ncwrite(InPath,'lon',lon);
ncwrite(InPath,'lat',lat);
% 创建变量并导入计算好的数据
nccreate(InPath,'ozo',...
'Dimensions', {'lon',288,'lat',120},...
'FillValue','disable');
ncwrite(InPath,'ozo',O3);
%%%输出tif
out='D:\ERL\datapre\omi_mls_tif\';
OutPath=strcat(out,'OMI-Aura_L2-MLS_',y(iy,:),m(im,:),'.tif');
ozo3=ncread(InPath,'ozo');
ozommm=rot90(ozo3,1);
GeoRef = georasterref('Rastersize',size(ozommm),'Lonlim',[double(min(lon)),double(max(lon))],'Latlim',[double(min(lat)),double(max(lat))]);
ozo_Tif =OutPath;
geotiffwrite(ozo_Tif,flip(ozommm),GeoRef);
%%%打印提示
fprintf(strcat(y(iy,:),m(im,:)))
end
end
和近地表臭氧数据集时间序列变化吻合,后续的分析结果较好!再次感谢博主!!!

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)