Grib格式转换心得
1、wgrib的使用
在cmd命令行下键入wgrib后即可察看wgrib相关命令参数,简要介绍如下:
l Inventory/diagnostic–output selections 详细目录或诊断的输出选择
-s
short inventory 简短目录
-v
verbose inventory 详细目录
-V diagnostic output 诊断输出
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
按输入流控制编码,一般转化Grib文件都要加
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
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 生成目录:
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平台上)
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); //将执行结果输出
}
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++实例(控制台下)
system("wgrib E:\\Projects\\AtmosData\\grib2005071500 | find
\":5WAVA:\" | wgrib E:\\Projects\\AtmosData\\grib2005071500 -i -nh
-text -o E:\\Projects\\AtmosData\\temp");
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
{
fscanf_s(fp,"%f",&wava[i]);
}
for( i=0; i
fclose(fp);