最近在看对流层臭氧的卫星数据。目前能给出对流层臭氧柱总量的卫星数据还不是很多,因为平流层臭氧的变率影响太大了。

这里先介绍一下OMI卫星观测反演的对流层臭氧数据:

数据下载地址:

OMI/MLS level-3 data: https://acd-Ext.gsfc.nasa.gov/Data_services/cloud_slice/new_data.html

OMI/SAO level-2 data: https://avdc.gsfc.nasa.gov/index.php?site=487351191

下面讲的数据处理主要针对level-3的数据。大家点进这个网址,它是长这样的。

单独点击每个文件可以把某年某个月份的数据下下来,然而点进去一看,好奇怪啊,这都是什么数据格式,真要命。

看到这里很多小伙伴就被劝退了。我一开始也是,哈哈。

但是仔细看看会发现提供这个数据集的作者其实很贴心,他给了一个IDL reader 来读这个数据文件呀!所以,会用IDL的小伙伴顿时就很开心了。

所以,从这里来看,这些就是ASCII编码文件,大家下下来后不要自己加后缀啊!!!加完后缀下面处理方法就不灵了(格式变了就识别不了了)。

考虑到很多朋友也不太会用IDL,我这里介绍IDL和matlab两种处理方式。

数据文件:

1. IDL处理

这里其实就用到两个函数:

1)read_lvl3.pro(这个是数据集作者提供的,就是上面那个IDL reader,我加了一点点备注,IDL的注释用英文的分号);

pro read_lvl3, fname, data
;
;Routine: IDL reader for 1deg X 1.25deg OMI/MLS tropospheric
;ozone.  Longitudes are -179.375, -178.125, -176.875, ..., 179.375
;        Latitudes are -59.5, -58.5, -57.5, ..., 59.5
;
;Example:
;
;    fname='L3_tropo_ozone_column_sep14'
;    read_lvl3, fname, data
;
nlon=288 & nlat=120
stuff=strarr(1) & str=strarr(1)
dat=intarr(25) & dat0=fltarr(13)
data=fltarr(nlon,nlat)
openr,2,fname
for i=1,3 do readf,2,stuff           ;跳过前三行title信息
for lat=1,120 do begin               for irow=1,11 do begin             ;前11行每行有25个数据readf,2,dat,format='(1X,25(I3))' ;逐行读取数据,1X表示把输出位置向右跳过1个位置,;25(I3)表示以3个字符宽来输出整数,至少输出25个数字for lon=1,25 do begindata(25*(irow-1)+lon-1,lat-1)=float(dat(lon-1))endforendforreadf,2,dat0,str,format='(1X,13(I3),3X,A11)'for lon=1,13 do begin               ;第12行只有13个数据data(275+lon-1,lat-1)=float(dat0(lon-1))endfor
endfor
close,2return
end

2)read_omi.pro (这个是我写的,主要作用就是调用read_lvl3.pro, 然后把数据存成nc格式)

pro read_omi
nan=!values.f_nan
month1=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"]
data1=fltarr(288,120,12,16)+nan                      ;预定义数组
for yy=0,15 do begin
for mm=0,11 do beginfname='L3_tropo_ozone_column_'+month1(mm)+string(yy+4,form='(i2.2)')print,fnamefile_exist=file_test(fname)if (file_exist) then beginread_lvl3, fname, data                  ;调用read_lvl3函数data1(*,*,mm,yy)=data/10.0              ;注意原数据文件中为了保证3位有效数字乘了10倍endif
endfor
endfor
help, data1
data2=indgen(120)*1.0-59.5
data3=indgen(288)*1.25-179.375
cdfid=ncdf_create('ozone_omi_2004_2019.nc',/clobber)  ;04年只有12月有数据latimid=ncdf_dimdef(cdfid,'lat',120)lonimid=ncdf_dimdef(cdfid,'lon',288)monimid=ncdf_dimdef(cdfid,'month',12)yyimid=ncdf_dimdef(cdfid,'year',16)varid1 =ncdf_vardef(cdfid,'omi_o3',[lonimid,latimid,monimid,yyimid])varid2 =ncdf_vardef(cdfid,'lat',[latimid])varid3 =ncdf_vardef(cdfid,'lon',[lonimid])ncdf_attput,cdfid,'creation_date',systime(),/globalncdf_attput,cdfid,varid1,'long_name','omi_trop_ozone'ncdf_attput,cdfid,varid1,'units','DU'ncdf_attput,cdfid,varid2,'long_name','latitude'ncdf_attput,cdfid,varid2,'units','degrees_north'ncdf_attput,cdfid,varid3,'long_name','longitude'ncdf_attput,cdfid,varid3,'units','degrees_east'ncdf_control,cdfid,/endefncdf_varput,cdfid,varid1,data1ncdf_varput,cdfid,varid2,data2ncdf_varput,cdfid,varid3,data3ncdf_close,cdfid
end

