Så fungerar GRIB-format
På SMHI och andra meteorologiska institut sparas modelldata i något som kallas GRIB-format. GRIB är ett binärt dataformat för data på ett beräkningsbart gridnät. Formatet är definierat av WMO. En GRIB-fil innehåller mestadels kod som kombineras med externa metadata för att rätt kunna läsa ut och tolka datasetet i GRIB-filen.
GRIB-formatet finns i två versioner GRIB1 och GRIB2. Den historiska analysdata som SMHI levererar är i GRIB2-format.
För att hantera GRIB-format behöver du:
- Program för att öppna och avkoda GRIB-fil
- Översätta roterade koordinater (och lambert)
- Rotera eventuella roterade vindar
- Tabeller för att tolka parameterkoder
Program för att läsa GRIB-filer
För att kunna läsa GRIB-packad data behövs program för att packa upp GRIB-filen och tolka data. Vid SMHI används mestadels program framtagna av European centre for medium-range weather forecasts (ECMWF).
Dokumentation och källkod till programpaket ECMWFs webbplats för ecCodes Länk till annan webbplats.
Översätt roterade koordinater och lambert
Nedladdningsbara meteorologiska modeller har ett roterat latitud/longitud gridnät (eller så kallad Lambert-projektion) medan oceanografiska modeller har ett reguljärt latitud/longitud gridnät.
De meteorologiska modeller som kan hämtas som öppna data har data lagrat på ett roterat gridnät eller i så kallad Lambert-projektion. Roterade koordinater innebär att man flyttar sydpolen från lat/lon -90/0. Skälet till rotationen är att man genom att flytta ekvatorn till Sveriges latitud får mindre skillnad i avståndet mellan gridpunkter i norra och södra delen av modellområdet än vid oroterat gridnät.
I de fall då gridnätet är roterat kan koordinaterna i gridnätet behöva beräknas om till reguljär latitud och longitud. Detta kan göras med hjälp av den exempelkod som finns nedan. All indata som behövs finns som metadata i GRIB-filen.
Rotera vind
Vinden beskrivs i de nedladdningsbara GRIB-filerna som U/V (ost/nord) relaterat till det underliggande gridnätet. Är gridnätet roterat är även vinden roterad och för att bli korrekt i ett reguljärt gridnät behöver en omräkning ske. Exempelkod för detta finns nedan.
Gridnät för vindberäkningar
Det finns en skillnad i hur beräkningar av vinden sker på olika nivåer. U och V beräknas på olika typer av ARAKAWA-grid beroende på typ av nivå.
Vinden på 10-meters nivå beräknas enligt ARAKAWA C medan vinden på modellnivåer (indicatorOfTypeOfLevel=109) beräknas enligt ARAKAWA A.
Exempel på rotation och område
En modells hörnkoordinater (beräknat i modellens projektion) och rotation finns beskrivet i form av metadata i GRIB-meddelandet. I GRIB edition 1 anges detta (värden tagna från PMP) bl.a. med metadata ur sektion 2:
latitudeOfFirstGridPointInDegrees = -6.749
longitudeOfFirstGridPointInDegrees = -7.775
latitudeOfSouthernPoleInDegrees = -30
longitudeOfSouthernPoleInDegrees = 15
De två första värdena anger i PMP:s fall sydvästra hörnet i modellens projektion (roterad latitud/longitud i PMP). De två sista talar om till vilka koordinater sydpolen har flyttats till i samband med rotationen.
Omräkning mellan roterad och reguljär projektion är komplicerad. Som ett förenklat sett att förklara områdets storlek kan man tänka sig att skärningen mellan nollmeridianen och ekvatorn genom rotation flyttats till 15° ost och 60° nord.
Javascript med exempel för omräkning
Exempelkod för omräkning mellan roterad och reguljär projektion finns i följande fil. Tänk på att vindkomponenterna (u och v) också måste räknas om. Även kod för detta finns i filen.
Javascript med exempel för omräkning mellan och reguljär projektion
Kodtabeller
Kodtabeller för de modeller där data finns att ladda från SMHI.