I wanted a peak finder whose method I can read, change and host myself. So I built WhichPeak, a static web app that draws a labeled 360 degree panorama from open elevation tiles.
What it does
You open a link or drop a pin. WhichPeak reads AWS Terrain Tiles, builds the terrain in six rings of detail from 5 km out to 1000 km, and draws the view. It adds earth curvature and refraction, shades the terrain with the real sun for the hour you pick, and labels each summit that is actually above the horizon. Click a label for elevation, distance, bearing, the angle above the horizon and how far the peak clears the terrain in front of it.
There is also a line of sight tool that plots the profile between two points and names the ridge that blocks it.
How the horizon works
For each pixel column the renderer sweeps outward and keeps the highest slope it has seen. Curvature drops the ground by d squared over twice the effective radius, and refraction enlarges that radius by 1 over (1 minus k) with k set to 0.13. A peak gets a label only if its own slope beats the sweep. The known flaw is a smear in the foreground on very steep ground. It is cosmetic and does not touch the labels.
What I measured
The terrain for a 150 km view from the Gornergrat is drawn in 4.6 s, the median of six cold runs in headless Chrome over the real network. At 400 km it is 6.6 s. Peak names come from Overpass and load separately, between 10 and 32 s in my runs. A bundled list of 35,621 summits above 1800 m fills in when no mirror answers.
I also tested the line of sight against sightlines that people documented. Pic de Finestrelles to Pic Gaspard, 443 km, comes out blocked by 48 m at the average refraction and visible from k = 0.145. That matches a photograph taken in 2016 under strong refraction. Marys Peak to Mount Rainier, 295.8 km, is visible with 78 m of clearance.
Photo mode is experimental. I ran eight casual photos with the place set and no heading. One matched and seven were flagged as weak matches. Nothing was reported as matched when it was wrong.
Try it
git clone https://github.com/Arthur031221/WhichPeak.git
cd WhichPeak
npm install
npm run dev
The live demo is at https://arthur031221.github.io/WhichPeak/ and the code is at https://github.com/Arthur031221/WhichPeak. The interface comes in nine languages and the project has 93 unit tests and 10 browser tests. I built it with help from AI coding assistants.
Which long sightline should I test next?

Top comments (0)