In 2014, Bellingcat used shadow analysis on a single photograph to help establish that a Buk missile launcher was transported through eastern Ukraine on the day Malaysia Airlines Flight 17 was shot down. The technique — measuring shadow angles to determine sun position, then calculating what time and location that sun position corresponds to — is one of the most powerful chronolocation methods in the OSINT toolkit. It requires no special equipment beyond a photograph with visible shadows, some geometry, and a sun position calculator. This guide covers the mathematics, the tools, and the practical workflow for shadow-based photo verification.

The Physics: How Shadows Encode Time and Place

A shadow is a projection of an object onto a surface, cast by a light source at a specific angle. For outdoor photographs, that light source is the sun. The sun's position in the sky is described by two angles:

Azimuth is the compass direction of the sun, measured clockwise from true north. At sunrise, the azimuth might be 80 degrees (east-northeast); at solar noon it varies by latitude and season; at sunset it might be 280 degrees (west-northwest).

Altitude (elevation) is the angle of the sun above the horizon. At sunrise/sunset, altitude is 0 degrees. At solar noon in the tropics, it can reach 90 degrees (directly overhead). The altitude determines the length of shadows, while the azimuth determines their direction.

The critical insight is that for any given location on Earth, the sun's azimuth and altitude are a deterministic function of three variables: latitude, longitude, and time (UTC). If you can measure the sun's position from a photograph, you can solve for the time (if you know the location) or constrain the location (if you know the time).

Measuring Shadow Direction (Azimuth)

Shadow direction is the easier measurement. A vertical object — a pole, a person standing upright, a building corner — casts a shadow that points directly away from the sun. The shadow azimuth equals the sun's azimuth plus 180 degrees (since the shadow points opposite to the light source).

To measure the shadow azimuth from a photograph:

  1. Identify a vertical object and its shadow on a horizontal surface (ground, rooftop). Avoid slopes, which distort shadow direction.
  2. Determine the cardinal orientation of the scene. Look for clues: satellite dish orientation (pointing toward the equator in mid-latitudes), road layouts matching satellite imagery, text on signs (which establishes which direction the camera is facing).
  3. Measure the angle of the shadow relative to north. If you can identify the location on Google Earth or a similar tool, you can overlay the shadow angle on the satellite view to determine the compass bearing.

The sun azimuth is then: shadow_azimuth - 180 (or + 180 if the result is negative).

Measuring Shadow Length (Altitude)

Shadow length encodes the sun's altitude through basic trigonometry. For a vertical object of known height h casting a shadow of length s on a flat surface:

sun_altitude = arctan(h / s)

Example:
  Person height: 1.75 meters
  Shadow length: 2.50 meters
  Sun altitude: arctan(1.75 / 2.50) = arctan(0.70) = 35.0 degrees

You need either the object's actual height or a ratio. If you can identify a standard object in the image — a parking meter (roughly 1.2m), a standard door (2.0m), a fire hydrant (0.6m) — you can estimate height. Alternatively, if two objects of different known heights are visible, you can use the ratio of their shadow lengths to cross-check without knowing the absolute scale.

In practice, measuring shadow length from a single photo is tricky because perspective distortion compresses or stretches distances. If the camera is at an oblique angle to the shadow, the apparent length in the image does not equal the true ground length. There are two approaches to handle this:

Method 1 — Overhead imagery: If satellite or drone imagery of the same scene is available (even from a different time), you can measure true shadow lengths directly from the overhead view. Google Earth's historical imagery slider can sometimes provide imagery from the same day.

Method 2 — Perspective correction: If you can identify at least four points in the photo whose real-world positions you know (e.g., corners of a building visible in satellite imagery), you can compute a homography matrix that maps image coordinates to ground-plane coordinates. This corrects for perspective distortion and allows accurate shadow measurement from any camera angle.

The SunCalc Algorithm

