Community. Driven. Weather. Data. | Always Ad-Free | Developer FriendlyChecking statusDiscord
Become a supporter
Sign in
Storm analysis

Reading the map

Turning the storm cells layer on, and what the cell, the two lines and the two cones each mean once it is.


WXA/SA is on the live map as the Storm cells layer. It is off by default on purpose: it is an experimental nowcast rather than an issued warning, so it should be something you asked for rather than something you were shown.

Open Layers, turn on Storm cells, and a second panel appears under it with the lead selector and the legend.

The four shapes

The cell The storm outline, colored by how strongly it is rotating.
The track Dashed, behind it, with a dot per two-minute scan. Roughly the last hour of where the storm has been, so the dot spacing shows its speed.
The forecast track Dotted, ahead of it, with a bar across the line every 15 minutes: where its measured motion puts it next.
The cone A wash around that line: where it might be by the lead time you pick.

Dashed is the past and dotted is the future. The two lines are the same color and meet at the cell, so that is the distinction to read them by.

Cones draw underneath the NWS warning polygons, because a warning polygon is a decision somebody made and it belongs on top of ours.

The colors

The ramp runs from no rotation at the blue end up through the notification bands to Extreme at the pink one. It is the same scale your alert floor is set in, so a cell you can see and an alert you might get agree about how serious it is.

  • Blue-green is under the alert threshold: rotating either not at all or not enough to act on.
  • Yellow through pink is Significant and above, the bands that can notify you. The color break is the threshold, so look for the flip from cool to warm rather than for any particular shade.
  • A white ring marks a storm rated severe-likely on any hazard: damaging wind, hail or a tornado.

Watch for the ring. A hail monster with no rotation at all reads as quiet on a rotation ramp, and the ring is what says “this one is serious on the hazard it is actually producing”.

Click any cell and its band is named at the top of the popup, so you never have to judge a band from a shade.

The lead selector

The cone is drawn out to a lead time you choose: 10, 20, 30 (the default), 45 or 60 minutes.

Pick a short lead to see precisely where a storm will be in ten minutes. Pick a long lead to see which storms are a threat to you sooner, and accept that it shades half the screen: a 60-minute cone is roughly 9,500 km², about a 100 km swath, and the cone’s area grows 5.3× between 10 and 60 minutes.

Accuracy is not the trade-off here. The chance the storm is actually inside the shape when it gets there holds above 92% all the way out to an hour. What changes is how much ground the shape covers.

The forecast track

The dotted line is the storm carried forward along the motion we fitted to its last few scans, and it runs down the middle of the cone. The bars across it mark roughly every 15 minutes out to the lead you picked, so you can count ticks to read when the storm reaches a place: one tick is about a quarter of an hour.

On an alerting cell, and on any cell you click, the minutes are printed beside each bar. Elsewhere the bars are left bare: a view can hold eighty tracked cells, and four numbers on each is not a map.

Two things the line does not say. It is not a promise the storm reaches the last tick: about one storm in ten travels less than half the marked distance, which is exactly why the cone is drawn around it. And it is not a second opinion - the line and the cone come from one motion fit, so the cone is the spread around this line rather than a different forecast.

A rotating storm gets a second dotted line in the rotation’s own color, from the rotation’s own motion. It frequently leaves the cell on a different heading, and that difference is the reason the two are tracked separately. See Rotation.

A storm on its first scans has no fitted motion, so it has no forecast track and no cone either. Nothing is drawn rather than a line through a guess.

The second, solid cone

On a rotating storm you may see a solid inner cone. That is the rotation’s own cone rather than the cell’s: a different object, with its own motion and its own fit. See Rotation.

It stops at 25 minutes however far out the lead selector is set. Past about that point a rotation’s cone is no longer the smaller of the two, because a rotation dissipates and re-forms rather than being carried along, so its position is less predictable than the storm outline’s. Why 25 minutes.

Clicking a cell

The popup answers “what is this storm doing” at a glance:

  • The band, beside the cell’s number: Watching through Extreme, or nothing at all on a storm with no rotation worth naming, which is most of them.
  • The sentence. On an alerting cell: “Rotation, and a high probability of damaging wind, hail or a tornado.” On a cell that is not rotating but is dangerous anyway, what it is claiming on the severe hazard instead.
  • Four bars - tornado, severe, wind, hail. The tornado bar is the selective one and the other three are not; they do not mean the same thing at the same number.
  • Motion, once there are enough scans to fit one. A storm on its first scan says not yet fitted rather than guessing.
  • Rotation, on alerting cells: the measured low-level azimuthal shear. It is there to explain the score, not to confirm it - the model behind the tornado reading already ingests this shear, so a high value beside a high band is one vote rather than two.
  • Tracked: how long we have held this storm, and over how many scans.
  • Peak: the highest it has reached on either hazard, which is often more useful than the current reading on a cell that has just weakened.
  • Re-identified: if the upstream feed lost and renamed this storm, how many times, and that we merged it back into one. Why that happens.

The sidebar list holds the same cells the map draws, ranked, built from the same response. On a busy screen a storm whose hazard is a few pixels is easy to miss; in the list every storm gets a row of the same height.

When the feed is stale

An empty map looks identical whether nothing is convecting or the ingest died an hour ago, and those are opposite things to tell somebody.

The layer note says which. If the newest scan we hold is more than 15 minutes old, the layer says so rather than presenting old positions as current. A 30-minute cone drawn on a 15-minute-old position is a 15-minute cone drawn in the wrong place, because the storm has traveled 15 to 20 km since. Why 15 minutes, and what changed upstream.

Reading it straight from the API

Everything the map draws is public, unauthenticated JSON on https://api.wxalerts.org, and the map itself is just a client of it:

GET /storms/active                     tracked cells, no geometry
GET /storms/active/geojson?lead=30     cells, tracks, forecast lines and cones
GET /storms/{id}                       one storm in full
GET /storms/{id}/track?minutes=60      where it has been
GET /storms/{id}/forecast-track?lead=30  where it is headed, with time ticks
GET /storms/{id}/cone?lead=30          where it might be
GET /storms/couplets/{id}/cone         the rotation's own cone

The cells, tracks, lines and cones come back as one FeatureCollection rather than four requests, so a cone can never belong to a storm whose cell has already moved. Each feature carries a kind: cell, track, forecast-track, cone, and the couplet, couplet-track, couplet-forecast and couplet-cone pair of each for a tracked rotation. Every tick on a forecast line carries its position, its minutes from the scan and at, the absolute time it means - use at for anything that quotes an arrival. Filter with west/south/east/north (all four or none), min_prob_tor, min_prob_severe and alerted_only.

Every response carries feed_valid_time and feed_age_seconds. Use them: a client that does not check the age will draw a dead feed as a quiet sky.

May we use Microsoft Clarity to see how pages are used (clicks, scrolling and replays of a visit, with anything you type hidden), plus a random ID linking that to crash reports? Only to find bugs and confusing screens. Never advertising, never sold.