爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 34535|回复: 38

【转】使用wgrib转换grib资料的方法

  [复制链接]

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-2-9 08:47:24 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
该文章来自博客:http://windforestwing.blog.163.c ... 412007103084743804/如有错误 ,大家及时指出啊!ps:meteoinfo可以直接处理grib数据
===========================

grib格式转换心得

1、wgrib的使用

在cmd命令行下键入wgrib后即可察看wgrib相关命令参数,简要介绍如下:

l        Inventory/diagnostic–output selections 详细目录或诊断的输出选择

-s                 short inventory 简短目录

-v                 verbose inventory 详细目录

-V                 diagnostic output <not inventory> 诊断输出

<none>        regular inventory 一般目录

例如:wgrib E:\GrADS\Data\grib2005071500 –v>a.txt

       Options 相关选项

       -PDS/-PDS10                    print PDS in hex/decimal

十六进制或二进制绘制PDS图

       -GDS/-GDS10                  print GDS in hex/decimal

十六进制或二进制绘制GDS图

       -verf                                  print forecast verification time

       -ncep_opn/-ncep_rean       default T62 NCEP grib table

       -4yr                                    print year using 4 digits

l        Decoding GRIB selection      GRIB格式解码选项

-d [record number|all]       decode record number

按编号输出数据

-p [byte position]               decode record at byte position

按二进制位置输出数据

-i                                        decode controlled by stdin <inventory list>

                                                 按输入流控制编码,一般转化Grib文件都要加

<none>                              no decoding

Options 相关选项

       -text/-ieee/-grib/-bin          conver to text/ieee/grib/bin

                                                        转化格式控制

-nh/-h                        output will have no headers/headers

                                                 是否包含标题头

-H                                     output will include PDS and GDS <-bin/-ieee only>

                                                 输出否否包含PDS和GDS

-append                             append to output file

                                                 在输出文件上添加而不是替换

-o [file]                              output file name, ‘dump’ is default

                                                 输出文件名

综合使用实例:

DOS命令行下:

>wgrib grib_file_name | find “:GAP:” | wgrib grib_file_name –i –nh –text –o temp

linux shell命令行下:

% wgrib grib_file_name | grep “:GAP:” | wgrib grib_file_name –i –nh –text –o temp

从Grib格式文件中选择GAP参数相关的数据生成名为temp的文本文件

2、 Grib文件目录说明

l      wgrib –s生成目录:

1:0:d=05071500:HGT:1000 mb:anl:NAve=0

1)        记录号

2)        二进制位置

3)        时间

4)        参数名称

5)        层次值

6)        analysis分析数据,也可能是fcst(forecast 预报数据)

7)        用于求平均的格点数

l      wgrib –v 生成目录:

1:0:D=2005071500:HGT:1000 mb:kpds=7,100,1000:anl:"Geopotential height [gpm]

1)        记录号

2)        二进制位置

3)        时间

4)        参数名称

5)        层次值

6)        kpds,第一个数字是Grib参数编号,比如PRES是1,TMP是11;第二个数字是层次类型(高度层或等压面层);第三个数字是层次值;

7)        analysis分析数据,也可能是fcst(forecast 预报数据)

8)        该参数的解释及单位

l      wgrib –V 生成目录:

rec 1:0:date 2005071500 HGT kpds5=7 kpds6=100 kpds7=1000 levels=(3,232) grid=3 1000 mb anl:

   HGT=Geopotential height [gpm]

   timerange 10 P1 0 P2 0 TimeU 1  nx 360 ny 181 GDS grid 0 num_in_ave 0 missing 0

   center 7 subcenter 0 process 82 Table 2

   latlon: lat  90.000000 to -90.000000 by 1.000000  nxny 65160

          long 0.000000 to -1.000000 by 1.000000, (360 x 181) scan 0 mode 128 bdsgrid 1

   min/max data -631 334  num bits 14  BDS_Ref -6310  DecScale 1 BinScale 0