With the sun's azimuth and altitude measured, you need to compute what time and location those values correspond to. The SunCalc library (available in JavaScript, Python, and other languages) implements the standard solar position algorithm based on Jean Meeus's Astronomical Algorithms:

import { getPosition } from 'suncalc';

// Given a candidate location and time, compute sun position
const date = new Date('2026-02-14T10:30:00Z');
const lat = 48.8566;  // Paris
const lng = 2.3522;
const pos = getPosition(date, lat, lng);

console.log({
  azimuth: pos.azimuth * 180 / Math.PI + 180,  // degrees from north
  altitude: pos.altitude * 180 / Math.PI         // degrees above horizon
});
// Output: { azimuth: 161.3, altitude: 24.7 }

The algorithm accounts for the Earth's axial tilt (obliquity of the ecliptic), orbital eccentricity, and the equation of time. It is accurate to within approximately 0.01 degrees for dates within a few centuries of the present.

The practical workflow is iterative: you measure the shadow azimuth and altitude from the photo, then test candidate locations and times against the SunCalc output until you find a match. If you know the location but not the time, you sweep through the hours of the day until the computed azimuth and altitude match your measurements. If you know the approximate date and time but not the location, you sweep across candidate latitudes and longitudes.

Practical Workflow: Step by Step

Step 1: Identify candidate objects. Look for vertical objects with clear, complete shadows on flat ground. Flagpoles are ideal. Utility poles, traffic signs, and people standing upright also work. Avoid trees (complex shadow shape), objects on slopes, and shadows that extend under other objects (obscured length).

Step 2: Establish orientation. Determine which direction is north in the image. Methods include: matching visible features to satellite imagery (roads, buildings, rivers), reading signs or license plates to determine the camera's facing direction, observing satellite dish pointing directions, or using the known geometry of a building whose floor plan you can find.

Step 3: Measure shadow azimuth. Using a protractor overlay (many image editing tools support angle measurement), measure the angle of the shadow relative to your established north direction. This gives you the sun's azimuth (shadow direction + 180 degrees).

Step 4: Measure shadow length ratio. If you can identify the object's height (even approximately), measure the shadow length in the image. Apply perspective correction if the camera angle is oblique. Calculate the sun altitude using arctan(height / shadow_length).

Step 5: Run SunCalc for candidate locations and times. If you have a candidate location (from other geolocation clues like landmarks, language on signs, terrain), sweep through times on the claimed date. Look for the time where the computed azimuth and altitude match your measurements within a few degrees. If both azimuth and altitude match at the same time for the same location, you have strong confirmation.

Step 6: Assess uncertainty. Shadow measurements from photos typically have uncertainties of 3-5 degrees for azimuth and 2-4 degrees for altitude, depending on image quality and the precision of your measurements. Report your results with error bars, not false precision.

Limitations and Caveats

Shadow analysis cannot determine location uniquely from a single photo without additional constraints. For any measured sun position at a given time, there is a curve of latitude/longitude pairs that produce the same sun angles (a "sun position isoline"). You need additional information — visual landmarks, language on signs, vegetation type, road markings, architecture style — to narrow the location from this curve to a point.

Overcast conditions eliminate usable shadows. Indoor photographs, night images, and polar regions during summer (24-hour daylight with very low sun angles) present challenges. Photos taken near solar noon in the tropics produce very short shadows that are difficult to measure accurately.

Reflective surfaces, artificial lighting, and photographer-placed lighting can create misleading shadows. Always verify that shadows are solar by checking consistency across multiple objects in the scene — all shadows from sunlight should be parallel (for objects at similar distances from the camera) and point in the same direction.

Despite these limitations, shadow analysis remains one of the most reliable chronolocation techniques because it is grounded in physics rather than metadata (which can be forged) or visual matching (which depends on database coverage). The sun's position is computable and falsifiable.

Try it in Deep Seer

Deep Seer integrates sun position calculations with geospatial analysis, letting you overlay shadow angles on the 3D globe to verify photo locations and timestamps against solar geometry.

Launch Deep Seer