爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 16387|回复: 6

[求助] 用Pygrib读取grb2文件,读到的值跟wgrib2的不同

[复制链接]

新浪微博达人勋

发表于 2014-8-12 16:31:10 | 显示全部楼层 |阅读模式

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

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

x
处理的是中尺度数值天气预报的的grb2文件,是由GFS预测资料降尺度的来的。现在想从中提取出想要的风速、2m温度等参量制作天气预报,

开始用pygrib定义对象,提取grb2文件中特定坐标处的各个参量,后来尝试用wgrib2工具读取相同的文件,发现读到的数值不一样。下面是python脚本:

#!/usr/bin/env python
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import matplotlib
matplotlib.use('AGG')
from pylab import *
import numpy as np
#import matplotlib
import Image
import pylab as m
import pygrib
import commands
#import pygrib
#rc('font',**{'family':'serif','serif':['simhei']})


# COMPROBAR LOS ARGUMENTOS DE ENTRADA
if int(size(sys.argv)) < 4:
        print "Faltan argumentos:"
        print "./GRIBtoAscii.py y x File"
        exit()


j = int(sys.argv[1])
i = int(sys.argv[2])
Fichero=sys.argv[3]


# open a GRIB2 file, create a Grib2 class instance.
grbs = pygrib.open(str(Fichero))  
grbs.seek(0)


#LON = grbs[92].values[25,:]-360
#LAT = grbs[91].values[:,0]


##FUNCION ENCONTRAR LAT/LON + CERCANA
#def find_nearest(array,value):
    #idx=(np.abs(array-value)).argmin()
    #return array[idx], idx


##ENCONTRAR I,J DE LA LAT/LON
#NearLon=find_nearest(LON,longitude)
#NearLat=find_nearest(LAT,latitude)


#SACAR VARIABLES DEL FICHERO GRIB Y CALCULAR FECHA DE LA PREDICCION
StartDate = grbs[1].dataDate
Alc = grbs[1].endStep
ForecastDate = commands.getoutput('date -u -d "'+str(Alc)+' minutes "'+str(StartDate)+'" 20 UTC" "+%Y%m%d%H"')

P = grbs[6].values[j,i]
T2M = grbs[3].values[j,i]


U10M = grbs[1].values[j,i]
V10M = grbs[2].values[j,i]


RH2M = grbs[5].values[j,i]
RAIN = grbs[7].values[j,i]


CLOUD = grbs[19].values[j,i]


#MODULOS DE LA VELOCIDAD
Vel10M = sqrt(U10M*U10M+V10M*V10M)       


#DIRECCION DEL VIENTO PREDICHO
def CalcDirection(U,V):


        if U==0. and V==0.:
                Dir=0.
        else:
                alfa=math.atan2(float(abs(U)),float(abs(V)))*(180/pi)


        if U>0. and V>0.:
                Dir=180+alfa
               
        elif U>0. and V<0.:
                Dir=360-alfa
               
        elif U<0. and V>0.:
                Dir=180.-alfa
               
        else:
                Dir=alfa
        return Dir


Dir10M = CalcDirection(U10M,V10M)




print "%s\t%i\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f" \
% (str(ForecastDate), Alc, T2M-273.15, U10M, V10M, Vel10M, Dir10M, P/100, RH2M, RAIN, CLOUD)


grbs.close()


wgrib2这个工具目前不太会用,用的是简单指令: wgrib2 xxx.grb2 -s -ijlat 225 435


不知道为什么两种办法读出来的值不一样。




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

新浪微博达人勋

发表于 2014-8-13 12:17:08 | 显示全部楼层
pygrib使用的是ECMWF的grib API接口,不知道是不是跟GFS的不太一致。
一般来说wgrib给出的结果都是正确的。你在linux系统下,可以使用很多其它函数,如pynio、iris等
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-9-2 10:23:15 | 显示全部楼层
我还不会这个,下载下来研究一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-11-13 09:00:52 | 显示全部楼层
楼主用的cygwin?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-12-5 20:34:56 | 显示全部楼层
谢谢分享!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-4-5 20:30:04 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2020-3-17 09:32:12 | 显示全部楼层
楼主,请问您知道怎么用pygrib把模式资料grb转为文本文件吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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