Ich werde Ihnen zeigen, wie Sie ein binär ausgegebenes zweidimensionales Array mit echtem Wert aus Python lesen. Lesen Sie insbesondere die Geländedaten in hier. Dieses Mal sind die für MSM verwendeten Geländedaten das Ziel. In Bezug auf die Anzahl der Gitter und den Breiten- / Längengrad sind die Daten von diesem Verzeichnis der aktuelle Status. Es scheint mit MSM kompatibel zu sein.
Laut README
4.Datei Format
(1)Datenformular
4-Byte-reelle Zahl(IEEE754)Es ist eine zweidimensionale Anordnung von.
Die Folge von Bytes ist Big Endian.
(2)Koordinatensystem
Gleiches Längen- und Breitengrad-Gitterkoordinatensystem.
(a)Meso Numerical Forecast Model GPV
Anzahl der Gitter: Ost-West 481 Nord-Süd 505
Gitterabstand: Ost-West-Richtung 0.0625 Grad Nord-Süd-Richtung 0.05 Grad
Führender Gitterpunkt: 47 nördlicher Breite.6 Grad östlicher Längengrad 120 Grad
(Unterlassung)
(3)Datenspeicherreihenfolge
Speichert Gitterpunkte mit demselben Breitengrad vom ersten Gitterpunkt in Längsrichtung nach Osten.
Es wird auch wiederholt auf dem Breitengrad südlich davon gespeichert.
... anscheinend ...
Im folgenden Beispiel
Daten zur geopotentialen Oberflächenhöhe
(a) "TOPO.MSM_5K_20071121"Meso numerisches Prognosemodell für GPV
Nehmen wir diese Daten als Beispiel. Laden Sie zunächst die Daten herunter.
$ wget http://database.rish.kyoto-u.ac.jp/arch/jmadata/data/gpv/original/etc/200709/TOPO.MSM_5K_20071121
Der Rest arbeitet mit Python. Es wird angenommen, dass "numpy" installiert ist.
import numpy as np
f = open("TOPO.MSM_5K_20071121",mode='rb')
topo = np.fromfile(f, dtype='>f',sep='').reshape(505,481)
Sie können jetzt topografische Höhendaten in derselben Größe wie das MSM 505 x 481 laden.
Ich lese die Daten als Bigendian-4-Byte-Gleitkommazahl mit "dtype ="> f "in fromfile, speichere sie in einem eindimensionalen Array und" forme "sie um.
Durch Angabe von dtype kann eine andere Datei als ein eindimensionales Array erhalten werden, aber dt = np.dtype (('> f', (505,481)))
Selbst wenn es so angegeben wird, `topo.shape = Es wird ein dreidimensionales Array wie (1.505.481) sein.
Ich habe auch das dtype-Dokument überprüft, aber es scheint, dass es nicht auf einmal zu einem zweidimensionalen Array gemacht werden kann.
Lassen Sie es uns visualisieren, um zu sehen, ob es richtig geladen ist. Weitere Informationen finden Sie in diesem Artikel.
%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pygrib
grbs = pygrib.open('/temp/Z__C_RJTD_20170102000000_MSM_GPV_Rjp_Lsurf_FH00-15_grib2.bin')
grb = grbs.select(forecastTime=0)[0]
lats, lons = grb.latlons()
flat_lats= np.ravel(lats)
flat_lons= np.ravel(lons)
m = Basemap(llcrnrlat=lats.min(),urcrnrlat=lats.max(), llcrnrlon=lons.min(),urcrnrlon=lons.max())
m.drawcoastlines()
m.contourf(flat_lons, flat_lats, b, latlon=True, tri=True)
plt.colorbar()
plt.show()
Die Land- und Seeverteilungsdaten lauten übrigens wie folgt.
Recommended Posts