Graaddagen-API
Verwarmings- en koelgraaddagen uit de uurlijkse ERA5-Land-heranalyse, tot 1950, overal op het land — ook op plaatsen zonder weerstation binnen 60 km. Eén scope — dju — dekt deze hele pagina.
Graaddagen#
dju2 credits, +1 per volledige periode van 365,25 dagen in het bereikVerwarmings- en koelgraaddagen voor een coördinaat.
Parameters
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
lat | float | — | Verplicht. |
lon | float | — | Verplicht. |
base | number | preset | csv | 18 | Elke basistemperatuur in °C, of een voorinstelling: uk (15,5), ashrae (18,333), iso, france, eurostat. Tot 60 door komma's gescheiden, zonder meerkosten — zie hieronder. |
method | string | hourly | hourly, costic, mean of eurostat. Uw contract beslist dit, niet wij. |
start | ISO date | 1 januari van het eindjaar | Maximaal 10 jaar per verzoek. |
end | ISO date | vandaag | |
type | string | both | HDD, CDD of both. |
breakdown | string | monthly | daily, weekly, monthly of yearly. |
elevation | float (m) | — | Werkelijke maaiveldhoogte van uw locatie. Verschuift de reeks van de hoogte van de cel naar de uwe — zie hieronder. |
format | string | json | json of csv. CSV is voorbehouden aan de betaalde abonnementen. |
{
"location": {
"latitude": 36.75, "longitude": 3.06,
"grid_cell": { "latitude": 36.7, "longitude": 3.1,
"distance_km": 6.61, "resolution_km": 9 }
},
"parameters": {
"base_temperature_c": 18.0, "method": "hourly",
"start": "2025-07-01", "end": "2026-06-30"
},
"totals": { "hdd": 781.86, "cdd": 1331.61 },
"quality": {
"days": 365, "coverage": 1.0,
"missing_hours": 0, "provisional_days": 0
},
"breakdown": [ { "year": 2025, "month": 7, "hdd": 0.0, "cdd": 289.4, "days": 31 } ]
}
Het quality-blok is geen versiering. Een
coverage onder 1.0 betekent dat er uren in het archief ontbraken.
provisional_days telt de dagen die uit de verwachting zijn gevuld in
plaats van uit de definitieve heranalyse, omdat ERA5-Land met ongeveer vijf dagen
vertraging publiceert.
Als u een contract op deze cijfers afrekent, controleer dan beide. Een totaal
berekend over een dekking van 0,98 is niet verkeerd, maar het is niet dezelfde
bewering als een over 1,0 — en het verschil is onzichtbaar in
totals.
Wat een graaddag is, in één alinea
Een verwarmingsgraaddag meet hoe ver onder een basistemperatuur de buitenlucht
bleef, en hoe lang. Bij basis 18 °C draagt een uur op 16 °C
(18 − 16) / 24 = 0.083 verwarmingsgraaddagen bij. Tel de uren op en u
hebt een getal dat evenredig is met de energie die een gebouw nodig had.
Koelgraaddagen zijn het spiegelbeeld: hoe ver boven de basis. Het is de
gangbare manier om het ene stookseizoen met het andere te vergelijken nadat het
weer uit de vergelijking is gehaald.
Veel basiswaarden, één verzoek, één prijs#
djusame as one baseTot 60 basistemperaturen in één aanroep, voor de prijs van één.
Het lezen en decoderen van de uurreeks vormt de volledige kostprijs van een graaddagen-antwoord. Zodra die array in het geheugen staat, is een extra basiswaarde slechts een aftrekking erover: er zestig opvragen kost wat er één opvragen kost.
Het antwoord krijgt een by_base-array met elke basiswaarde in de
volgorde waarin u ze hebt opgesomd. totals en
breakdown blijven de eerste beschrijven, zodat code die
vóór dit bestond nog ongewijzigd werkt.
"by_base": [
{"base": 15.0, "hdd": 402.11, "cdd": 1731.4},
{"base": 15.5, "hdd": 431.02, "cdd": 1706.3},
{"base": 18.0, "hdd": 781.86, "cdd": 1331.6}
]
Handig wanneer u nog niet weet welke basiswaarde de cijfers van een contract reproduceert, of wanneer hetzelfde gebouw door verschillende partijen op verschillende basiswaarden wordt afgerekend — een verhuurder op 15,5 en een energieleverancier op 18 hebben allebei gelijk, en dit geeft beide in één aanroep terug.
Rekenmethoden#
dju2 credits, +1 per volledige periode van 365,25 dagen in het bereikAlle vier de methoden over dezelfde periode, naast elkaar.
De methodedefinities en hun voorinstellingen. Geen sleutel nodig.
De methode is een parameter omdat uw contract dat beslist, niet wij. Dezelfde data, dezelfde basis, hetzelfde jaar, in Algiers:
| Methode | HDD 18 °C | CDD 18 °C | Wanneer te gebruiken |
|---|---|---|---|
hourly | 781.9 | 1331.6 | Standaard. Integreert het uurlijkse tekort — fysisch het meest getrouw. |
costic | 741.7 | 1349.5 | Franse DJU unifiés. Vereist door Franse contracten voor energieprestatie. |
mean | 659.9 | 1267.8 | Daggemiddelde ten opzichte van de basis. De meest verbreide internationale conventie. |
eurostat | 587.7 | 656.6 | Europese statistiek. De drempels liggen vast in de definitie en negeren base. |
Uurlijks en daggemiddelde verschillen 18 % op dezelfde
data. Dat is geen afrondingsverschil — dat is het verschil tussen het
winnen en verliezen van een discussie over een energierekening. Kies de methode
die de cijfers van uw contract reproduceert voordat u zich op een
abonnement vastlegt; daarvoor is compare-methods er, en het kost één
verzoek.
eurostat negeert base volledig: de definitie legt
haar eigen drempels vast, en uw parameter honoreren zou een getal opleveren dat
geen Eurostat-graaddag is terwijl het beweert er een te zijn.
/v1/methods heeft geen sleutel nodig. Gebruik het om een
methodekiezer in uw interface te vullen zonder iets uit te geven, en zonder een
lijst hard in te coderen die veroudert.
Graaddagen per stad#
dju2 credits, +1 per volledige periode van 365,25 dagen in het bereikHetzelfde, met de tijdzone van de stad en haar stedelijk-hitte-eilandcorrectie.
Past twee correcties toe die een kale coördinaat niet toelaat: de tijdzone van de stad, zodat dagen lokaal worden afgesneden, en haar gekalibreerde stedelijk-hitte-eilandverschuiving.
De heranalyse leest bebouwde gebieden 1 tot 3 °C te laag. Dat vertekent koelgraaddagen naar beneden — relevant als u een airconditioning dimensioneert, en onzichtbaar als u niet weet dat u ernaar moet zoeken.
elevation wordt op dit pad niet toegepast, en
die weglating is opzettelijk. De stadsverschuiving is al berekend tegen stations
die genormaliseerd zijn naar de eigen hoogte van de stad, dus een tweede
gradiëntcorrectie zou dezelfde hoogte dubbel tellen — in dezelfde richting, en
plausibel genoeg dat niemand het zou opmerken. Hebt u de hoogte van een specifiek
gebouw nodig, gebruik dan het coördinaat-endpoint met elevation en
zie af van de hitte-eilandcorrectie.
Graaddagen voor uw gebouw, niet voor de rastercel#
djusameGradiëntcorrectie van de maaiveldhoogte van de cel naar de uwe.
Een weerstation staat op de hoogte waar het staat, en niemand kan het 600 m hoger tegen de dalwand voor u verplaatsen. Onze bron is een model: de maaiveldhoogte van de cel is dus een getal in het archief, en het verschil is rekenwerk — 0,65 °C per 100 m. Over een stookseizoen is dat geen afrondingsfout.
Op uitdrukkelijk verzoek, en het antwoord zegt precies wat het heeft gedaan:
"elevation": {
"applied": true,
"model_elevation_m": 42.0,
"location_elevation_m": 1200,
"temperature_offset_c": -7.53,
"caveat": "Lapse-rate correction. It assumes temperature falls smoothly with
height, which a valley floor under a winter inversion does not."
}
Het voorbehoud reist mee in het antwoord in plaats van alleen op deze pagina te staan, omdat degene die die JSON over zes maanden leest niet degene is die de documentatie heeft gelezen.
Een cel vastzetten, zodat een basislijn vergelijkbaar blijft#
dju1 creditWelke cel voor een punt zou antwoorden, en hoe ver die weg ligt.
dju2 credits, +1 per volledige periode van 365,25 dagen in het bereikGraaddagen voor een benoemde cel — nooit een zoektocht naar de dichtstbijzijnde cel.
Elke andere manier om een locatie aan te duiden start de zoektocht naar de dichtstbijzijnde cel bij elk verzoek opnieuw: het antwoord hangt dus af van wat het archief vandaag bevat. Dat is de juiste standaard voor een eenmalige opzoeking, en de verkeerde voor een basislijn — een vergelijking over meerdere jaren is alleen een vergelijking als elk jaar van dezelfde plek komt.
Naarmate het archief zich uitbreidt verandert de dichtstbijzijnde cel bij een gegeven locatie — een verbetering van de dekking die anders als een onverklaarde stap in uw data zou binnenkomen.
# eenmalig, bij de inrichting
GET /v1/cells/resolve?lat=45.19&lon=5.72
→ { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }
# elke keer daarna
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31
distance_km is 0 bij een vastgezet verzoek, per
constructie: u hebt de cel benoemd, dus er is niets voor in de plaats gezet. Een
cel die niet meer bestaat geeft 404 cell_not_found terug in plaats
van stilletjes terug te vallen op een buur — wat precies de vervanging zou
herintroduceren die u met vastzetten wilde vermijden.
/v1/cells/resolve is ook de goedkope manier om vóór het
betalen voor data te ontdekken dat de dichtstbijzijnde cel 60 km verderop ligt.
Het decodeert niets en leest geen enkele tijdreeks, en is daarom op één credit
geprijsd.
Uitsplitsingsperioden#
djusameHetzelfde verzoek aggregeren naar de periode waarop uw contract afrekent.
Elk graaddagen-antwoord draagt een breakdown-array die is
geaggregeerd naar de periode die u opvraagt. Contracten rekenen op verschillende
perioden af, dus alle vier zijn beschikbaar op hetzelfde verzoek voor dezelfde
prijs.
| Periode | Elke rij draagt |
|---|---|
daily | datum, verwarmings- en koelgraaddagen, min./max./gemiddelde temperatuur |
weekly | ISO-jaar en -week, de begindatum, de totalen |
monthly | jaar, maand, totalen — de standaard |
yearly | jaar, totalen |
Weken zijn ISO-weken, dus een week hoort bij het jaar dat haar donderdag bevat. 1 januari 2023 valt in week 52 van 2022, en daar rapporteren wij hem — wat uw spreadsheet ook zal doen, en het oneens zijn met de spreadsheet is hoe een afstemmingsoverleg begint.
Elke emmer draagt daarnaast days, zodat een gedeeltelijke maand
aan de rand van uw bereik zichtbaar is in plaats van stilletjes te kort. Een
februari met "days": 12 is een februari die u niet met een volledige
moet vergelijken.
Maandtotalen voor een jaar#
dju2 creditsTwaalf maandtotalen voor één kalenderjaar, zonder dagreeks.
Wat het archief bevat: eerste en laatste dag met data, en de as waarin het zal groeien. Geen sleutel nodig.
Een kortere weg voor het gangbare geval:
?lat=&lon=&year=2025 en er komen twaalf rijen terug.
Dezelfde data als /v1/degree-days?breakdown=monthly over hetzelfde
bereik; minder parameters om fout te doen.
/v1/coverage meldt de eerste en laatste dag van het archief en de
resolutie ervan, heeft geen sleutel nodig, en is het juiste om te controleren
voordat u een periode dicht bij de huidige rand opvraagt — ERA5-Land loopt
ongeveer vijf dagen achter, en provisional_days in uw antwoord is
daarvan het gevolg.
{
"start": "1950-01-01",
"end": "2026-07-29", // laatste dag die data BEVAT
"axis_end": "2026-12-31", // waar deze run zal ophouden te groeien
"hours": 671256, "axis_hours": 674976,
"cells": 86274, "resolution_km": 9.0,
"run": "world-1950-2026-p1000"
}
end en axis_end zijn verschillende vragen,
en alleen de eerste gaat over data. Een run wordt geschreven tegen de
hele kalender die hij uiteindelijk zal vullen — het archief 1950-2026 reserveert
elk uur tot 31 december 2026 — en de aanvulling vult hem naarmate Copernicus
publiceert.
Tot 03-08-2026 meldde dit endpoint de as als end, en schreef het
archief zo ongeveer vijf maanden aan uren toe die leeg waren. end is
wat u vandaag kunt opvragen; een verzoek dat er volledig voorbij ligt geeft een
404 outside_archive in plaats van een welgevormd antwoord dat
optelt tot nul.
CSV-export#
dju4× the JSON callDe uitsplitsingsrijen als CSV-bestand. Alleen betaalde abonnementen.
Voeg format=csv toe aan elk graaddagen-verzoek. U krijgt de
breakdown-rijen als CSV-bestand, genoemd naar de locatie en de data,
zodat het zes maanden later in een downloadmap nog herkenbaar is.
year,month,hdd,cdd,days,t_mean,coverage,provisional
2024,1,205.03,2.88,31,11.48,1.0,false
2024,2,168.44,4.10,29,12.31,1.0,false
Alleen betaalde abonnementen, en begrensd: hetzelfde maximale
bereik als een JSON-verzoek, alleen geaggregeerde rijen — nooit de uurreeks — en
het kost vier credits voor elke credit die de gelijkwaardige JSON-aanroep kost.
Een gratis sleutel krijgt 402 export_not_in_plan.
Dat is opzet, en niet met tegenzin toegestaan. Waar u voor betaalt is het archief, en een onbegrensde export is de manier waarop een concurrent het op één middag verwerft. Juist die grenzen maken dat het formaat überhaupt kan bestaan.
Uurlijkse historie#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Het heranalyse-archief ruw geleverd: uurlijks weer tot 1950.
Parameters
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
lat | float | — | Verplicht. |
lon | float | — | Verplicht. |
start | ISO date | — | Het bereik van één verzoek is begrensd — zie Abonnementen. |
end | ISO date | — | |
variables | csv | een verstandige deelverzameling | Vraag aan /v1/historical/variables wat dit archief bevat. |
hourly | bool | true | De reeks uur voor uur meesturen. |
daily | bool | false — true voor steden | Dagaggregaten meesturen, afgesneden op lokale kalenderdagen. |
Hetzelfde archief waaruit de graaddagen worden opgebouwd, rechtstreeks
geleverd: uurlijks, tot 1950, op een raster van 9 km, overal op het land.
Dezelfde host en dezelfde dju-scope — wie graaddagen kan aanroepen,
kan dit ook aanroepen.
Vandaag bevat dit archief de temperatuur en verder niets. Het is ingenomen voor de graaddagen, en graaddagen hebben één variabele nodig. Deze pagina beloofde tot 03-08-2026 „luchtvochtigheid, wind, neerslag en zonnestraling”, en het archief heeft daarvan nooit iets bevat.
/v1/historical/variables is het antwoord dat altijd actueel is —
het leest de gepromoveerde run in plaats van deze zin, heeft geen sleutel nodig
en kost niets. Roep het aan voordat u op een veld bouwt.
Wat het de moeite van het betalen waard maakt, is de consistentie. Het register van een weerstation draagt elke verplaatsing, elke instrumentwissel en elke lacune in zijn geschiedenis met zich mee: een dertigjarige trend die daaruit is berekend is dus deels een trend in de instrumentatie. Een heranalyse heeft daar niets van — het model is voor elk jaar in het register hetzelfde model.
Voor dagwaarden over een lange periode, of voor normalen en trends, gebruik in plaats daarvan de Klimaat-API — die houdt de dagvelden al afgeleid bij, heeft geen grens bij 9 km of 1950, en beantwoordt een hele klimatologie in één aanroep.
Historie per stad#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Identiek, met de tijdzone van de stad en haar hitte-eilandcorrectie.
Twee dingen die een coördinaat niet kan dragen: de tijdzone van de stad, zodat
de dagen worden afgesneden waar de stad ze werkelijk beleeft, en haar
gekalibreerde stedelijk-hitte-eilandcorrectie. daily staat hier
standaard op true, omdat een stadsverzoek vrijwel altijd een verzoek over dagen
is.
Beschikbare variabelen#
Wat het archief momenteel bevat, met eenheden, en welke velden afgeleid zijn. Geen sleutel nodig.
Somt op wat het archief op dit moment bevat, met eenheden, en welke
velden afgeleid zijn in plaats van opgeslagen. Een archief dat alleen voor
graaddagen is ingenomen bevat uitsluitend de temperatuur, en dit endpoint zegt
dat ronduit in plaats van kolommen null terug te geven.
Sommige velden worden berekend in plaats van opgeslagen: de luchtvochtigheid
uit het dauwpunt, de windsnelheid en -richting uit de u- en v-componenten.
Opslaan wat in microseconden te berekenen is zou het archief voor niets een derde
groter maken — maar een afgeleid veld verschijnt alleen wanneer zijn
bronnen in de run zitten, en daarom is dit endpoint, en niet een op een
pagina geschreven lijst, de waarheid over wat u kunt opvragen. In het vandaag
gepromoveerde archief ontbreken de bronnen, dus het antwoord is uitsluitend
temperature_2m.