前言:近期,公司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
至此,数据导入完毕!