NASA OMI_MINDS_NO2d衛星數據之解讀與轉檔
背景
- 這是個鄉鎮區平均氣象要素與空品濃度系列作業的一部份。作業方式主要的說明可以參考EARR。此處介紹OMI_MINDS_NO2d數據特殊的地方、以及因應的處理方式。
檔案名稱之管理
日期規則
- OMI檔名之日期規則為
YYYYmMMDD
中間多了一個m
,這是比較特別的地方。
檔名尾部
- OMI檔案名稱中還加了檔案產生時間到秒之紀錄做為檔名的尾端,這點無法規則化,必須由前述的urls.txt中讀取、或者由實際目錄中存在的檔案名稱中讀取。
- 前者不包括喪失後補遺的67個檔案
- 後者可以用python與外卡指令
fname=subprocess.check_output('ls OMI-Aura_L3-OMI_MINDS_NO2d_'+nowd+'*',shell=True).decode('utf8').strip('\n')
- 但如果遇到補遺錯誤,同一天有2個或以上檔案,前述check_output結果會是個序列,而不是字串。
- 程式相關檔名之段落如下
...
nowd=ndate.strftime("%Ym%m%d")
fname=subprocess.check_output('ls OMI-Aura_L3-OMI_MINDS_NO2d_'+nowd+'*',shell=True).decode('utf8').strip('\n')
nc = netCDF4.Dataset(fname,'r')
...
座標系統
- OMI檔案的經緯度也是1維的向量,但名稱為[‘Longitude’, ‘Latitude’]
- 要讀取的3維矩陣的順序是(Time, Latitude, Longitude)
- 其他新舊座標系統轉換與內插的作法,詳見EARR網格內插的說明
$ diff OMI2csv.py ../aTZPP/LGHAP.PM25.D001/LGHAP2csv.py
32c35
< ln,lt=np.meshgrid(Longitude, Latitude)
---
> ln,lt=np.meshgrid(lon, lat)
數據內容與處理
數據內容
- OMI檔案中有4個3維實質物理量,分別是
- ColumnAmountNO2:原觀測量
- ColumnAmountNO2CloudScreened:經雲量修正
- ColumnAmountNO2TropCloudScreened:同上,但僅限對流層部分。為此次讀取分析之對象。
- Weight:網格加權量
- 變數說明
$ ncdump -h $nc|grep ColumnAmountNO2TropCloudScreened
float ColumnAmountNO2TropCloudScreened(Time, Latitude, Longitude) ;
ColumnAmountNO2TropCloudScreened:_FillValue = -1.267651e+30f ;
ColumnAmountNO2TropCloudScreened:cell_methods = "area: mean" ;
ColumnAmountNO2TropCloudScreened:coordinates = "Time Latitude Longitude" ;
ColumnAmountNO2TropCloudScreened:description = "The average tropospheric NO2 vertical column density (in molec/cm2) for high quality observations with effective cloud fractions less than 0.3 and solar zenith angles less than 85 degrees." ;
ColumnAmountNO2TropCloudScreened:grid_mapping = "crs" ;
ColumnAmountNO2TropCloudScreened:long_name = "NO2 Tropospheric Column Density Cloud Screened" ;
ColumnAmountNO2TropCloudScreened:units = "molec/cm2" ;
ColumnAmountNO2TropCloudScreened:valid_max = 1.e+18f ;
ColumnAmountNO2TropCloudScreened:valid_min = -1.e+15f ;
- 矩陣中有不少是負值,原因不明。程式不納入內插及行政區平均。
遮蔽值之處理
- 只取正值、非遮蔽值進行內插
- 因解析度較低(0.25度~20km),內插方式採cubic spline。
$ diff OMI2csv.py ../aTZPP/LGHAP.PM25.D001/LGHAP2csv.py
66,69c65,68
< var=nc[v][0,:,:].data
< var=np.where(var>0,var,0)
< c=np.array([var[idx[0][i], idx[1][i]] for i in range(mp)])
< zz=griddata(xyc, c[:], (x1, y1), method='cubic')
---
> var=nc[v][:,:].data
> var=np.where(var==65535.,0,var)
> c=np.array([var[idx[1][i], idx[0][i]] for i in range(mp)])
> zz=griddata(xyc, c[:], (x1, y1), method='linear')
單位轉換
- 原OMI數據的單位是molec/cm2,與一般概念無法銜接。程式取地表面100m之範圍將單位轉換為ppb。
...
a=6.023E23
f= 1./a/(.01*.01*100/0.0245) * 1.E9 #molec/cm2 -> ppb
...
81,82c80
< df0[v]*=f
< df0.set_index('YMD').to_csv('OMI'+yr+'.csv')
---
> df0.set_index('YMD').to_csv('LGHAP'+yr+'.csv')
程式下載
Download: OMI2csv.py
處理結果
OMI_MINDS_NO2d衛星觀測2005年平均值。單位molec/cm2 | 同左,但為鄉鎮區平均值 |
OMI_MINDS_NO2d衛星觀測2022年平均值。單位molec/cm2 | 同左,但為鄉鎮區平均值 |