一开始没加经纬度变量,发现用panoply打开只能识别成2D的变量,不能自动识别是Geo2D的变量,于是就在nc文件里把lon,lat变量也加上啦,以后还是应该养成这个好习惯。之前画图就没有注意经纬度问题,以为lat的120个变量就是从-90到90变化的呢,写博客才发现原来是从-59.5到59.5,真的以后要把平时处理数据的流程技巧多写一下,写出来才会去把每个细节都好好检查,不出错。平时感觉就弄给自己看看就很马虎了。

2. Matlab处理

先说明一下这个代码是我导师给我的,不是我自己写的哈(我对我导的佩服程度真是如滔滔江水连绵不绝)。不过注释和经纬度是我加的,matlab的注释用百分号。

clear;clc;
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'};
lat=-59.5:1:59.5;            %定义纬度
lon=-179.375:1.25:179.375;   %定义经度
O3 = nan(288,120,12,15);     %预定义O3数组
for iy = 1:15                %年份循环for im = 1:12            %月份循环fn = ['L3_tropo_ozone_column_',month{im},year{iy}]; %设置文件名fid = fopen(fn);         %打开文件for i = 1:3fgetl(fid);          %这个循环的目的是跳过数据文件的前三行title信息endfor ilat = 1:120data(:,ilat) = fscanf(fid,'%3d',288); %读取文件(3个字符为对应一个经度的数据)fgetl(fid);endfclose(fid);              %关闭文件data(data == 999) = NaN;  %将缺省值999变为NaN,不过实际上好像没有999出现额O3(:,:,im,iy) = data./10; %注意原数据文件里面把数据乘了10倍end
endsave ../OMI125x1.monthly.trop_O3.2005_2019.mat O3 lat lon  %将O3和经纬度变量存成mat文件

matlab代码里是存成mat文件,习惯用nc的也可以自己存nc文件。

源代码文件看这里呀:https://download.csdn.net/download/qq_27984679/13991265

诶,啥时候CSDN能博文直接加代码文件啊,感觉每次都是另外上传代码很不方便呢。

