Sentinel-2: measuring a storm's height from its shadow

On 21-07-2026 Sentinel-2 caught a V-shaped storm over the Veneto. We measured how tall its anvil was from the shadow it casts on the Po plain.

Emergencies and climate · 27-07-2026

Sentinel-2 scene of northern Italy on 21 July 2026, in true color. The right half of the frame is filled by a huge storm anvil, a compact white cloud mass with rounded edges. Just to its left, a dark gray band hugging the outline of the cloud marks the shadow cast on the ground. The left half shows the Po plain in green and brown tones, Lake Garda as a long, very dark blue patch, and the Alpine relief above with a few pale summits.
Sentinel-2 L2A · 21-07-2026, 10:18 UTC · Veneto and Po plain · true color · Contains modified Copernicus Sentinel data [2026] · processed by T3 AISAT

On 22 July, the Copernicus image of the day published a convective storm over northern Italy. The caption explains the V shape of the cloud top like this: “It forms when powerful rising air carries the storm cloud to high altitudes, at which strong winds split and flow around the cloud top”. High. That word does all the work in the sentence, and it carries no number.

The number is in the picture itself: a cloud that tall casts a long shadow, and a shadow is a ruler lying on the ground. We rebuilt the scene from the Copernicus Data Space Ecosystem and measured it. The answer is not a number, it is a table: the height depends on where you decide the cloud ends, running from about 8 kilometers counting the whole sheet to 12 to 14 if you keep only the dense core, the candidate for the anvil top. That dependence is what a single optical frame can give, and explaining it is half this article.

Our scene, and the time that is not the time

The lead image is that same pass, rebuilt by us over a frame of about 218 by 123 kilometers, with Lake Garda on the left, the Po plain below and the Prealps above. True color (B04, B03 and B02) and our own processing, with a hard tone curve: there is a factor of ten in reflectance between a sunlit anvil and a shaded plain, and both have to be readable in the same image.

The first surprise shows up before you look at a single pixel. The original caption says the image was taken “on 21 July 2026 at 10:05 UTC”. But that time is not a measurement: it is the one in the file name, which marks the start of the pass. Ask the Copernicus catalog which tiles cover the Veneto that day and you get twelve, from two satellites. The nine Sentinel-2B tiles carry their real observation time, and none of them matches the caption: they run from 10:17:53 to 10:18:28 UTC.

That 10:05:59 in the file name is not the time of the picture. The Sentinel-2 product documentation on SentiWiki says so plainly: “The first date (YYYYMMDDHHMMSS) is the datatake start sensing time”. A datatake is “the continuous acquisition of Sentinel-2 image data in a given MSI mode” and it can run up to 15,000 kilometers, so the moment it starts falls very far, in time and in space, from the piece of the world you care about. Here, twelve minutes.

Twelve minutes is a detail if you are looking at a corn field. Over a storm that, by the original’s own account, “developed in the early hours of 21 July”, it is a different storm, and if you plan to match the image against radar or a damage report, that offset goes straight into your conclusion. The catalog shows something else: two Sentinel-2 satellites flew over that morning ten minutes apart, but the 2A swath, at 10:28 on relative orbit 065, stays west and never reaches the storm. It is the same mismatch between file name and real observation time that we documented over the Guinea-Bissau estuary, where twelve minutes decide which tide phase you are looking at.

A shadow is a ruler

The idea is basic geometry: if you know how high the Sun is and a cloud casts a shadow of length L, the height of the cloud comes out of a triangle. What makes this work with Sentinel-2, rather than with any photo, is that the product ships the geometry already measured. Every L2A scene includes the solar and viewing angle grids, so you do not compute the position of the Sun, you read it.

Over our frame the product declares a solar zenith of 26.76 to 29.33 degrees, that is a Sun between 60.7 and 63.2 above the horizon, and a solar azimuth of 145.4 to 152.4. With the Sun in the southeast, the shadow falls to the northwest.

Crop of the same scene over the Po plain. On the left, well lit farmland: a mosaic of green and brown fields with roads and villages. On the right, the white mass of the storm anvil. Between them, hugging the outline of the cloud, runs a continuous black band several kilometers wide, so dark that no ground detail can be made out inside it.
West edge of the anvil over the plain, same day and same processing as the lead image. The black band next to the cloud sits where the same fields you see on the left should be. It comes out flat black, with no detail: the product reflectance bottoms out there, as explained below. Sentinel-2 L2A, 21-07-2026. Contains modified Copernicus Sentinel data [2026] · our own processing.

That black band is the ruler.

First the direction, and without assuming it