这个综合几种两种目录显示目前只能看明白其中一部分……

l        wgrib <none> 生成目录:

1:0:d=05071500:HGT:kpds5=7:kpds6=100:kpds7=1000:TR=10:P1=0:P2=0:TimeU=1:1000 mb:anl:NAve=0

1)        记录号

2)        二进制位置

3)        时间

4)        参数名称

5)        Grib参数编号,比如PRES是1,TMP是11

6)        层次类型(高度层或等压面层)

7)        层次值

8)        时间范围

9)        时间1的时段

10)    时间2的时段

11)    预报时间单位

12)    层次值

13)    analysis分析数据,也可能是fcst(forecast 预报数据)

14)    用于求平均的格点数

3、 利用C程序转化Grib格式文件与读取Grib文件

C# 实例(Web平台上)

    /*调用Dos命令实现Grib文件到Text文件的转换*/

    private void GribToText()

    {

        Process process = new Process();

        process.StartInfo.FileName = "cmd.exe";

        process.StartInfo.UseShellExecute = false;

        process.StartInfo.RedirectStandardInput = true;

        process.StartInfo.RedirectStandardOutput = true;

        process.StartInfo.CreateNoWindow = true;    //不创建窗口

        process.Start();

        string command = "wgrib E:\\Projects\\AtmosData\\grib2005071500 | find \":5WAVA:\" | wgrib E:\\Projects\\AtmosData\\grib2005071500 -i -nh -text -o E:\\Projects\\AtmosData\\temp";

        process.StandardInput.WriteLine(command);   //调用Dos命令

        process.StandardInput.WriteLine("exit");

        process.WaitForExit();

        string output = process.StandardOutput.ReadToEnd();

        Response.Write(output); //将执行结果输出

}

/*将Text文件中的Grib数据读入临时数组*/

    private void ReadTextData()

    {

        StreamReader GribText = new StreamReader("E:\\Projects\\AtmosData\\temp");


        string[] aryReadResult = new string[65160];     //360*181个格点数据

        float[] aryData = new float[65160];


        for (int i = 0; i < 1000; i++)

        {

            aryReadResult = GribText.ReadLine();

            aryData = Convert.ToSingle(aryReadResult);

        }


        GribText.Close();

    }

C++实例(控制台下)

/*调用DOS命令将Grib文件转化为临时文本文件*/

     system("wgrib E:\\Projects\\AtmosData\\grib2005071500 | find \":5WAVA:\" | wgrib E:\\Projects\\AtmosData\\grib2005071500 -i -nh -text -o E:\\Projects\\AtmosData\\temp");


/*使用文件输入输出流将text文件读入数组中*/

     FILE *fp;

     long int i;

    float wava[65160] ={0};

    char *path ="E:\\Projects\\AtmosData\\temp";

    if((fp=fopen(path,"r")) == NULL)

     {

         printf("Can not open file!");

         exit(1);

     }

     for( i=0; i<GRIBNUMBER; i++)

     {

         fscanf_s(fp,"%f",&wava);

     }

     for( i=0; i<GRIBNUMBER; i++)printf("%f ",wava);

     fclose(fp);

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-7 10:24:54 | 显示全部楼层
这个帖子我看到过
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-11 16:08:21 | 显示全部楼层
非常感谢~
很好!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-4 16:44:06 | 显示全部楼层
好好学习下!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-1-21 14:53:09 | 显示全部楼层
楼主,你不要标题1写成大红字,标题2、3小得藏起来找都找不到嘛。。。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-16 12:49:58 | 显示全部楼层
那他转换出来的东西放在哪里了呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-18 13:59:47 | 显示全部楼层
学习学习哦!!~~~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-26 23:56:04 | 显示全部楼层
好的,支持一下楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-3 01:03:40 | 显示全部楼层
谢谢楼主分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-3 21:35:26 | 显示全部楼层
谢谢楼主非常实用
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表