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
- Measured: lidar rim, generic seats. 21 parks.
- Measured bowl: lidar rim and lidar seat heights. At Sutter Health Park the section boundaries and row counts are estimated; at the 19 mapped spring training parks the seats are in zones, the outfield included, and covered seats are left out.
- Low: retractable roof, generic rim, roof assumed open. The roof panels and trusses that make most of the real shade there are not in the model.
- Dome: fixed roof. Tropicana Field.
- Not mapped: a spring training park whose only lidar is older than its stands. Four parks in Florida.
Known limits
- Shade from an upper deck or roof over your row is undercounted, except where I have a per-park rule for it. Sutter Health Park is the only one so far.
- Netting, clouds and haze are ignored. A cloudy day is shadier than this.
- Light towers are ignored. The lidar rim I use is the version that replaces light banks and masts with the rim around them, the same one the source's own shadow calendar uses.
- The rim is the highest point in each direction as seen from home plate. A structure hidden behind a taller one, from the plate's point of view, is missing, even if it would shade the seats next to it.
- Near a step or a notch in the rim, a shade time carries about 10 minutes of uncertainty from the rim alone.
- At Sutter Health Park the bowl continues past section 122 to sections 123 to 125. The model stops at 122.
- At the spring training parks, seats under a roof are not on the map. The seats run in a straight line from the front row to the last row the lidar sees, so a cross-aisle step is smoothed over, and the lowest front rows, under half a metre up, are cut. In the outfield anything behind the wall that looks like a seating bank counts, so a slope nobody sits on would too; where the fence is see-through, at Roger Dean Chevrolet Stadium for one, the seats are looked for from MLB's published fence line, which is only known at a few points. The lidar is from 2018 to 2020; anything built since is missing.
- Centre-field bearings come from the lidar source at measured parks and from the MLB API elsewhere. A few API bearings are suspect: Milwaukee's is the same number the API gives Minneapolis, where it is 39 degrees off.
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
- Rim profiles and park geometry: Adrien Peltzer, ballpark-shadow-geometry (CC BY 4.0), commit dec934b. I reduced it to plan coordinates and heights per degree; no values re-measured.
- Lidar: USGS 3D Elevation Program (3DEP), public domain, via that repository (collections from 2010 to 2022). Sutter Health Park: project USGS_LPC_CA_NoCAL_Wildfires_B5a_2018, flown February 2019, measured with a method adapted from the same repository (code MIT, data CC BY 4.0). The spring training parks, measured the same way: in Arizona project AZ_MaricopaPinal_1_2020, flown November 2020; in Florida seven projects (FL_Peninsular_Pinellas_2018, FL_Peninsular_FDEM_Charlotte_2018, FL_Peninsular_FDEM_Manatee_2018, FL_Peninsular_FDEM_Polk_2018, FL_Peninsular_FDEM_Sarasota_2018, FL_Peninsular_FDEM_PalmBeach_2019 and USGS_LPC_FL_Southwest_A_2018_LAS_2019), flown June 2018 to April 2019.
- Park locations, time zones, roof types, fence distances, which clubs train where, and the game schedule: MLB Stats API. Copyright 2026 MLB Advanced Media, L.P.
- Sun position: NOAA Solar Calculator (Meeus, Astronomical Algorithms).
- Stadium outlines used to place the spring training lidar downloads: © OpenStreetMap contributors, ODbL.
Last data refresh: 2026-10-01. The engine and its tests are plain JavaScript; nothing on this page tracks you.