Measuring the width of that band by eye would give you a number, and just as easily a wrong one: the edge of the cloud is not straight, the shadow falls at an angle, and the eye picks the spot that suits it. So we did it over the whole scene, in two steps.

We downloaded the frame as reflectance, with no gain and no curve, at 120 meters per pixel. Anvil is anything above 0.80 of brightness in the blue band, 38.6% of the scene; clear ground is anything below 0.18, 35.7%. The threshold looks odd because surface reflectance goes above 1 over a cloud: the atmospheric correction is built for ground, so up there the value only works as a brightness measure. Then, for every azimuth from 0 to 350 degrees, we take the strip of ground within 2 kilometers of the cloud in that direction and average its brightness, which here and throughout the article is the mean of the three bands we downloaded (blue, red and near infrared), not just the blue used for the masks.

If what we are seeing is a shadow, there has to be a single dark lobe, and its axis has to fall where the Sun says. That is what comes out:

Direction from the cloud Mean ground brightness within 2 km
150 degrees (toward the Sun) 0.1668
110 degrees 0.1658
200 degrees 0.1641
290 degrees 0.1358
320 degrees 0.1256
330 degrees 0.1254
340 degrees 0.1274
350 degrees 0.1307
10 degrees 0.1375
All clear ground in the scene 0.1512

(Extract. The full sweep covers 36 directions, one every 10 degrees.)

One minimum, and it sits where it should. The vertex of the parabola through the three lowest points falls at 326.0 degrees; the anti-solar azimuth the product declares is 328.7, and the full model below, with parallax, predicts 323.4. Our measurement lands between the two, less than three degrees from each, and cannot tell which is better: the floor of the lobe is too flat. What it does establish is that the Sun sets the direction of the darkening.

Look at the other end of the table: toward the Sun, the ground next to the cloud comes out brighter than the scene average. That is the null test. If the strip beside the cloud came out dark in every direction, we would be measuring an artifact of our sampling, not a shadow.

Then the length

The second step is the profile: mean ground brightness in half-kilometer bins, minus the same profile along the two perpendiculars, which act as controls. The shadow lasts while that difference is negative and ends where it returns to zero.

Distance from the cloud Ground along the shadow Mean of the two controls Difference
0.25 km 0.1270 0.1661 -0.0390
0.75 km 0.1211 0.1560 -0.0348
1.75 km 0.1312 0.1527 -0.0215
2.75 km 0.1391 0.1515 -0.0123
4.25 km 0.1419 0.1505 -0.0085
5.25 km 0.1460 0.1497 -0.0037
6.25 km 0.1526 0.1525 +0.0002
7.25 km 0.1588 0.1517 +0.0071

(Extract. The full profile has 26 bins.)

The zero crossing lands at 6.23 kilometers. Along the anti-solar direction the product declares it gives 6.37: those not quite three degrees move the result by 2%.

The satellite’s own parallax

This is where the easy sum falls short. A cloud top twelve kilometers up is not drawn above its own vertical: the product is orthorectified for the terrain, so the line of sight from the satellite to the top carries on until it meets the ground, and that meeting point sits offset away from the satellite. That is a triangle, not a Copernicus quirk. That a high object is not placed correctly in a Sentinel-2 product is something the house does say: SentiWiki, in its section on instrument parallax effects, warns that “the processing algorithm ensures the co-registration of images acquired by all spectral bands and the detectors for features at ground level. Objects at a higher altitude like planes and clouds cannot be properly co-registered”.

Geometry of the measurement: solar shadow and sensor parallaxSchematic vertical cross section. The cloud top sits at height h above its true vertical on the ground. The sun ray arrives from the upper right, passes through the top and marks the shadow to the left of that vertical. The satellite line of sight arrives from above, passes through the same top and continues to the ground to the right of the vertical: that is where the orthorectified image draws the cloud. The distance measured in the image runs from the shadow to that apparent position and is the sum of the two displacements.groundanvilSun, zenith 28 degreesshadowsatellite, zenith 4 degreesapparent positiontrue verticalh, height of the topwhat gets measured: 6.2 kmwesteast
Schematic cross section. The sun ray is drawn at its real angle, 28 degrees of zenith; the satellite ray is drawn far wider than the 4 degrees the product declares, because at true scale its displacement would be invisible. The distance measured in the image is not the shadow alone: it runs from the shadow to the place where the satellite draws the cloud, which is not its vertical.

The viewing zenith runs here from 1.05 to 11.79 degrees, with a mean of 4.12 over the anvil pixels, and that mean is the value we apply: at that angle a twelve kilometer top shifts by 0.9 kilometers, and at the edge of the swath it would shift by 2.5. So the distance between the cloud and its shadow is the sum of two displacements, and the height comes from dividing the measured length by the magnitude of that sum.

