Data sources

Observed weather: Open-Meteo Archive API (https://archive-api.open-meteo.com/v1/archive), daily temperature_2m_max, temperature_2m_min, precipitation_sum, retrieved from 1991-01-01 to the current day. Seed data for featured towns was retrieved on 2026-09-14 (Berlin seed c_52.5_13.4, observed through 2026-09-14). Underlying data: ERA5 / ERA5-Land reanalysis (Copernicus). Weather data by Open-Meteo.com, CC-BY 4.0.

Projected climate: Open-Meteo Climate API (https://climate-api.open-meteo.com/v1/climate), daily, 7 CMIP6 HighResMIP models, window 2031–2050, high-emissions scenario (≈ RCP8.5). Emission pathways barely differ before ~2050, so the scenario choice matters little for this window — but it is always labelled.

Models used, by name: CMCC_CM2_VHR4, EC_Earth3P_HR, FGOALS_f3_H, HiRAM_SIT_HR, MPI_ESM1_2_XR, MRI_AGCM3_2_S, NICAM16_8S.

Grid resolution

Every location is snapped to a 0.1° grid cell (≈ 11 km, matching the effective resolution of ERA5-Land over land; ≈ 25 km elsewhere). Everyone inside the same cell sees the same numbers, because they share the same dataset. Mountains and coastlines are smoothed at this resolution.

Metric definitions

MetricDefinition
Hot daysdays with daily max ≥ 30.0 °C, per year
Frost daysdays with daily min < 0.0 °C, per year
Heavy-rain daysdays with precipitation ≥ a local threshold; the threshold is the 90th percentile of baseline (1991–2020) wet days (≥ 1.0 mm)
Longest dry spelllongest run of consecutive days with precipitation < 1.0 mm, averaged over calendar years
Summer temperaturemean daily max over June–August, averaged over years

Windows: baseline 1991–2020 (observed), recent 2021 → latest observation, projected 2031–2050. Per-year values are counts divided by the number of distinct years in the window. Missing days are skipped for counts and means and break runs for dry spells.

Heavy-rain quirk

Projected heavy-rain days can be lower than the baseline. This is not a contradiction: the threshold is derived from observed baseline wet days, and climate models produce too many light-rain days ("drizzle bias"), which shifts their percentile scale. We show it as computed, with the full model spread.

How the charts on the card are drawn

The card is built so that someone who has never read a graph can still follow it. Every chart is paired with a sentence in plain words, and every mark carries a label — no key required.

The frequency lines ("about one such day every 5 weeks") are a restatement of the same per-year count, not a new metric: the count is divided by 365 and rounded to a readable interval.

Sea level (coastal cells)

For coastal towns with a bundled sea seed, the card shows an additional row. Observed part: linear trend of the PSMSL monthly tide-gauge record (Permanent Service for Mean Sea Level), e.g. +1.87 mm/yr at Delfzijl 1865–2026 for Emden. Projected part: IPCC AR6 regional sea-level projections (FACTS medium-confidence p-box, workflows 1e+1f), high-emissions scenario SSP5-8.5, relative to the 1995–2014 average. We quote the 17–83 % model-outcome range for 2050 (full p05–p95 range in the sentence) — this is a range of model outcomes, not a forecast. Regional values are relative sea level (vertical land motion included via the gauge location), not global average. Data is extracted at build time into seed files; there is no live API call for sea level, so only cells with a generated sea seed (currently Emden, Cuxhaven) show the row. Sea level is not a statement about flooding of specific streets.

Verification

All five metrics exist in two independent implementations — JavaScript (src/metrics.js) and Python (tools/metric_core.py) — and both must agree exactly (every output field at 6 decimals) before any change is merged. Last verified run on real Berlin data: 72 output fields, 0 mismatches (13,041 observed days, 7 models × 20 years). The verification harness and current status live in the repository.

What this tool is NOT

Contribute / contact

The project is open source (MIT) at bitfreedom.net/code/nomyo-ai/MyClimatechange. Seeds for more towns, translations, and issue reports are welcome.

← Back to the map

Datenquellen

Beobachtetes Wetter: Open-Meteo Archive API (https://archive-api.open-meteo.com/v1/archive), täglich temperature_2m_max, temperature_2m_min, precipitation_sum, abgerufen vom 1.1.1991 bis zum aktuellen Tag. Seed-Daten der Beispielstädte wurden am 14.09.2026 abgerufen (Berlin-Seed c_52.5_13.4, beobachtet bis 14.09.2026). Zugrundeliegende Daten: ERA5- / ERA5-Land-Reanalyse (Copernicus). Wetterdaten von Open-Meteo.com, CC-BY 4.0.

Projiziertes Klima: Open-Meteo Climate API (https://climate-api.open-meteo.com/v1/climate), täglich, 7 CMIP6-HighResMIP-Modelle, Zeitfenster 2031–2050, hohes Emissionsszenario (≈ RCP8.5). Die Emissionspfade unterscheiden sich vor ~2050 kaum, daher spielt die Szenariowahl für dieses Zeitfenster eine geringe Rolle — sie wird dennoch immer ausgewiesen.

Verwendete Modelle, namentlich: CMCC_CM2_VHR4, EC_Earth3P_HR, FGOALS_f3_H, HiRAM_SIT_HR, MPI_ESM1_2_XR, MRI_AGCM3_2_S, NICAM16_8S.

Gitterauflösung

Jeder Ort wird auf eine 0,1°-Gitterzelle gerastet (≈ 11 km, entsprechend der effektiven Auflösung von ERA5-Land über Land; anderswo ≈ 25 km). Alle Personen innerhalb derselben Zelle sehen dieselben Zahlen, weil sie denselben Datensatz teilen. Gebirge und Küstenlinien werden bei dieser Auflösung geglättet.

Metrik-Definitionen

MetrikDefinition
Heiße TageTage mit Tageshöchstwert ≥ 30,0 °C, pro Jahr
FrosttageTage mit Tiefstwert < 0,0 °C, pro Jahr
Tage mit StarkregenTage mit Niederschlag ≥ einem lokalen Schwellenwert; dieser ist das 90. Perzentil der Basisniederschlagstage (≥ 1,0 mm) aus 1991–2020
Längste Trockenperiodelängste Folge aufeinanderfolgender Tage mit Niederschlag < 1,0 mm, gemittelt über Kalenderjahre
Sommertemperaturmittleres Tagesmaximum über Juni–August, gemittelt über Jahre

Zeitfenster: Basis 1991–2020 (beobachtet), aktuell 2021 → letzte Beobachtung, projiziert 2031–2050. Jahreswerte sind Anzahlen geteilt durch die Zahl der verschiedenen Jahre im Fenster. Fehlende Tage werden bei Zählung und Mitteln übersprungen und beenden Folgen bei Trockenperioden.

Eigenheit bei Starkregen

Projizierte Starkregentage können niedriger als der Basiswert ausfallen. Das ist kein Widerspruch: Der Schwellenwert stammt aus beobachteten Basisniederschlagstagen, und Klimamodelle erzeugen zu viele leichte Regentage („Drizzle-Bias“), was ihre Perzentilskala verschiebt. Wir zeigen es so, wie es berechnet ist — mit der vollen Modellspannweite.

Wie die Diagramme auf der Karte entstehen

Die Karte ist so gebaut, dass auch jemand ohne Erfahrung mit Diagrammen ihr folgen kann. Jedes Diagramm steht neben einem Satz in einfacher Sprache, und jede Markierung ist beschriftet — eine Legende ist nicht nötig.

Die Häufigkeitszeilen („etwa alle 5 Wochen ein solcher Tag“) sind eine Umformulierung desselben Jahreswerts, keine neue Kennzahl: Der Wert wird durch 365 geteilt und auf ein lesbares Intervall gerundet.

Meeresspiegel (Küstenzellen)

Für Küstenstädte mit hinterlegtem Meeresspiegel-Seed zeigt die Karte eine zusätzliche Zeile. Beobachteter Teil: linearer Trend der monatlichen Tidepegel-Records des PSMSL (Permanent Service for Mean Sea Level), z. B. +1,87 mm/Jahr am Pegel Delfzijl 1865–2026 für Emden. Projizierter Teil: regionale Meeresspiegel-Projektionen des IPCC AR6 (FACTS-P-Box mittlerer Konfidenz, Workflows 1e+1f), hohes Emissionsszenario SSP5-8.5, relativ zum Mittel von 1995–2014. Wir nennen die 17–83-%-Spanne der Modellergebnisse für 2050 (gesamte p05–p95-Spanne im Satz) — dies ist eine Spanne von Modellergebnissen, keine Vorhersage. Die regionalen Werte sind relativer Meeresspiegel (Vertikale Landbewegung über den Pegelstandort eingeschlossen), kein globaler Mittelwert. Die Daten werden zur Build-Zeit in Seed-Dateien extrahiert; es gibt keinen Live-API-Abruf für den Meeresspiegel, daher zeigt nur Zellen mit erzeugtem Sea-Seed (aktuell Emden, Cuxhaven) diese Zeile. Meeresspiegel ist keine Aussage über die Überflutung bestimmter Straßen.

Verifikation

Alle fünf Metriken existieren in zwei unabhängigen Implementierungen — JavaScript (src/metrics.js) und Python (tools/metric_core.py) — und beide müssen exakt übereinstimmen (jedes Ausgabefeld auf 6 Dezimalstellen), bevor eine Änderung gemerged wird. Letzter verifizierter Lauf mit echten Berlin-Daten: 72 Ausgabefelder, 0 Abweichungen (13.041 beobachtete Tage, 7 Modelle × 20 Jahre). Der Verifikations-Stack und der aktuelle Status liegen im Repository.

Was dieses Tool NICHT ist

Mitmachen / Kontakt

Das Projekt ist Open Source (MIT) unter bitfreedom.net/code/nomyo-ai/MyClimatechange. Seeds für weitere Städte, Übersetzungen und Fehlermeldungen sind willkommen.

← Zurück zur Karte