美國gfs數據介紹和解析


最近有個項目需要開發個氣象信息API,可以通過經緯度查找未來幾天的氣象信息。

經過幾天的研究,現在簡單總結一下。

1、數據來源
數據來源采自美國國家環境預報中心的GFS(全球預報系統),該系統每天發布4次全球范圍的氣象數據,分辨率最高可達到0.25° x 0.25°,精度還是比較可觀的。

2、數據下載
GFS數據提供FTP下載方式:http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/

每次發布的數據保存在命名為gfs.YYYYMMDDHH的文件夾中。本次需要的數據精度為0.25°(0p25),所以數據的文件名為:gfs.t{HH}z.pgrb2.0p25.f{XXX}

其中HH表示發布的時間,XXX表示未來幾小時的預報數據。例如gfs.t00z.pgrb2.0p25.f001 表示0時發布的未來1小時氣象數據信息。

那么問題來了,這個文件太大了,因為分辨率比較高,每個文件高達200多MB,不僅下載速度慢,處理慢,對存儲空間也是一個考驗。

於是找到了一個可以在線過濾要下載數據的地址:

http://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl

這個網站允許用戶僅下載過濾后的文件,並提供下載網址,這樣文件就會小很多。

例如,在本項目中,僅需要下載降雨數據(PWAT),並且經緯度范圍為特定區域,每次發布的數據全部下載下來也才8M多點。

3、wgrib2
GFS的數據格式為GRIB,那么什么是GRIB呢? 官方的解釋如下:

GRIB is a WMO format for gridded data. GRIB is used by the operational meteorological centers for storage and the exchange of gridded fields. GRIB's major advantages are files are typically 1/2 to 1/3 of the size of normal binary files (floats), the fields are self describing, and GRIB is an open, international standard.

那么要想獲得GRIB文件中的數據,則需要用到一個軟件wgrib2,,該軟件在ncep網站上提供源碼下載,可以很方便的在Linux下使用gcc進行編譯。

以CentOS為例,需要首先安裝gcc和gfortran編譯器。

# yum install gcc
# yum install gcc-gfortran

然后就可以下載並安裝wgrib2了。

1) Download ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz
2) untar wgrib2.tgz:  tar -xzvf wgrib2.tgz   (use gnu tar)
3) cd to main directory:  cd grib2
4) define the C and fortran compilers and make
   Bash:
     export CC=gcc
     export FC=gfortran
     make
     make lib                        only if you want the ftn_api
   Csh
     setenv CC gcc
     setenv FC gfortran
     make
     make lib                        only if you want the ftn_api
5) See if wgrib2 was compiled
     wgrib2/wgrib2 -config

需要注意的是,wgrib2以插件的形式提供了mysql入庫功能,但是需要在make之前編輯"makefile" 文件以標記使用MYSQL(USE_MYSQL=1)。

另外,在編譯的過程中會用到/usr/local/include的頭文件,如果安裝MySQL插件還需要安裝下yum install mysql-devel。

安裝后就可以體驗下wgrib2的解壓並入庫功能了。

4、使用wgrib2解壓文件並load進mysql數據庫
使用wgrib2裝載數據庫,首先要創建對應的數據庫表
create table wgrib2 (rt datetime, vt datetime, lat double, lon double, param varchar(80), level varchar(30), value double); 

這里各列的含義如下:
rt: run time
vt: valid time
lat: latitude
lon: longitude
param: parameter
level: level/layer
value: value

命令也很簡單:
# ./wgrib2 gfs.2017061900/gfs.t00z.pgrb2.1p00.f000 -if ":PWAT" -mysql <server_ip> <username> <password> <dbname> <tablename>

該命令會將文件中的全部PWAT數據放到對應的表中。

有了以上基礎,就可以寫個腳本每天自動化下載並保存GFS數據到我們的數據庫了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM