Press & Media Kit
Everything you need to cover this story. Static maps | EU-wide iFrames | Country iFrames | Single-city iFrames | Key statistics
Changing the site language (top right) also changes the language of downloadable assets and interactive embeds.
Static maps
High-resolution, print-ready canopy maps (PNG, 300 DPI). Each shows every building coloured by its tree canopy within 60 m, with legend and caption. Right-click any city to save the full-resolution file:
- France: Paris · Lyon · Marseille · Toulouse · Nice
- UK: London · Birmingham · Bristol · Leeds · Liverpool · Newcastle
- Germany: Berlin · Munich · Cologne · Hamburg
- Spain: Madrid · Barcelona · Sevilla
- Italy: Rome · Naples · Milan
- Portugal: Lisbon · Porto
- Greece: Athens · Thessaloniki
EU-wide iFrames
Self-contained interactive tools covering all 25 cities. Each is an iFrame; copy the code below any tool, or right-click to open in a new tab.
To embed: copy the code snippet below each tool and paste it directly into your HTML editor or CMS.
Tree canopy within 60m of every building
Each coloured unit is an individual building. 25 European cities.
<iframe src="https://euheatwave2026.pages.dev/embeds/hero-carousel-compact.html" width="100%" height="460" frameborder="0" style="border:0" id="tj-hero-carousel-compact"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-hero-carousel-compact");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>25-city canopy ranking
<iframe src="https://euheatwave2026.pages.dev/embeds/city-ranking.html" width="100%" height="850" frameborder="0" style="border:0" id="tj-city-ranking"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-city-ranking");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Canopy deficit explorer (adjustable threshold)
<iframe src="https://euheatwave2026.pages.dev/embeds/canopy-deficit-slider.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-canopy-deficit-slider"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-canopy-deficit-slider");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Heat x inequality scatter
Income vs temperature, coloured by canopy.
<iframe src="https://euheatwave2026.pages.dev/embeds/heat-inequality.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-heat-inequality"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-heat-inequality");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Four-panel inequality maps (exposure meets income)
17 cities with income/deprivation data.
<iframe src="https://euheatwave2026.pages.dev/embeds/inequality-four-panel.html" width="100%" height="700" frameborder="0" style="border:0" id="tj-inequality-four-panel"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-inequality-four-panel");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Cool & hot spots explorer
Dense residential areas that stay measurably cooler, or dangerously hotter. Split view with satellite and street imagery.
<iframe src="https://euheatwave2026.pages.dev/embeds/spots-explorer.html" width="100%" height="650" frameborder="0" style="border:0" id="tj-spots-explorer"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-spots-explorer");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Land surface temperature maps
22 cities. Landsat 8/9 thermal imagery during documented heatwave events. Magma palette.
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/lst-carousel.html" width="100%" height="700" frameborder="0" style="border:0" id="tj-lst-carousel"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-lst-carousel");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Country iFrames
Nation-specific maps filtered to each country’s cities. Embed these for country-focused coverage.
Germany (4 cities: Berlin, Munich, Cologne, Hamburg)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-carousel-de.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-carousel-de"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-carousel-de");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-deficit-de.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-country-deficit-de"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-deficit-de");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>France (5 cities)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-carousel-fr.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-carousel-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-carousel-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-deficit-fr.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-country-deficit-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-deficit-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Land surface temperature (June 2026 heatwave)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-lst-fr.html" width="100%" height="640" frameborder="0" style="border:0" id="tj-country-lst-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-lst-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Canopy × income
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-canopy-income-fr.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-canopy-income-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-canopy-income-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Heat × canopy deficit
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-heat-deficit-fr.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-heat-deficit-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-heat-deficit-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Heat exposure meets inequality (4-panel)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-fourpanel-fr.html" width="100%" height="900" frameborder="0" style="border:0" id="tj-country-fourpanel-fr"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-fourpanel-fr");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>UK (6 cities: London, Birmingham, Bristol, Leeds, Liverpool, Newcastle)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-carousel-uk.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-carousel-uk"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-carousel-uk");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-deficit-uk.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-country-deficit-uk"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-deficit-uk");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Italy (3 cities)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-carousel-it.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-carousel-it"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-carousel-it");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-deficit-it.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-country-deficit-it"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-deficit-it");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Spain (3 cities)
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-carousel-es.html" width="100%" height="500" frameborder="0" style="border:0" id="tj-country-carousel-es"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-carousel-es");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/country-deficit-es.html" width="100%" height="520" frameborder="0" style="border:0" id="tj-country-deficit-es"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-country-deficit-es");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Single-city iFrames
Scrollable map of every building’s canopy deficit. Pan, zoom, and adjust overlay opacity. Select a city from the dropdown.
Copy this code and paste it directly into your HTML editor or CMS to embed:
<iframe src="https://euheatwave2026.pages.dev/embeds/leaflet-city.html" width="100%" height="650" frameborder="0" style="border:0" id="tj-leaflet-city"></iframe>
<script>window.addEventListener("message",function(e){if(e.data&&e.data.type==="embed-height"){var f=document.getElementById("tj-leaflet-city");if(f&&f.contentWindow===e.source)f.style.height=e.data.height+"px";}});</script>Key statistics
All 25 cities mapped. Income/deprivation data is available for 17 cities (France, UK, Germany, Spain, Italy, Portugal).
Canopy and heat by city
| City | Country | Buildings | Avg canopy in 60m of buildings | % above 30% | Mean Heatwave LST |
|---|---|---|---|---|---|
| Sevilla | Spain | 62,940 | 9.1% | 1.8% | 49.4°C |
| Athens | Greece | 67,825 | 10.4% | 2.5% | 43.7°C |
| Liverpool | UK | 136,605 | 11.3% | 6.5% | 32.9°C |
| Paris | France | 118,646 | 12.1% | 4.4% | 47.9°C |
| Lisbon | Portugal | 58,785 | 12.2% | 5.3% | 42.8°C |
| Newcastle | UK | 73,969 | 12.2% | 5.5% | 29.3°C |
| Leeds | UK | 328,493 | 12.9% | 8.2% | 21.7°C† |
| Birmingham | UK | 282,088 | 13.5% | 7.9% | 34.8°C |
| Porto | Portugal | 45,274 | 13.5% | 6.3% | 44.9°C |
| London | UK | 1,545,577 | 14.0% | 7.2% | 44.9°C |
| Madrid | Spain | 159,773 | 14.1% | 8.8% | 45.1°C |
| Milan | Italy | 68,631 | 14.2% | 7.5% | 46.6°C |
| Bristol | UK | 188,988 | 16.1% | 10.5% | 36.7°C |
| Marseille | France | 256,397 | 16.6% | 12.6% | 48.0°C |
| Rome | Italy | 239,207 | 17.9% | 14.8% | 49.7°C |
| Naples | Italy | 59,034 | 18.0% | 14.9% | 46.0°C |
| Lyon | France | 46,246 | 18.4% | 15.7% | 49.0°C |
| Thessaloniki | Greece | 26,858 | 19.6% | 16.4% | 42.3°C |
| Berlin | Germany | 575,524 | 21.0% | 20.0% | 43.8°C |
| Toulouse | France | 137,966 | 21.5% | 16.6% | 45.5°C |
| Munich | Germany | 200,191 | 24.1% | 27.2% | 42.5°C |
| Barcelona | Spain | 74,957 | 24.3% | 30.7% | 43.7°C |
| Nice | France | 53,858 | 27.3% | 40.8% | 43.5°C |
| Hamburg | Germany | 384,724 | 28.5% | 44.4% | 36.5°C |
| Cologne | Germany | 322,172 | 29.2% | 45.7% | 42.4°C |
Avg canopy in 60m of buildings = average canopy % within 60m of each building. % above 30% = proportion of buildings meeting the 30% canopy cooling threshold.
LST dates: nearly all cities use June–July 2026 heatwave scenes — France 21–26 Jun; Germany, Italy, Spain, Greece and Portugal late Jun–early Jul; UK late May. Exceptions: Berlin (Jul 2025 composite — Jun 2026 too cloudy), and Leeds/Liverpool/Newcastle (2023–24, no clear 2026 scene). See Methods for per-city scene details.
† Leeds LST from a partially cloudy scene (14.4% cloud, 2024-07-30), so mean temperature is not representative of peak heat.
Total: ~5.5 million buildings across 25 cities. On average, 84% of buildings fall below the 30% canopy threshold.
Income-heat inequality (cities with equity data)
| City | Country | Equity data source | Canopy–heat ρ | Equity–heat ρ | Key finding |
|---|---|---|---|---|---|
| Nice | France | Filosofi 200m (2019) | −0.80 | −0.53 | Strongest canopy–heat signal. Wealthy hillsides have canopy; coastal flats exposed |
| Milan | Italy | Istat 2021 census (sezione) | −0.77 | −0.22 | Inverse: dense wealthy centre is the hot core; deprived outskirts greener |
| Madrid | Spain | INE ADRH 2023 (sección) | −0.70 | −0.36 | Strong income–heat; affluent north protected, poor south exposed |
| Bristol | UK | IMD 2025 (LSOA) | −0.64 | +0.10 | Strong canopy–heat link; deprivation–heat link weak |
| Toulouse | France | Filosofi 200m (2019) | −0.57 | −0.40 | |
| Munich | Germany | Zensus 2022 (100m) | −0.58 | +0.02 | Rent barely predicts heat; canopy strongly does |
| London | UK | IMD 2025 (LSOA) | −0.55 | +0.33 | Most deprived LSOAs significantly hotter |
| Lyon | France | Filosofi 200m (2019) | −0.56 | −0.32 | |
| Marseille | France | Filosofi 200m (2019) | −0.46 | −0.45 | Both income and canopy track heat; poorer inner districts hotter and barer |
| Cologne | Germany | Zensus 2022 (100m) | −0.42 | +0.01 | |
| Berlin | Germany | Zensus 2022 (100m) | −0.47 | −0.09 | Rent barely predicts heat; canopy does |
| Birmingham | UK | IMD 2025 (LSOA) | −0.45 | +0.23 | |
| Sevilla | Spain | INE ADRH 2023 (sección) | −0.20 | −0.57 | Steepest income–heat gradient in Spain; city regularly exceeds 44°C |
| Lisbon | Portugal | Census BGRI 2021 (subsecção) | +0.07 | −0.03 | Signals wash out at the July 2026 peak — near-uniform exposure across the city |
| Paris | France | Filosofi 200m (2019) | −0.51 | −0.32 | Canopy strongly predicts heat, but income barely predicts canopy (ρ≈0): the deficit is near-universal |
| Rome | Italy | Istat 2021 census (sezione) | −0.40 | +0.18 | More-deprived sezioni run hotter |
| Barcelona | Spain | INE ADRH 2023 (sección) | −0.33 | −0.29 | Both canopy and income track heat in this compact coastal city |
Canopy–heat ρ: Spearman correlation between canopy % and surface temperature. Negative = more canopy → cooler (expected). Equity–heat ρ: for income metrics (France, Spain) negative = lower income → hotter; for deprivation metrics (UK, Italy, Portugal, German rent) positive = more deprived → hotter.
Equity sources: France Filosofi income; UK IMD 2025; Germany Zensus rent; Spain INE ADRH 2023 income (sección); Italy Istat 2021 education+employment composite (sezione); Portugal 2021 BGRI housing composite (subsecção).
Note on the France heat-deficit map above: it shows the same canopy–heat link at a finer scale than this table — native 30 m Landsat pixels masked to built-up land, correlating canopy deficit (not canopy %) with heat, so its ρ is positive (more deficit → hotter). Its ρ runs lower than the table’s because Landsat surface temperature is only ~100 m native, so 30 m canopy is paired against much coarser heat (diluting the signal) and fine pixels add local noise — the table’s neighbourhood-scale (~100–200 m unit) figures are the headline measure. Masking to built-up land is essential: across all land, including cool parks and water, the fine-scale correlation washes out to ≈0.
No equity data available for: Italy (Naples), Portugal (Porto), Greece (Athens, Thessaloniki), UK (Leeds, Liverpool, Newcastle).
Cool spots: dense areas that stay cool
Temperature gaps between shaded and exposed areas at similar dwelling densities (~50 dw/ha):
| City | Temperature gap | Mean canopy in cool spots |
|---|---|---|
| Paris | 10.5°C | ≥20% |
| Berlin | 7.5°C | ≥20% |
| Marseille | 6.6°C | ≥20% |
| Birmingham | 6.6°C | ≥20% |
| Lyon | 6.0°C | ≥20% |
| London | 5.2°C | ≥20% |
Cool spot criteria: mean canopy ≥20% within 60m, surface temperature below city 25th percentile, dwelling density ≥8 dw/ha.
Data sources
- Tree canopy: Google EIE (0.2m, 2020–2025) for 19 cities; Meta/WRI Global Canopy Height (1m, 2020) for 6 remaining cities (Barcelona, Bristol, Cologne, Naples, Porto, Thessaloniki). All vegetation counted (no height filter). Canopy assessed within 60m of each building. Hybrid fill applied where 0.2m coverage is incomplete.
- Surface temperature: Landsat 8/9 Collection 2 Level 2 (30 m). June–July 2026 heatwave for most cities; late-May 2026 for UK; Berlin uses a July 2025 composite; Leeds/Liverpool/Newcastle retain 2023–24 scenes. Per-pixel QA cloud masking; max-composite for multi-path/cloudy cities.
- Buildings: IGN BD TOPO v3.x (France), Overture Maps (all other countries).
- Income: INSEE Filosofi 200m grid (France, 2019).
- Deprivation: IMD 2025 at LSOA level (UK). Zensus 2022 at 100m grid (Germany, rent as proxy).
- Threshold: 30% canopy cover within 60m, the minimum linked to measurable cooling (Ziter et al. 2019).
Unpublished spatial analysis by Dr Thami Croeser, June 2026.