Finding a 205-Metre Tower From Two Shadows
GEOINT with no image at all. A survey notebook, two shadow measurements, one timestamp — and enough solar geometry to pin one building in the Kalahari.
No photo. Every image was wiped. All that survived is a survey notebook: a date, two shadow measurements from a 2-metre rod, one shadow length of the structure itself, and four words of site description.
DATE: 18 MAY 2026 ROD: 2.000 m vertical, level ground Bearings TRUE. Times UTC.
ROD SHADOW 07:30:00 — 4.318 m, bearing 227.8 10:32:01 — 2.231 m, bearing 180.0 ← shortest of the day
STRUCTURE SHADOW 07:30:00 — 442.6 m, flat open ground, no obstruction
MISC fenced, no signage, pale bare ground, no shade anywhere on site
Flags:
spuria{lat_-00.00}·spuria{long_00.00}·spuria{name_like_this}
The structure is Khi Solar One, a 205-metre solar power tower near Upington, Northern Cape, South Africa, at 28.52°S, 21.11°E (±4 km). If that’s all you wanted, you’re done. The rest is how three numbers get you there — because a timestamped shadow is a coordinate pair, and this challenge is that claim in its purest form.
What you don’t have matters too: no image kills reverse search outright, and no EXIF, no landmarks, no vegetation to read. The entire solution space is solar geometry plus four words of site description. That’s not a restriction — it’s the whole toolkit list.
Read the notebook before you compute
Three of the six lines carry conclusions before any math.
“Shortest of the day” at 10:32:01 UTC. The shadow minimum is local solar noon. Solar noon
drifts 4 minutes per degree of longitude — so this single timestamp is the longitude, encoded
in a clock. How firm: the second-level precision (:01) is the author telling you the timing is
load-bearing.
Bearing 180.0 at that minimum. At solar noon the shadow points due south only if the sun is due north — the observer is south of the subsolar latitude, which on 18 May sits at 19.6°N. So: somewhere south of ~19°N. This line looks decorative now. It is the single line that decides the challenge later — hold onto it.
“Pale bare ground, no shade anywhere on site.” Arid terrain, and a big cleared secured area (fenced, no signage). How firm: weak alone — it’s four words — but it’s a free consistency check on whatever the geometry produces. A result in a boreal forest fails this line.

Three of six lines are already conclusions: the shadow minimum encodes the longitude, the 180.0 bearing forces the southern hemisphere, the MISC line rules out everything green.
Longitude: solar noon at 10:32:01 UTC → 21.11°E
Observation. Solar noon occurred at 10:32:01 UTC.
Inference. At Greenwich on 18 May 2026, solar noon falls at 11:56:27 UTC (12:00:00 minus the equation of time, +3.55 min on that date — the sundial runs fast in May). Our noon came 84.43 minutes earlier, so the site is east of Greenwich by 84.43 / 4 = 21.11°E.
Action — the arithmetic, verbatim:
EoT(2026-05-18) = +3.55 min (NOAA solar equations)
solar noon @ 0°E = 12:00:00 − 3.55 min = 11:56:27 UTC
Δt = 11:56:27 − 10:32:01 = 84.43 min
longitude = 84.43 / 4 = 21.11°E
How firm. Timing rounds to the second: 1 s = 0.004°. The real uncertainty is the equation of time itself — published models disagree by up to ~10 s in May, which is ±0.04° ≈ ±3.9 km. Fine for a 2-decimal flag, and we’ll get an independent check on it at the end.
Latitude: a 48° noon zenith → two candidates
Observation. At the shadow minimum, a 2.000 m rod cast 2.231 m.
Inference. tan(zenith) = 2.231 / 2.000, so the sun stood 48.13° from vertical at solar noon. At noon the geometry collapses to one line: zenith = |latitude − declination|. Declination on 18 May 2026 is +19.60°. That absolute value is the trap — it has two solutions:
zenith = atan(2.231 / 2.000) = 48.1251°
decl = +19.6041° (2026-05-18)
lat = 19.6041 − 48.1251 = −28.5210 → −28.52 (sun due north at noon)
lat = 19.6041 + 48.1251 = +67.7292 → +67.73 (sun due south at noon)
(Two decimals of zenith aren’t enough here: 19.60 − 48.13 rounds to −28.53. Carry four, round once at the end.)
How firm. The length is quoted to the millimetre; ±0.5 mm moves the latitude by 0.007° ≈ 0.8 km, and published solar models disagree by about another millimetre in the predicted length — call the north–south budget ±2 km. (A real shadow tip is fuzzy at the centimetre scale from the sun’s penumbra; millimetre notebook entries imply an edge-corrected reading.)
Both latitudes see the identical noon shadow length. A 2-metre rod in the Kalahari and one in arctic Norway agree to the millimetre on this day.

