zoukankan      html  css  js  c++  java
  • GRIB格式转换心得(转自博客:http://windforestwing.blog.163.com/blog/static/19545412007103084743804/)

    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:GrADSDatagrib2005071500 –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[i] = GribText.ReadLine();

                aryData[i] = Convert.ToSingle(aryReadResult[i]);

            }

     

            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[i]);

         }

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

         fclose(fp);

  • 相关阅读:
    2019年第二周作业
    2019年pta作业第二题——求最大值及其下标
    2019春第十一周作业
    2019春第十周作业
    2019年寒假作业3
    2019年寒假作业2
    2019年寒假作业1
    我的老师
    自说
    Day16
  • 原文地址:https://www.cnblogs.com/cumtb3S/p/3896859.html
Copyright © 2011-2022 走看看