zoukankan      html  css  js  c++  java
  • python读取grib grib2气象数据

    如何读取GRIB数据?快看Python大神整理的干货!

    橙子心法

    百家号17-11-0116:30

    GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品资料。现行的GRIB 码版本有GRIB1 和GRIB2 两种格式。由于小编只接触过GRIB1数据,所以本文仅讲解如何读取GRIB1数据。

    使用Python读取GRIB数据要根据在何种平台分别讨论。

    一、Linux及Mac OS系统下

    Linux、Mac OS系统下使用Python语言实现Grib数据读取主要依靠pygrib库,pygrib是欧洲中期天气预报中心(ECMWF)的GRIG API C库的Python接口,通过这个库就可以将Grib数据读取出来。

    (一)导入pygrib模块

    >>> import pygrib

    (二)打开Grib文件

    >>> grbs = pygrib.open('/Users/Kallan/Documents/data/echhae50.082')

    (三)提取文件信息

    >>> grbs.seek(0)

    >>> for grb in grbs:

    grb

    1:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 500:fcst time 24 :from 201507081200

    信息解读

    1 :数据列表的行号,有的文件可能包括多个数据

    Geopotential Height:数据的名称

    gpm (instant):数据的单位

    regular_ll:常规数据,其实这个字段我也不清楚

    isobaricInhPa:这个字段表示的是数据属性,此处表示是以hPa为单位的等压面

    level 500:这个字段表示的是高度层

    fcst time 24 :预报时效

    from 201507081200 :起报时间

    综合上面的信息可以得出,这个文件是从2015年7月8日12时开始的24小时后500hPa等压面高度场数据

    (四)导出文件数据

    二、Windows系统下

    windows系统下并不能使用pygrib直接读取GRIB数据,主要原因是:GRIB_API在Windows下无法编译安装,从而导致pygrib无法安装。我曾经也为这个问题苦恼了很久,也到ECMWF论坛里找了很久,也给ECMWF发了邮件,回应我没有做Windows版本的打算,所以在Windows下直接用pygrib读取GRIB数据是基本不可能实现了。

    后来通过大量的百度,还是找到了在Windows下读取GRIB数据的方法:

    一种是在Cygwin中安装pygrib,将pygrib的方法编译成读取GRIB的exe;

    第二种是通过一个第三方的程序wgrib,先用wgrib把数据读存到txt,然后再用python读取txt文件;

    第三种是通过官方的GRIB数据说明文档自己编写解码程序。

    首先尝试了Cygwin,pygrib成功编译出了exe,但是无法运行,感觉Cygwin稍微复杂,所以我没有继续研究这一种方法,直接转向第二种方法。

    (一)wgrib

    在cmd中直接运行wgrib.exe可得到如何使用的帮助信息。

    知道如何使用wgrib程序后我们就可以使用os.system在Python中执行Windows命令行程序wgrib了

    这样就可以在指定目录找到输出的txt文件,然后将txt文件中的数据转换成数组。

    原数据是37*37的数组,而输出的数据是每个数据占一行,所以需要进行一下转换

    (二)自己编写解码库

    编写解码程序的过程我已经记不清了,但是程序已经放到了GitHub中,大家可从头条号主页下方的GitHub菜单进入,里面还有GRIB的官方说明文档,方便大家照着说明文档继续完善。

    由于小编只用到了GRIB1格式的数据,所以只写了GRIB1的解码库,而且仅仅是将数据导出功能,如果有感兴趣的同学,可以继续完善这个库。

  • 相关阅读:
    API网关服务
    技术攻关:从零到精通 https://mp.weixin.qq.com/s/mix-0Ft9G1F5yddNjSzkrw
    如何在团队中推广一项技术 —— 解决Odin一站式微前端的缓存问题
    设计模式的底层逻辑 找到变化,封装变化
    从Android内存到图片缓存优化
    百度C++工程师的那些极限优化(内存篇)
    享元模式
    协同编辑冲突处理算法综述
    大型前端项目内存优化总结
    雪碧图
  • 原文地址:https://www.cnblogs.com/ruiy/p/9804260.html
Copyright © 2011-2022 走看看