Both candidates sit exactly 48.13° from the subsolar point — Swedish Lapland or South Africa’s Northern Cape. The length cannot distinguish them — the bearing can.
False lead: 67.7°N dies on one bearing
Marked as a false lead so nobody skims it into the solution.
67.73°N / 21.11°E is real terrain — Swedish Lapland, near Torneträsk. May sun, long days: the shadow lengths fit perfectly. If you only computed lengths, you’d be pinning a structure into a subarctic lake right now.
What kills it isn’t a length. At 67.7°N the noon sun is due south, so the noon shadow points due north — bearing 360.0. The notebook says 180.0. One bearing, one dead branch. The MISC line agrees (pale bare ground and “no shade anywhere” is not a boreal valley in May), but that’s corroboration. The bearing is the proof.
What the dead end teaches: shadow lengths constrain a distance from the subsolar point; only directions tell you which side you’re on. Log bearings even when they look redundant.
The structure: 205.0 m tall
Observation. At 07:30:00 UTC the rod’s shadow was 4.318 m and the structure’s was 442.6 m, same instant, flat open ground.
Inference. Same sun, same moment — heights scale exactly like shadows:
H = 442.6 × (2.000 / 4.318) = 205.0 m
A 205-metre structure on flat, pale, fenced desert ground that produces “no shade anywhere on site” — a slender vertical tower, not a building with footprint. Very few things in any desert are 205 m tall: chimneys, radio masts, and concentrated-solar towers.
How firm. The rod shadow rounds to the millimetre; the structure shadow over 440 m of ground realistically ±1 m → height good to ±0.5 m. Firm enough that the height itself becomes a fingerprint — that pays off in verification.
From coordinates to a name
−28.52, 21.11 lands ~10 km east of Upington, Northern Cape — Kalahari edge, and one of the densest solar-energy corridors in Africa. Now it’s a finite-set problem: what within a few kilometres of that point is ~205 m tall?
Action — Overpass, verbatim:
[out:json][timeout:60];
(
nwr["man_made"="tower"](-28.7,20.9,-28.3,21.3);
nwr["plant:source"="solar"](-28.7,20.9,-28.3,21.3);
);
out center tags;
The solar plants around Upington are almost all photovoltaic or parabolic-trough — flat, nothing over a few metres (Karoshoek/Ilanga, Sirius 1, Dyason’s Klip: all excluded by the height alone). One site has a tower: Khi Solar One, a 50 MW concentrated-solar plant — heliostats around a central tower, commissioned February 2016, the first solar tower plant in Africa.
Published tower height: 205 metres.
That’s the moment of certainty. Not “a tall tower nearby” — the computed height and the published height agree to the metre. A shadow measured on the ground reproduces the engineering spec.

The Overpass hits around Upington: one site in the box has a tower — circled, ~10 km from the computed point. The article confirms the height the shadows measured: 205 metres.
Verification
Two confirmations that are genuinely independent of the shadow math — plus one consistency check, labelled as what it is:
- The height fingerprint. 205.0 m computed vs. 205 m published (Wikipedia, EIB project sheet). The shadow data and the spec sheet know nothing about each other.
- The site itself. Khi Solar One’s surveyed position is 28.537°S, 21.078°E — 3.65 km (haversine) from the computed −28.52, 21.11. Decompose it against the two budgets and nothing is close to failing: 3.0 km east–west (Δ0.030°, the equation-of-time model difference — budget ±3.9 km) and 1.8 km north–south (Δ0.016°, about 1.3 mm of shadow length — budget ±2 km); rounding to two decimals adds ~0.2 km. Each component sits inside the budget that predicted it. The MISC line matches the satellite view exactly: fenced perimeter, no signage visible, pale graded ground, zero shade.
- Consistency check — not a confirmation. Feeding the solved position back through the solar model reproduces the unused 07:30 line (sun at azimuth 47.8°, elevation 24.85° → shadow 4.319 m at bearing 227.8). That only proves the inversion didn’t drift; it reuses the same model the position came from, so it can’t independently confirm anything.
Alternative actively excluded: every other Upington-area solar site fails on height (no tower); the northern-latitude branch fails on bearing (see false lead).
Dead ends: none beyond the 67.7°N branch covered above — but one genuine trap: the equation-of-time sign convention flips between references (astronomical vs. sundial convention). Get it backwards and your longitude lands 42 minutes of arc wrong with full confidence. I checked it against a known city before trusting it.
Answer
spuria{lat_-28.52}
spuria{long_21.11}
spuria{khi_solar_one}
Coordinates from shadow geometry. Precision: ±0.04° east–west (equation-of-time model spread), ±0.02° north–south (shadow-length resolution) — ≈ ±3.9 km and ±2 km respectively. The facility’s surveyed position is 28.537°S, 21.078°E.
Takeaways
- A timestamped shadow is a coordinate pair. The minimum’s clock time is longitude; the minimum’s length is latitude (to a two-fold ambiguity). This works on any sunny day, anywhere, with a stick and a watch — and in reverse, it’s why timestamps in photo metadata are location leaks even with GPS stripped.
- Directions break ties that magnitudes can’t. Two latitudes fit every length in this challenge; one bearing decides it. When your data leaves a discrete ambiguity, look for the observation with a sign, not a better measurement of the same quantity.
- Same-instant shadow ratios are free measurements. Any object with a known height turns every other shadow in frame into a metre stick — and an unusual height (205 m) is as identifying as a name on a sign.
Tooling
Solar positions from a ~60-line Python implementation of the NOAA solar equations (Julian day → declination, equation of time → hour angle → elevation/azimuth), then a coarse grid refine of (lat, lon) against both notebook rows. No dependencies. Script: solver.py.
Sources
- Khi Solar One — Wikipedia — tower height, coordinates, commissioning
- EIB: Khi Solar One Tower Project — independent height/spec confirmation
- NOAA Solar Calculator — reference implementation for declination & equation of time
- Overpass Turbo — tower/solar-plant query around Upington