Link Search Menu Expand Document

中央氣象局WRF_3Km數值預報產品之下載

Table of contents

背景

  • 樓上的討論,此處進一步說明下載細節。
  • 目前為止CWB是要求會員登錄的,登入後方能瀏覽檔案網址,經網址定位與確認後,實際自動下載時(如用wget)反而不必帳密。
    • 其會員帳號為電子郵件、密碼須包括大小寫、數字、特殊字元(shift 1~0
  • 檔案網址的資訊,寫在xml檔案內容內,範例如下:
    • 2021/10/12前舊址:
      • https://opendata.cwb.gov.tw/fileapi/opendata/MIC/M-A006${dom}-0$i.grb2
    • 新址:
      • https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MIC/M-A006${dom}-0$i.grb2
      • 舊版wget(1.12)會需要加上選項--no-check-certificate
  • 檔案為逐6小時,按小時分檔儲存。
    • 自0時開始計算,直到第84小時(3天半)
    • macOS對數字與文字的檢核較為嚴格,for迴圈的設法有些差異

centos的下載程式

  • for使用range的寫法,分別為{起..迄..間隔}
    for i in {00..84..6};do
      hour=`printf "%02d" $i`
      echo "### DOWNLOADING DATA FOR FORECAST HOUR "${hour}" ###"
      if ! [ -e M-A0061-0$i.grb2 ];then
        wget -q --no-check-certificate https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MIC/M-A0061-0$i.grb2
      fi
      if ! [ -e M-A0064-0$i.grb2 ];then
        wget -q --no-check-certificate https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MIC/M-A0064-0$i.grb2
      fi
    done

macOS的下載程式

  • 前2行的語言設定(LANGLC_ALL)是因應新python(3.9)的檢核
  • for完全採數字的寫法,再使用printf將數字改成文字
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
today=$(date +%Y%m%d)
rundate=$(date -v-1d -j -f "%Y%m%d" "$today" +%Y%m%d)
yr=$(date -v-1d -j -f "%Y%m%d" "$today" +%Y)
pth=/Users/Data/cwb/WRF_3Km/$yr/${rundate}
mkdir -p $pth

WGET=/usr/local/bin/wget
cd $pth
for ((d=0;d<=84;d+=6));do
  i=`printf "%02d" $d`
  echo "### DOWNLOADING DATA FOR FORECAST HOUR "${i}" ###"
  for dom in 1 4;do
  if ! [ -f M-A006${dom}-0$i.grb2 ];then
#    $WGET -q https://opendata.cwb.gov.tw/fileapi/opendata/MIC/M-A006${dom}-0$i.grb2
    $WGET -q https://cwbopendata.s3.ap-northeast-1.amazonaws.com/MIC/M-A006${dom}-0$i.grb2
  fi
  done
done

日期的計算

CWB每日的檔案名稱都一樣,因此儲存時必須要加以命名,涉及日期的計算。就此,macOScentos的指令是不同的:

  • centos的指令是將增減時間放在引數的後面。
  • macOS則是在引數日期之前,進行時間的加、減。
    $ diff get_M-A0064.cs ~/mac/Data/cwb/WRF_3Km/get_M-A0064.cs
    4,6c4,6
    < rundate=$(date -ud "${today}-1days" +"%Y%m%d")
    < yr=$(date -ud "$today" +%Y)
    < pth=/nas1/Data/cwb/WRF_3Km/$yr/${rundate}
    ---
    > rundate=$(date -v-1d -j -f "%Y%m%d" "$today" +%Y%m%d)
    > yr=$(date -v-1d -j -f "%Y%m%d" "$today" +%Y)
    > pth=/Users/Data/cwb/WRF_3Km/$yr/${rundate}
    

自動下載排程

  • 設定每天0時30分開始下載
    kuang@MiniWei /Users/Data/cwb/WRF_3Km
    $ crontab -l|grep 3Km
    30 0  *  *  *   /Users/Data/cwb/WRF_3Km/get_M-A0064.cs &> /Users/Data/cwb/WRF_3Km/get_M-A0064.out 2>&1
    

檢核

個數與大小

  • 檔案個數大小:每層共15個檔(84/6+1),3Km檔案共約2.8G,15Km檔案共約0.8G
    kuang@MiniWei /Users/Data/cwb/WRF_3Km/2021/20211129
    $ ls M-A0064-0??.grb2|wc -l
        15
    kuang@MiniWei /Users/Data/cwb/WRF_3Km/2021/20211129
    $ du -ach M-A0064-0??.grb2|tail -n1
    2.8G    total
    kuang@MiniWei /Users/Data/cwb/WRF_3Km/2021/20211129
    $ du -ach M-A0061-0??.grb2|tail -n1
    878M    total
    

轉成nc檔案

  • wgrib2wgrib2 xx.grb2 –netcdf xx.nc,參blog.csdn
  • ncl_convert2nc:先啟動ncl_stable環境
    source ~/conda_ini ncl_stable
    for I in $(ls *.grib2);do ncl_convert2nc $i;done
    

批次腳本

整體下載、轉檔、提取近地面風等作業可以詳見github的腳本原始碼

Reference