All experiments

Where the shade falls

Pick a ballpark, a game and a seat. The map shows which rows are in the sun and which are in the shadow of the stands, every five minutes from an hour before first pitch to an hour after the last out. All 30 major league parks are here, and so are the spring training parks: all ten in Arizona and nine of the thirteen in Florida.

Sutter Health Park

Athletics, Sacramento

Measured bowl

The whole game, in short

Coming later. I want to show what the forecast feels like in the sun and in the shade, side by side. The formula exists; what I have not found is a published way to get its sunlight term from a weather forecast, and I would rather show nothing than a number I made up.

How this works

The short version is below. The full method, with the equations, every data source, the figures from the lidar and the known errors, is on its own page.

The model

For each seat and each five-minute step, I work out where the sun is, then walk from the seat toward it in plan until the line crosses the top edge of the stands. If that edge is taller than the sun line at that distance, the seat is in its shadow. Sun position is the NOAA Solar Calculator algorithm, in the park's own time zone, daylight saving included.

What is measured and what is not

At 21 open-air parks the top edge of the stands (the rim) is measured: USGS lidar reduced to one rim point per degree around home plate. The seats are not measured there. At those parks the seating bowl is a generic assumption: seats rise from the field wall to just under the rim, so the rim is real and the seats are a sketch. Sutter Health Park is not in that set, so I measured it myself from the same USGS lidar, flown in February 2019: the rim, home plate, and the distance and height of the front and back rows in every section. So at Sutter the seat heights are measured too. The sections themselves, their row counts and the covered rows at the back are still my estimate, taken from an earlier sketch of the park. That sketch had the seats about 7 m too high and the roof too low, and the two errors mostly cancelled, which is why it looked right. The seven retractable-roof parks get a generic round rim with the roof assumed open. Tropicana Field has a fixed roof, so there is nothing to map.

Spring training. The Cactus League parks in Arizona and the Grapefruit League parks in Florida, where all thirty clubs train each spring, are in neither of those sets, so I measured them from USGS lidar: flown over the Phoenix area in November 2020, and over Florida between June 2018 and April 2019. The lidar gives each park's home plate (from the pitcher's mound and the mirror symmetry of the infield), its rim, and its seats: every 2.5 degrees around the plate, how far out and how high the front row is, and the same for the last row the lidar can see. So the seat heights are measured here too. The seats sit in the same five zones as at the other parks, plus three outfield zones (left, center and right field) wherever the lidar shows seating behind the outfield wall, lawns, berms and bleachers: at 17 of the 19 parks. What lidar cannot see is anything under a roof, and these parks have a lot of roof, so covered seats are not on the map. Four Florida parks are listed without a map: George M. Steinbrenner Field, TD Ballpark, Clover Park and CoolToday Park. The only lidar of each is older than its stands as they are now, so a map would show stands that are gone.

The confidence labels

Known limits

How I checked it

Sun positions match the NOAA calculator's own code to 0.02 degrees at five parks, and JPL Horizons agrees. For home plate at the 21 measured parks on four dates, the minute the plate goes into shade agrees with the source's independent shadow calendar: 75 of 84 comparable entries, median difference 1 minute, 90th percentile 6 minutes. Every difference over 6 minutes traces to a rim feature 1 to 3 degrees wide that the calendar's 5-degree pins skip over; Coors Field on the equinoxes is the largest. Running the calendar's own method with my sun and clock reproduces all 84 entries to the minute, so the sun, the time zones and daylight saving agree exactly. At Sutter Health Park the earlier sketch is kept in the tests, and the lidar version's numbers for the same four seats are pinned next to it. The full write-up is in VALIDATION.md.

Spring training parks. Two checks owe nothing to how I found home plate and center field. Seen from the measured plate along the measured bearing, the outfield wall sits within 5 feet of MLB's published distance at 47 of the 50 places where the lidar shows a wall there at all. In Arizona that is within 4 feet at 19 of 20 foul lines, and within 5 feet in center field at 9 of 10 parks (Goodyear Ballpark reads 8 feet deeper than its published 400). The misses are American Family Fields' right-field line, 8 feet deeper than published, and two at JetBlue Park, whose wall copies Fenway Park's. And home plate lands within 0.79 m of the centre of the dirt circle round it at ten of the eleven parks where the circle shows clearly in the lidar; JetBlue Park, flown twice four months apart, is 2 m off. At two Florida parks the finder saw no mound and home plate comes from the dirt circle instead; at one of them, Hammond Stadium, the mound is in returns the finder does not read, 0.4 m from where that plate and bearing put it. Salt River Fields is the only park the MLB API gives a bearing for: 72 degrees, against 72.8 from the lidar. I have not yet checked the spring training shade against dated photos the way I did at Sutter Health Park, so treat those parks as measured but not yet ground-truthed. The method and the per-park numbers are in section 10 of VALIDATION.md.

Ground truth, nine photos. I found nine dated Getty photos of Sutter Health Park from 2025 and 2026 with a time I can pin down, from the outfield clock or from the batter on the video board and the MLB game log. The model matches the four midday photos, the 5:24 pm one and the two evening ones, apart from a hard-to-read shade edge near home plate. It is late on the third-base side around 4:30 to 5 pm: the photos show all of it in shade, and the model gets 90 percent of those rows into shade 12 to 41 minutes later and every row 33 to 44 minutes later. I don't know why, and I have not tuned anything to match. The photos and what each one shows are in section 9 of VALIDATION.md.

Sources

Last data refresh: 2026-10-01. The engine and its tests are plain JavaScript; nothing on this page tracks you.