Five Walks Across Madeira
North coast cliffs near Boaventura

Levadas, peaks, and the Atlantic in between

Five Walks Across Madeira

A levada walk above Boaventura, a scramble up Pico Grande, a coastal drive to Madeira's edges, the cliffs of Ponta de São Lourenço by foot and by boat, and the short, crowded, unmissable walk to Pico Ruivo.

Five days, five walks, and an island that does not believe in flat ground. Madeira packs an extraordinary amount of vertical relief into a small footprint, and the best way to feel that is on foot — on a levada, up a peak, or along a cliff edge with the Atlantic working away at the rock below. We also took to the water once, which turned out to be the right call.

Levada da Achada Grande – Levada de Cima, Boaventura

First full day, and the gentlest introduction the island offers — on paper. The route links two levadas above Boaventura on the north coast, following a water channel through laurel forest before a stiff connecting climb between the two systems. Around 8 km in total, with enough up and down to remind you that “levada walk” doesn’t always mean “flat.” The reward is the forest itself: damp, mossy, dripping, and almost silent except for the water running beside the path. We broke out of the trees in the early afternoon to a clean view of the north coast — black cliffs, a waterfall going straight into the sea, no buildings in sight.

The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated ×2.4 for clarity.

Pico Grande, PR12

Second outing, and the one that actually felt like a mountain. PR12 climbs out of the central massif toward Pico Grande, roughly 10.5 km round trip with a long, steady ascent into the 1,600–1,700 m range. We started before eight, in cold air and low cloud, and spent the first hour climbing through mist with almost no view at all. Then the cloud broke — properly broke, all at once — and the rest of the walk was ridge after volcanic ridge, ropes and chains on the exposed sections, and a drop on either side that keeps you honest. Madeira’s central peaks don’t get the same press as Pico Ruivo, but PR12 was the hardest and most rewarding day of the trip.

The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated ×2.4 for clarity.

The west: Fanal Forest, Seixal, Porto Moniz, Ponta do Pargo

A driving day, deliberately — after two big walks, the west rewards a slower pace. We started inland at Fanal Forest, where the old laurel trees sit high on the plateau and the weather can make the place feel half-real even without much walking. Then down to Piscinas Naturais do Seixal, volcanic rock pools on the north coast with the swell breaking just beyond the natural wall that protects them. Further west came Porto Moniz, whose lava-pool swimming area is the more famous version of the same idea, scaled up and with a footbridge over the rocks. We caught Miradouro do Pico Vermelho along the way, one of several viewpoints on this stretch where the cliffs simply fall away. The day ended at Miradouro do Farol da Ponta do Pargo, where Madeira’s highest sea cliffs catch the last light — worth timing for golden hour if the schedule allows it, which ours, for once, did.

A shorter recorded GPX track from Fanal Forest, set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated ×2.4 for clarity.

Ponta de São Lourenço — on foot and by boat

The island’s easternmost tip is its driest corner: dry-savanna scrub and bare volcanic rock standing in obvious contrast to the laurel forest a few days earlier. The path out to the point undulates over a series of small hills with the sea on both sides, close to 12 km if you go all the way to the end and back. We followed it out that morning, then did something we hadn’t planned — a short boat trip along the base of the cliffs in the afternoon, looking up at the same headland from sea level. The sea stacks and arches that you only half-notice from the trail above turn out to be the main event from the water. Two completely different versions of the same piece of coastline, on the same day.

The recorded GPX track set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated ×2.4 for clarity.

Pico Ruivo, via Achada do Teixeira — PR1.2

Shortest walk of the trip and the busiest by far — for good reason. PR1.2 starts at Achada do Teixeira and reaches Pico Ruivo, Madeira’s highest point at 1,862 m, in only a few kilometres each way along a paved, stepped path. It is popular precisely because it delivers a disproportionate amount of view for a modest amount of effort: the final stretch is a stone stairway along an exposed ridge with the central peaks falling away on both sides, and a summit that’s standing room only on a clear day. We shared the last few hundred metres with a small crowd and didn’t mind one bit — some views are worth queuing for.

