2016-06-03 16 views
1

Ich versuche, die uvIndex aller lat, lng in einer Grib2-Datei zu bekommen. Dies ist die link von wo ich die Datei bekomme. Das Problem ist, dass ich die Struktur der Datei nicht verstehen kann, so dass ich die Daten bekommen kann. Ich verwende pygrib, um die Datei zu lesen.Wie man über Breitengrad Längengraden einer grib2 Datei iteriert?

Hier ist der Code, den ich versucht habe:

grbs = pygrib.open('uv.t12z.grbf01.grib2') 
grb = grbs.select(name='UV index')[0] 
print grb.data(23.5,55.5) 

Was ich versuche alles zu erreichen, ist entweder iterieren die lat longs und den entsprechenden uvIndex Wert drucken oder ein lat lange eingeben und den entsprechenden Wert erhalten . Lesen Sie die Dokumentation von pygrib, aber ich konnte keinen passenden Befehl finden, der meinem Zweck dient. Bitte helfen Sie.

Antwort

2

Sie haben zwar GRIB Datei iterieren und wünschenswert Datensatz finden, dann werden die Daten erhalten, wie hier:

for g in grbs: 
    print g.shortName, g.typeOfLevel, g.level # print info about all GRIB records and check names 
    if (g.shortName == shortName and g.typeOfLevel == typeOfLevel and g.level == level): 
     tmp = np.array(g.values) 
     # now work with tmp as numpy array 

Um lat und lon-Arrays verwenden: lt, ln = g.latlons(), g - Element grbs.

Lesen Sie die Beispiele im Abschnitt python unter https://software.ecmwf.int/wiki/display/GRIB/GRIB+API+examples (pygrib verwendet diese Bibliothek zum Lesen von GRIB).

Der schnellste Weg, Daten aus großer GRIB-Datei zu erhalten, ist Index zu machen:

# use attributes what you want to build index 
indx = pygrib.index(gribfile,'typeOfLevel','level','parameterName') 

# important: msg is an array and may have more then one record 
# get U wind component on 10 m above ground 
msg = indx.select(level = 10, typeOfLevel = "heightAboveGround", 
parameterName = "U U-component of wind m s**-1") 
u10 = np.array(msg[0].values) 
# get V wind component on 10 m above ground 
msg = indx.select(level = 10, typeOfLevel = "heightAboveGround", 
parameterName = "V V-component of wind m s**-1") 
v10 = np.array(msg[0].values)