With the Sun alone, 6.23 kilometers of shadow and a solar zenith of 27.76 degrees over the anvil give 11.8 kilometers; with the parallax term, 10.8. The second is more complete but more fragile: the satellite switches sides across the swath, so a viewing azimuth averaged over the whole scene describes no pixel well. We publish both and keep the interval.

The number, and what it is not

Everything above rests on a decision of ours: calling cloud anything above 0.80. Let us change it. Nine threshold combinations, with the height computed case by case:

Cloud threshold (B02) Ground threshold (B02) Shadow L (km) h with parallax (km) h from the Sun alone (km)
0.60 0.14 4.89 8.42 9.29
0.60 0.18 5.04 8.68 9.57
0.60 0.22 5.13 8.82 9.73
0.80 0.14 6.09 10.55 11.56
0.80 0.18 6.23 10.79 11.83
0.80 0.22 6.32 10.95 12.00
1.00 0.14 7.16 12.45 13.63
1.00 0.18 7.26 12.62 13.82
1.00 0.22 7.52 13.07 14.31

The ground threshold barely matters: it moves the height by less than half a kilometer. The cloud threshold changes everything, and in an orderly way: the stricter it is, the taller the cloud comes out. Not noise, but the method telling the truth about itself, because the shadow is cast by the edge of whatever you called cloud and that edge is not always at the same height. At 0.60 the outline lands on the thin sheet around the storm; at 1.00, inside the dense core, the part that actually went up.

So the result is not one number, it is two:

  • The optical core of the storm, the candidate for the anvil top, casts a shadow that puts it between 12 and 14 kilometers.
  • The sheet around it, counting all the bright cloud, comes out between 8 and 12.

Both are for 10:18 UTC on 21 July 2026, over the west flank of the complex, and this scene will not narrow the bracket: that would take another instrument.

Three warnings, because the numbers are worth less without them:

  • Each figure is the height of the outline we chose, averaged over a complex more than a hundred kilometers across. Not a local peak, and not the maximum top, which may sit higher.
  • Deep in the shadow, L2A reflectance bottoms out: of 3,208,776 valid pixels, 9,400 have B02 exactly 0 (0.29%) and 1,393 have it in all three downloaded bands (0.04%). Too little to move the profile, but the radiometry inside the shadow is gone. SentiWiki also documents that “due to inaccuracies of the Digital Elevation Model, a strong terrain correction may be applied in totally or partially shaded areas”, with “inaccuracy in the surface reflectance” as the result.
  • It is not a radiosonde and not a radar echo, but an optical measurement from a single pass, with its method declared and its bracket published.

What it supports, and what it does not

The first decision is a negative one: Sentinel-2 is not the tool for watching a storm. Geostationary sensors are built for that, and EUMETSAT says as much about the imaging services of its third generation Meteosat: “Nowcasting applications are the focus of the imaging services”, with lightning detection delivered in 120 seconds. A low orbit satellite gives you one picture and leaves.

What it does add is geometry at ten meters and a measurable height, and that connects to risk. The overshooting cloud top detection page of the EUMETSAT convection group, written by Kristopher Bedka (NASA Langley Research Center), sums up why the top matters: “Storms with overshooting tops (OT) typically generate hazardous weather conditions such as hail, damaging wind, tornadoes, and flooding”, and those tops show up near “~60% of wind, hail, and tornadic storms”. The original already warned that the V pattern goes with storms able to produce “destructive wind gusts, large hail, and torrential rainfall”, and that this one hit Vicenza, Padua, Rovigo and Treviso. It is the same emergency logic behind how we measured wildfire severity with the NBR index in Cinco Villas: the image alone is not enough, you need the number and its method.

So the order is this: the geostationary sensor tells you when and where it is happening, the high resolution optical sensor tells you on the next pass where the mark was left, and the geometry of the storm day scene helps bound the severity. Mixing them without checking the clock is the easy way to pair an image with the wrong radar trace.

What we build with this

At T3 AISAT we build, for the emergencies sector, observation chains that run all the way to a decision: catalog, reproducible scene, measured index and the alert that goes with it. This article sums up the dull part of the job: read the angles the product already ships, check the tile time instead of the file name, and publish the null test next to the result. Nothing here needs private data: it all comes from the open Copernicus archive, which is why anyone can redo it.

How many of the satellite images you work with carry a time nobody has checked?

← Back to the blog

What can be seen over your land?

The same reading you just saw works over your fields, your basin, or your network. Tell us about your case.

Talk to the team