zoukankan      html  css  js  c++  java
  • 美国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数据到我们的数据库了。

  • 相关阅读:
    阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
    数据库中间件 ShardingJDBC 源码分析 —— SQL 解析(三)之查询SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(六)之删除SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(五)之更新SQL
    消息队列中间件 RocketMQ 源码分析 —— Message 存储
    源码圈 300 胖友的书单整理
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(一)分库分表配置
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 解析(四)之插入SQL
    数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由
    C#中Math类的用法
  • 原文地址:https://www.cnblogs.com/tiandi/p/11045602.html
Copyright © 2011-2022 走看看