The recorded GPX track to Pico Ruivo from Achada do Teixeira, set against the surrounding terrain (SRTM elevation data) — drag to rotate, scroll to zoom, or press play to follow the route. Elevation is exaggerated ×2.4 for clarity.

  • Setting off on the levada above Boaventura
  • Levada da Achada Grande, water channel and laurel forest
  • North coast cliffs, waterfall dropping straight into the Atlantic
  • Early start on Pico Grande PR12
  • Climbing through cloud
  • Above the cloud line, ridge after ridge
  • Pico Grande's rocky upper slopes
  • Coming back down, the climb behind us
  • Piscinas Naturais do Seixal, volcanic rock pools
  • Seixal's coastline, lava meeting surf
  • Porto Moniz natural swimming pools
  • Porto Moniz
  • Miradouro do Farol da Ponta do Pargo, Madeira's highest sea cliffs
  • Ponta do Pargo at golden hour
  • Starting out across Ponta de São Lourenço
  • Ponta de São Lourenço
  • Ponta de São Lourenço
  • Ponta de São Lourenço
  • The dry, savanna-like spine of the peninsula
  • Ponta de São Lourenço
  • Ponta de São Lourenço
  • Ponta de São Lourenço
  • Nearing the easternmost tip
  • Sea stacks off the point, seen from the boat
  • Ponta de São Lourenço
  • Out on the water below the cliffs
  • Achada do Teixeira, the start of the Pico Ruivo path
  • The stairway to Pico Ruivo, Madeira's highest point
  • Pico Ruivo
  • Clouds breaking against the central peaks
  • 1862 metres up, looking back across the island
  • Near Santana, north coast
  • Funchal
  • Funchal
  • Funchal
  • Funchal
  • Funchal

Behind the scenes: building the 3D track viewer

The visualisations above come out of a small, general-purpose Python script, gpx_3d_viz.py, that turns any GPX track into the same kind of self-contained, interactive HTML: a real terrain surface from public elevation data (Open Topo Data, SRTM 30m by default), the track draped onto it so the two never disagree, an animated marker that follows the route, and an optional satellite or street-map texture draped over the terrain with an on-screen toggle to switch between them.

It needs Python 3; the satellite/map texture feature additionally needs Pillow (pip install pillow) — everything else is standard library, and there’s no separate viewing step, since the output is one plain HTML file.

# Basic: terrain + draped track, satellite/map basemap with a toggle (the default)
python3 gpx_3d_viz.py track.gpx -o track-3d.html

# Roughly what generated the views above: a denser terrain grid, the area
# padded out by 20%, and a fixed (faster-to-build) basemap zoom level
python3 gpx_3d_viz.py track.gpx -o pico-grande-3d.html \
  --title "Pico Grande · PR12" \
  --terrain-grid 14x32 --terrain-upsample 3 \
  --terrain-expand 0.10 --texture-zoom 14

# Batch build every GPX in a folder straight into the Jekyll assets directory
# and print iframe snippets ready to paste into the post
python3 gpx_3d_viz.py *.gpx \
  --output-dir ../assets/visualizations \
  --terrain-grid 14x32 --terrain-upsample 3 \
  --terrain-expand 0.10 --texture-zoom 14 \
  --print-embed

# Satellite imagery only, no toggle button
python3 gpx_3d_viz.py track.gpx --basemap satellite

# Just the track and terrain, no imagery — fastest to build, no Pillow needed
python3 gpx_3d_viz.py track.gpx --basemap none

# Skip the terrain entirely (a flat reference grid instead)
python3 gpx_3d_viz.py track.gpx --no-terrain

Some of the more useful options:

Option What it does
--basemap both\|satellite\|map\|none Drapes Esri satellite imagery and/or OpenStreetMap over the terrain, with a toggle button (default: both)
--terrain-grid NXxNY Density of the real elevation grid fetched from the API (default: 14x32)
--terrain-expand 0.10 Pads the terrain area by 10% per side, i.e. +20% total extent (default: off)
--output-dir, --print-embed Batch-build multiple GPX files and print matching Jekyll iframe snippets
--exaggeration 2.4 Vertical exaggeration applied to elevation, for readability (default: 2.4)
--hiker-radius 10 Size of the “you are here” marker animated along the route
--texture-zoom Basemap detail level — auto-picked by default, or fix it for a faster build
--export-track-json, --export-terrain-json Dump the processed track/terrain data as JSON, for reuse elsewhere

Run python3 gpx_3d_viz.py --help for the complete list, including terrain dataset choice, smoothing, track styling, and API rate limiting.