All thirty days

Day 5: Senses: sight

How many of Alberta's 979 named Rocky Mountain summits you could see from each square kilometre of the province, standing on the ground, worked out over unmap's own terrain.

rockies.json
Loading the view from every square kilometre
Summits in sight1
Click anywhere to see what is in sight.

Each square on this map is about a square kilometre of Alberta, coloured by how many named Rocky Mountain summits you could see from somewhere inside it, standing on the ground on a clear day. The count covers 979 summits, every named mountain in Alberta of 2,000 m or more from Waterton to Grande Cache. About 132,000 km² of the province can see at least one, a fifth of Alberta.

Distance helps, up to a point. Close to the mountains the foothills fill the view. Farther out they sink below the line of sight, and the ranges behind them rise into it. Chestermere, 89, sees more summits than downtown Calgary, 56, which sits low in the Bow valley, and the hills of the city's north-west see many more than downtown. The highest summit in sight from downtown is Mount Rae. Lethbridge, 43, sees the southern ranges across the plain, and the brightest stretch of prairie runs from Olds through Strathmore to Vulcan.

Then the curve of the Earth closes in. Over flat ground, a summit 2,000 m above you sinks below the horizon at about 170 km. 46 of Alberta's 123 cities and towns have a summit in sight at the point the names database gives them. Edmonton and Medicine Hat have none. Red Deer's centre has none either, down in its river valley, though much of the farmland around it does. The longest view the model finds is 235 km, from the top of the Swan Hills, north-west of Whitecourt, to The Rajah, in the north of Jasper National Park.

This is bare ground. The model has the hills but no trees, no buildings and no haze: in the northern forest the next stand of spruce often hides a view the map shows, and on most days the air hides the farthest summits long before the curve does. The terrain is a 30 m model read at about 47 m a pixel, which rounds the sharpest summits down by a few dozen metres, so at the edges of the glow a few metres decide a view either way. Click anywhere to see how many summits are in sight, the highest of them and the farthest.

How it's made

One basemap and one layer. This is the whole map, minus the legend.

import { createMap } from '@unmap/sdk'

// From each summit, sight lines every 0.1° out to 300 km, over unmap's /terrain heights.
// Ground at distance d sees the summit when the line from the summit to an eye 1.7 m up
// is at least as steep as everything nearer: the view-explorer test, turned around.
const drop = (d) => (d * d) / (2 * 6371009) * (1 - 0.13) // Earth's curve, less refraction

for (const summit of summits) {
  for (let bearing = 0; bearing < 360; bearing += 0.1) {
    let steepest = -Infinity
    for (let d = 50; d <= 300_000; d += d < 100_000 ? 50 : 100) { // 200 m steps skip crests
      const ground = heightAt(destination(summit, bearing, d))
      const eye = (ground + 1.7 - drop(d) - summit.height) / d
      if (eye >= steepest) seen(summit, bearing, d)
      steepest = Math.max(steepest, (ground - drop(d) - summit.height) / d)
    }
  }
}

// The count per square kilometre, painted as one image under the place names.
const map = createMap({ key: 'um_live_...', container: '#map', style: 'muted' })
map.on('load', () => {
  map.addSource('sight', { type: 'image', url: countsAsPng, coordinates: corners })
  const labels = map.getStyle().layers.find((l) => l.type === 'symbol').id
  map.addLayer({ id: 'sight', type: 'raster', source: 'sight' }, labels)
})

The summits are the rows in the Canadian Geographical Names Database with the mountain code in Alberta, west of 113.8° W, from Waterton to Grande Cache. Each is moved to the highest terrain within 300 m of its name, kept if that top reaches 2,000 m, and counted once when two names share a top. The heights are unmap's own terrain tiles, the ones its maps draw in 3D. From every summit a script runs 3,600 sight lines out to 300 km, one every tenth of a degree, sampled every 50 m for the first 100 km and every 100 m after. It tests each sample the way the view-explorer block in unmap's registry tests a window: a straight line over the Earth's curve, with standard refraction (k = 0.13), to an eye 1.7 m above the ground. A square kilometre counts a summit when any sample inside it sees it. Squares outside Alberta's boundary are left out. It is a model of clear air over bare ground, not a promise of a view.

Data

  • Summit names: Canadian Geographical Names Database, Natural Resources Canada. Contains information licensed under the Open Government Licence - Canada. File published 3 November 2026.
  • Heights: unmap terrain, the Mapterhorn mosaic with Natural Resources Canada's MRDEM-30 (Open Government Licence - Canada). This product was in part produced using Copernicus WorldDEM-30 © DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA. Every source is listed at unmap.dev/attribution.
  • Alberta boundary: © OpenStreetMap contributors (ODbL).
  • Basemap: unmap, © OpenStreetMap contributors.

Share this map

Post it, or make your own and tag it #30DayMapChallenge.