JAVA生成grib文件,Grib格式转换心得【转载】

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值