数据处理——OMI/MLS的臭氧卫星数据读取和处理相关推荐

  1. OMI卫星数据介绍[整理]

    重点参考:OMI卫星数据介绍(包含气溶胶产品)作者:ENVI-IDL技术殿堂 Aura卫星传感器 Aura 在拉丁文中表示空气,主要任务是对地球臭氧层.空气质量和气候变化等方面进行观测研究.它于200 ...

  2. Python数据处理之一:数据读取

    Python数据处理之一:数据读取 数据可以存储成许多不同的格式和文件类型.某些格式存储的数据很容易被机器处理,而 另一些格式存储的数据则容易被人工读取.微软的Excel. Word 文档等属于后者, ...

  3. python读取哨兵卫星数据_SARscape5.2哨兵1A数据的读取

    SARscape5.2支持哨兵1A数据的读取,支持的数据类型有: SM SLC --条带模式的斜距单视复数产品 IW SLC--干涉宽幅模式(TOPS Mode)的斜距单视复数产品 EW SLC--超 ...

  4. 【python数据处理基础】--数据读取、清洗数据

    python 数据处理实战 目录 数据读取 选择特列 清洗数据 目录 随着网络数据的爆发式的增长,数据处理工作日益显示出它的重要性,我们的目的是从大量的杂乱无章的数据中找出对我们的工作有益的数据或者发 ...

  5. OCO-2、OCO-3卫星数据下载、读取与可视化(适合初学者)

    OCO-2.OCO-3卫星数据下载.读取与可视化(适合初学者) 有关OCO系列数据的下载方法已经有一些同行做了比较详细的解答了,这篇博文主要记录我读取及可视化此数据的过程.因为博主自身编程能力不强并且 ...

  6. python读取哨兵卫星数据_科学网—【Python】批量下载Sentinel-2卫星数据 - 江佳乐的博文...

    简介:本文介绍了一种基于Python批量下载Sentinel-2卫星数据的方法.通过该方法,用户可自定义感兴趣研究区(ROI).限定时间范围.选择产品类别.进行云量筛选,实现自动化批量下载Sentin ...

  7. 使用RSD对高分1号卫星数据进行批量大气校正

    高分数据处理可以有下述5中选项 MSS数据的批量正射校正 MSS数据批量正射校正和大气校正 PAN 数据的批量正射校正 MSS与PAN批量正射校正和融合 MSS与PAN批量正射校正.MSS的大气校正和 ...

  8. 研究区域内测高卫星数据选取(pass)--以T/P-Jason1/2/3为例

    T/P.Jason-1/2/3系列卫星每个cycle共计254个pass.每个pass一个文件(.nc格式),选取研究区域内的pass,进一步筛选数据. 数据: AVISO公布的卫星轨道数据(kml格 ...

  9. 空气污染气体卫星数据的下载教程

    影响空气质量的主要气体有:二氧化硫.一氧化碳.二氧化氮.可吸入颗粒和臭氧等.我们可以通过Giovanni平台下载空气污染气体的卫星产品数据. Giovanni平台介绍 Giovanni, 是NASA ...

最新文章

  1. jmeter聚个报告怎么看qps_Jmeter查看QPS和响应时间随着时间的变化曲线
  2. OpenGL渲染流水中的处理步骤
  3. 【怎样写代码】函数式编程 -- Lambda表达式(三):LINQ初步
  4. 关于WebRTC发展的担忧和思考
  5. MPU和MCU的区别和选择
  6. ckeditor 框架分析 几个核心“人物”
  7. MySQL 索引分析除了 EXPLAIN 还有什么方法?
  8. 为什么脚本执行一行就不动了_在Linux中通过expect工具实现脚本的自动交互
  9. 华为路由GRE隧道搭建
  10. 矩阵的乘法转置c语言函数,C语言 矩阵的转置及矩阵的乘法
  11. UCHome全面大解析【二】----基本体系结构
  12. dota2服务器位置设置在哪里,《DOTA2》自走棋国服怎么进入 自走棋国服服务器进入方法...
  13. Thoughtworks笔试
  14. SpringCloud之服务提供者和服务消费者
  15. 博客转移至 http://sunhs.me
  16. MySQL查询(DQL)之基础查询+条件查询+排序查询
  17. c++编程猜数字游戏
  18. 关于BIM模型的精度,你知道多少?
  19. 开题报告:基于java电影院选座售票系统 毕业设计论文开题报告模板
  20. 微信7.0.16 for iOS测试版新增隐藏会话功能

热门文章

  1. 医院招护士要过计算机二级吗,一般医院护士招聘考试都考什么内容呀
  2. 虚幻4漏光问题解决方法
  3. phpexcel导出excel,怎么给内容加超链接,求大神帮帮我
  4. windows 安装FFmpeg
  5. [转载]EDID和TV OSD的使用说明
  6. gdb 笔记(07)— 自动显示变量值、显示源代码、监视变量或内存、查看内存
  7. Java源码解析库对比:javaparser、qdox、spoon
  8. Mybatis 逆向工程MGB配置文件基本编写
  9. json的几种标准格式
  10. 网站打开速度缓慢的原因都有哪些?