Forecast Poland

Sources

Everything on this site is somebody else's open data. Nothing here is scraped, nothing is behind a key, and every feed below permits republication. This page is the whole list, with what each one costs to fetch — because a public service's bandwidth is a real thing to spend.

What IMGW-PIB publishes

Poland's Institute of Meteorology and Water Management is, on the evidence of this scan, one of the more open meteorological services in Europe. The legal basis is stated on its own portal: Poland's open data act of 11 August 2021, and Commission Implementing Regulation (EU) 2023/138, which places meteorological model output, radar and station observations in the category of high-value datasets that must be available free, in bulk, machine-readable and under an open licence. IMGW complies with it properly.

FeedWhat it isFormat CadenceCost per cycleUsed for
COSMO 2.8 km
COSMO_HVD_<HH>_<00,01>
The national mesoscale model. 380 × 405 on a rotated grid, 50 hybrid levels, hourly to T+60. GRIB14 runs/day9.7 GB All the 2.8 km maps, and every field on this site that does not exist elsewhere
POLRAD composite
COMPO_CMAX_250, COMPO_SRI
National composite of ten Doppler radars — column-max reflectivity 900 × 900, surface rain rate 800 × 800. ODIM HDF5every 5 min0.14 MB/frame Radar, and the radar overlay in the explorer
synop62 synoptic stations, hourly. JSONhourly14 kB Model verification, halny
hydro913 river gauges with each gauge's own warning and alarm stage. JSON~hourly550 kB Rivers
warningsmeteo / warningshydro Warnings, degree 1–3, each with the TERYT codes of the powiats it covers. JSONon issue120 kB Warnings, front page
meteo788 automatic telemetric stations, 10-minute precipitation.JSON10 min520 kB Not yet used
Two things IMGW's own documentation gets wrong, both found by reading the files rather than the page, and both worth stating because anyone else building on this feed will hit them.
  1. The COSMO readme.txt describes a 0.0625° grid of 415 × 460 points with the rotated pole at 32.5 °N and 40 levels. The GRIB says 0.025°, 380 × 405, southern pole at −40 °N and 50 levels. The readme describes the 7 km run this feed used to carry. Believing it builds a sampler onto a domain three times too large.
  2. The readme's field names are not the file's. The land mask is lsm and not FR_LAND; the surface height is HSURF and not HH; the accumulated snowfall is lssf and not SNOW_GSP. Asking for a name eccodes does not use finds nothing and renders an empty field with no error anywhere.
A third, in the radar: the ODIM files state both a pixel size and their four corners, and the two disagree — the scales give 906.8 × 895.5 km where the corners give exactly 900 × 900. The corners are right.

The other model feeds

SourceModelTransport Cost per cycleLicence
DWD opendata.dwd.deICON-EU 7 km, T+120 One bzip2 file per variable per step, ~1 MB each ~2.2 GB CC BY 4.0
Met Office on AWS Open DataGlobal 10 km, T+168 One NetCDF per variable per step, whole-globe, cropped on arrival ~2.6 GB British Crown copyright, CC BY 4.0
ECMWF data.ecmwf.intIFS 0.25°, T+240 HTTP byte ranges against the published JSON-lines index — a step costs the 12 records this site draws, about 6 MB against 94 ~0.3 GB CC BY 4.0
GIOŚ api.gios.gov.plAir quality index, ~290 stations JSON-LD, one request per station~1 MB Polish open data act
Natural EarthCoast, borders, voivodeships, rivers, lakes Shapefiles, 10 m, built once into pre-projected JSON oncePublic domain

On bandwidth, and being a good guest

COSMO is by far the most expensive thing here, and the reason is worth stating plainly. IMGW's download endpoint does not support HTTP byte ranges — a Range request returns the whole object — so a lead time cannot be subsetted by asking for the fifteen records this site draws out of the 523 in the file. It has to be streamed.

What this site does instead is hang up. A GRIB file is a sequence of self-delimiting messages, so the ingest reads the socket, cuts messages out of the buffer as they arrive, and closes the connection the moment the last wanted record has gone past. The useful records end at about 90 % of the file, so that saves roughly a tenth — measured on a real cycle, 9,740 MB pulled against 10,494 MB of file. The larger benefit is that the resident set stays at a few hundred kilobytes per stream instead of 161 MB.

At four cycles a day that is about 39 GB a day from a public service. It is well within what the regulation contemplates, and it is still somebody's bandwidth. If IMGW ever asks, the axis is one constant in ingest/sources.py and halving the cycles halves the bill with no other change.

What this site is not

It is not an official source and it issues no warnings. It re-projects and draws other people's data, and it can be stale, incomplete or wrong. For anything that matters:

The inversion, smog and halny fields are computed here and are ours, not IMGW's. Their definitions are given in full on the smog page and the halny page so they can be argued with.