OMI-Aura_L3-OMSO2e下載轉檔
背景
- 這是個鄉鎮區平均氣象要素與空品濃度系列作業的一部份。作業方式主要的說明可以參考EARR。此處介紹OMI-Aura_L3-OMSO2e數據特殊的地方、以及因應的處理方式。
檔案名稱之管理
日期規則
- 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-Aura_L3-OMSO2e檔案的特性是其he5(HDF-EOS5)格式
數據內容
- OMI檔案中有4個3維實質物理量,分別是
- ColumnAmountNO2:原觀測量
- ColumnAmountNO2CloudScreened:經雲量修正
- ColumnAmountNO2TropCloudScreened:同上,但僅限對流層部分。為此次讀取分析之對象。
- Weight:網格加權量
- 變數說明
$ ncdump -h $nc|group
- 矩陣中有不少是負值,原因不明。程式不納入內插及行政區平均。
遮蔽值之處理
- L3 SO2e最佳處理結果仍未臻完全,即使是日均值,仍有許多缺值的情形。此處每日進行特別排除。
- 只取正值、非遮蔽值進行內插
- 因解析度較低(0.25度~20km),內插方式採cubic spline。
while ndate < edate:
...
he = netCDF4.Dataset(fname,'r')
nc = he.groups['HDFEOS']['GRIDS']['OMI Total Column Amount SO2']['Data Fields']
var=nc[v][:,:].data
var=np.where(var>0,var,0)
boo=(x<=maxx+ncXCELL*50) & (x>=minx-ncXCELL*50) & (y<=maxy+ncYCELL*50) & (y>=miny-ncYCELL*50) & (var>0)
idx = np.where(boo)
mp=len(idx[0])
if mp<=10: continue
xyc= [(x[idx[0][i],idx[1][i]],y[idx[0][i],idx[1][i]]) for i in range(mp)]
c=np.array([var[idx[0][i], idx[1][i]] for i in range(mp)])
zz=griddata(xyc, c[:], (x1, y1), method='cubic')
...
單位轉換
- 單位為DU。程式並未加以轉換。
程式下載
Download: SO2E2csv.py
處理結果
OMI-Aura_L3-OMSO2e衛星觀測2005年平均值。單位DU | 同左,但為2022平均值 |