GFS数据抽取与导出至MYSQL

发布时间 2023-03-26 01:29:39作者: 拥抱天空的风

  前言:近期,公司APP需要接入天气类数据,多方寻找,终于找到一个开源的且有较高权威的、免费的数据源,中间踩过的一些坑一一记录下来。

  1.数据来源GFS(全球天气预报系统(Global Forecasting System)),该系统每天发布4次全球范围的气象数据,分辨率有四种:0.25° x 0.25°,0.5 ° x 0.5 °,1.0 ° x 1.0 ° 。(相关地址:数据文档地址 ,数据地址

  2.数据文件介绍:每次发布的数据保存在命名为gfs.YYYYMMDDHH的文件夹中。文件命名格式:gfs.t{CC}z.pgrb2.0p25.f{FFF},其中CC表示发布的时间,FFF表示未来几小时的预报数据(000 - 384)。例如:gfs.t00z.pgrb2.0p25.f001 表示,0时发布的数据精度为0.25°(0p25)未来1小时的气象数据信息。由于文件太大了,直接下载原文件不仅下载速度慢,处理慢,而且非常占用存储空间,还容易上黑名单!官方支持用户过滤自己想要的数据进行下载,这样文件就会小很多(下载地址:0.25经度筛选地址)。同时官方还支持通过执行脚本文件get_gfs.pl的方式下载自己关心的数据,(相关地址:文档链接  get_gfs.pl)。

-------------------------------------------------------------脚本使用示例-------------------------------------------------------------

  脚本命令:get_gfs.pl data DATE HR0 HR1 DHR VARS LEVS DIRECTORY

 字段解释:
  DATE:预报开始时间,格式:YYYYMMDDHH(注: HH 可选值为 00 06 12 18)
  HR0:预报起始时间(小时,最小值:0)
  HR1:预报截止时间(小时,最大值:384)
  DHR:间隔时间(小时,可选值:3 6 12 24)
  VARS:数据字段列表(ex. HGT|TMP|OZONE ex. all)
  LEVS:数据级别列表(ex. 500 mb:200 mb:surface ex. all)
  DIRECTORY:数据文件导出目录
本项目需要的数据字段有:温度「TMP、TMAX、TMIN」、风速「UGRD、VGRD」、天气状况「」、降水概率(无)
单字段【1000mb气压下间隔3小时未来2小时气温】
  perl get_gfs.pl data 2023032506 0 2 3 TMP 1000_mb /data/gfs/tmpdata   
多字段同级别【1000mb气压下间隔3小时未来2小时U风速、V风速】
  perl get_gfs.pl data 2023032506 0 2 3 UGRD:VGRD 1000_mb /data/gfs/tmpdata2 
多字段同多级别【200mb、1000mb气压下间隔3小时未来2小时U风速、V风速】
  perl get_gfs.pl data 2023032506 0 2 3 UGRD:VGRD 200_mb:1000_mb /data/gfs/tmpdata3
多字段不同级别:
  perl get_gfs.pl data 2023032506 0 2 3 all 'TMP.500 mb|HGT.200 mb' /data/gfs/tmpdata4 【间隔3小时未来2小时500mb气压下温度、200mb气压下位势高度】
注:此处为了节省时间,抽取0~2小时内数据,时隔3小时。

根据需求,本项目应取数据为:
①.未来24小时天气状况、温度、风速 
perl get_gfs.pl data 2023032506 0 24 3 UGRD:VGRD:TMP 1000_mb /data/gfs/tmpdata
②.未来7天天气状况、最低温、最高温 【ToDo】
perl get_gfs.pl data 2023032506 0 168 24 all 'TMAX.|TMAX.(2 m above ground)|TMIN.(2 m above ground)' /data/gfs/tmpdata
  3.文件数据导入到MySQL
   GFS的数据格式为GRIB,需用wgrib2将数据导入。

    以CentOS为例,需要首先安装gcc和gfortran编译器、cmake、wgrib2。

    ①.查看是否安装gcc、gcc-gfortran及安装

rpm -qa | grep gcc
rpm -qa | grep gcc-gfortran
yum install gcc
yum install gcc-gfortran

    ②.查看是否安装cmake及安装(版本低需升级,后续编译有版本要求 3.17以上)

rpm -qa | grep cmake 或 cmake -version

  若未安装或版本较低,需要安装或者卸载安装,下载地址

yum remove cmake
cd /usr/tmp
wget https://cmake.org/files/v3.23/cmake-3.23.0-linux-x86_64.tar.gz
tar -zxvf cmake-3.23.0-linux-x86_64.tar.gz
cd cmake-3.23.0-linux-x86_64

  新建一个执行脚本

vim install

  输入待执行命令,如果缺相关文件夹则创建对应文件夹

#!/bin/bash
cp -r bin/* /usr/bin/
cp -r doc/* /usr/doc/
cp -r man/* /usr/local/man/
cp -r share/* /usr/share/

  最后执行安装

sh install

  查看安装版本

make -version

  ③.下载并安装 mysql-devel、wgrib2

# 安装 mysql-devel
 yum install mysql-devel
# 安装 wgrib2
wget ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz tar -xzvf wgrib2.tgz cd grib2 
# 设置编译环境 
export CC=gcc 
export FC=gfortran 
# 启用mysql支持,修改第114行 
vim makefile USE_MYSQL=1 
# 编译 
make 
# 查看wgrib2配置 
wgrib2/wgrib2 -config
 ④.数据导入
# 创建数据库
CREATE DATABASE weatherDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
# 创建表
create table wgrib2 (rt datetime, vt datetime, lat double, lon double, param varchar(80), level varchar(30), value double); 
# 导入数据
./wgrib2 /data/gfs/gfs.t00z.pgrb2.1p00.f144 -mysql <ip> <username> <password> <DB> <table>
# 过滤性导入数据,格式为 -if ":"后跟参数
#下边这条命令是将“1000 mb”的数据导入到wgrib2表中
./wgrib2  /data/gfs/gfs.t00z.pgrb2.1p00.f144 -if ":1000 mb above ground" -mysql 192.168.6.123 root pwd weatherDB wgrib2

至此,数据导入完毕!