Link Search Menu Expand Document

NASA OMI_MINDS_NO2d衛星數據之解讀與轉檔

Table of contents

背景

  • 這是個鄉鎮區平均氣象要素與空品濃度系列作業的一部份。作業方式主要的說明可以參考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')

程式下載

處理結果

OMI05_NO2.pngOMI05_NO2Town.png
OMI_MINDS_NO2d衛星觀測2005年平均值。單位molec/cm2同左,但為鄉鎮區平均值
OMI_NO2.pngOMI_NO2Town.png
OMI_MINDS_NO2d衛星觀測2022年平均值。單位molec/cm2同左,但為鄉鎮區平均值