climatememory entwickler

API-Referenz

Klima-API

Siebenundachtzig Jahre Tagesklima, überall an Land, aus einem einzigen Archiv — vom 1. Januar 1940 bis auf eine Woche an heute heran, auf dem ERA5-Gitter mit 0,25° (etwa 28 km). Beantwortet ist das normal?, mit Belegen.

Tagesklima#

GEThttps://api.climatememory.com/v1/climate/dailyScope: climate2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Dreizehn Tagesfelder für jede Landkoordinate, von 1940 bis zur vergangenen Woche.

Parameter

ParameterTypStandardBeschreibung
latfloatErforderlich. Jede Koordinate an Land; das Archiv ist weltweit.
lonfloatErforderlich.
startISO date1. Januar des EndjahresDie Spanne ist je Anfrage begrenzt — siehe Tarife.
endISO dateletzter Tag des Archivs
fieldscsvTemperatur und NiederschlagFragen Sie /v1/climate/fields, worauf dieser Lauf antworten kann.
seriesbooltrueDie Werte Tag für Tag mitliefern. Auf false setzen, wenn Sie nur die Aggregate brauchen.
formatstringjsonjson oder csv. CSV ist den bezahlten Tarifen vorbehalten und liefert die Monatszeilen.

Das ist nicht die stündliche Historie mit einem GROUP BY davor. Die Tagesfelder werden ein einziges Mal abgeleitet, bei der Aufnahme, an einer Tagesgrenze, die nach der Physik und nicht nach der Bequemlichkeit gewählt ist, und die abgeleiteten Felder — gefühlte Temperatur, Sonnenscheindauer, mittlere Luftfeuchte — werden aus der vollständigen Stundenreihe berechnet und nicht aus den Tagesextremen.

Die Tage werden an der wahren Mitternacht geschnitten, nicht an der politischen Zeitzone. Der Versatz beträgt round(longitude / 15).

Das ist eine bewusste Entscheidung, und sie ist messbar: eine Aggregation auf UTC verzerrt das Tagesminimum in Alice Springs um 2,1 °C, weil das Minimum kurz vor Sonnenaufgang fällt. Eine politische Zeitzone wäre noch schlechter — zwei benachbarte Zellen beiderseits einer Grenze bekämen ihre Tage zu unterschiedlichen Zeitpunkten geschnitten, und eine Karte der Tagesmaxima würde den Umriss der Zeitzonen zeigen.

Die Werte gehören der Gitterzelle, nicht dem Punkt. Wir passen die Temperatur nicht an Ihre exakte Höhe an. Anbieter, die das tun, weichen an derselben Koordinate deshalb um einige Zehntelgrad von uns ab — in unseren eigenen Messungen bis zu 0,4 °C — und keiner der beiden Werte ist falsch. Unserer ist das, was die Reanalyse für diese Zelle sagt; ihrer ist derselbe Wert plus ein auf einen Höhenunterschied angewandter Temperaturgradient. Wir veröffentlichen die Zelle, damit Sie erkennen können, was Sie bekommen: siehe Abdeckung und Zellen.

Monatsaggregate#

GEThttps://api.climatememory.com/v1/climate/monthlyScope: climate2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Dieselben Felder, nach Kalendermonat aggregiert.

Summen für die Kumulate, Mittel und Extreme für den Rest. Gleicher Preis wie die Tagesreihe, denn gelesen wird dieselbe Spalte.

Fragen Sie sie an, wenn Sie tatsächlich einen Monatswert darstellen, statt das Dreißigfache an Daten zu holen und selbst zu reduzieren — langsam ist die Übertragung, nicht die Rechnung.

Das Klima eines Ortes, in einem Aufruf#

GEThttps://api.climatememory.com/v1/climate/summaryScope: climate3 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Monatsnormalwerte, Jahresreihe, Rekorde, Trends und Köppen — ohne Begrenzung der Spanne.

Parameter

ParameterTypStandardBeschreibung
latfloatErforderlich.
lonfloatErforderlich.
startISO dateerster Tag des ArchivsDen gesamten Datensatz anzufragen ist die normale Verwendung.
endISO dateletzter Tag des Archivs
dailyboolfalseErgänzt day_normals: den Normalwert jedes Tages des Jahres über Ihr Fenster, mit der Zahl der Beobachtungen hinter jedem einzelnen.

Alles, was eine Klimaseite über einen Ort aussagt, bereits reduziert: zwölf Monatsnormalwerte, eine Zeile je vollständigem Kalenderjahr, die Allzeitrekorde mit den Daten, an denen sie fielen, der Kleinste-Quadrate-Erwärmungstrend samt Signifikanz und der Köppen-Geiger-Code. Für jede Landkoordinate der Erde.

Der Preis richtet sich nach der Spanne, und die Standardspanne ist das gesamte Archiv. Bepreist mit 3 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne — ein Aufruf ohne start umfasst also 1940 bis heute und kostet 89 Credits, nicht einen. Im kostenlosen Tarif sind das etwa 110 Aufrufe im Monat.

Das ist immer noch der günstige Weg zu dieser Antwort: sie selbst zusammenzusetzen erforderte neun begrenzte Aufrufe von /v1/climate/daily über dieselbe Spanne, die zusammen mehr kosten und einunddreißigtausend Zeilen zurückgeben, die Sie dann noch reduzieren müssen. Aber es ist keine einfache Abfrage, und eine Seite, die ihn je Besucher aufruft, leert ein Kontingent. Legen Sie die Antwort in den Cache — für eine Koordinate ändert sie sich höchstens einmal am Tag.

Übergeben Sie start, wenn Sie nicht den ganzen Datensatz brauchen: dreißig Jahre kosten 32 statt 89.

Hier gibt es keine Begrenzung der Spanne, anders als bei /v1/climate/daily. Jene Grenze besteht, weil ein Aufrufer, der die Reihe Tag für Tag ziehen kann, das Archiv nachbauen kann; dieser Endpunkt gibt überhaupt keine Reihe zurück. Der vollständige Datensatz kommt mit etwa 62 kB zurück — 100 kB mit daily=true — gegenüber den einunddreißigtausend Tageszeilen, aus denen er reduziert wurde: er rekonstruiert also nichts. Eine Anfrage ersetzt die neun begrenzten Tagesaufrufe, die dieselbe Antwort sonst kosten würde.

daily=true ist nicht dasselbe wie normals?daily=true

Und genau darin liegt der Unterschied. Der Normalwert-Endpunkt mittelt über ein dreißigjähriges WMO-Fenster; dieser mittelt über das Fenster, das Sie angefragt haben — standardmäßig das ganze Archiv.

Nur so lässt sich „9,4 °C über dem Normalwert für einen 30. Juli“ sagen, mit siebenundachtzig Jahren statt dreißig hinter der Aussage. Jeder Tag trägt seine Stichprobenzahl, sodass die Erweiterung auf einen zentrierten Fünfzehn-Tage-Normalwert Σ(mean·samples) / Σ(samples) lautet — exakt, und ohne zweite Anfrage.

Zwei Konventionen, die Sie vor einem Vergleich mit anderen Quellen kennen sollten

Ein Kalenderjahr geht nur dann in die Jahresreihe und den Trend ein, wenn das Archiv mindestens 360 seiner Tage enthält; das laufende Jahr ist damit ausgeschlossen. Ein halbes Jahr liest sich wie ein Einbruch des Niederschlags und zieht eine Trendgerade mit sich.

trends ist unterhalb von zehn vollständigen Jahren null. Darunter ist eine Steigung nur Wetterrauschen im Gewand eines Klimasignals, und wir veröffentlichen lieber nichts als eine selbstbewusst falsche Zahl. Aus demselben Grund trägt jeder Trend seinen eigenen p_value und sein significant-Flag — lesen Sie beide, bevor Sie die Steigung zitieren.

WMO-Normalwerte#

GEThttps://api.climatememory.com/v1/climate/normalsScope: normals3 Credits

Ein dreißigjähriges Mittel über einen WMO-Referenzzeitraum.

Parameter

ParameterTypStandardBeschreibung
latfloatErforderlich.
lonfloatErforderlich.
periodstring1991-20201991-2020 oder 1961-1990. Beides sind WMO-Referenzzeiträume.
fieldscsvTemperatur und Niederschlag
dailyboolfalseDie 366 Tagesnormalwerte mit ihren Streuungen sowie den Höchst- und Tiefstrekord jedes Kalendertages mitliefern.

Ein Normalwert ist nicht der Mittelwert irgendeines Zeitraums, den Sie zufällig angefragt haben. Er ist ein dreißigjähriges Mittel über ein Fenster, das die Weltorganisation für Meteorologie festlegt, damit zwei Menschen, die einen Normalwert zitieren, dasselbe zitieren.

Dies erfordert den Scope normals, den das Tagesarchiv nicht verlangt. Ein Schlüssel, der /v1/climate/daily problemlos liest, kann hier dennoch ein 403 scope_denied bekommen — unter Tarife steht, welche Stufe ihn enthält.

Wenn Sie „den Normalwert über den gesamten Datensatz“ statt über ein WMO-Fenster wollen, verwenden Sie /v1/climate/summary — er braucht nur den Scope climate und gibt Ihnen siebenundachtzig statt dreißig Jahre.

Zwei Normalwerte vergleichen#

GEThttps://api.climatememory.com/v1/climate/normals/compareScope: normals6 Credits

Beide WMO-Zeiträume und die Veränderung dazwischen, in einem Aufruf.

Das ist die Frage, die die meisten eigentlich stellen, wenn sie nach einem Normalwert fragen — nicht „was ist hier normal“, sondern „wie weit hat sich das Normale verschoben“.

Sie in einer einzigen Anfrage zu beantworten stellt sicher, dass die beiden Hälften nicht aus verschiedenen Läufen stammen können — genau das ist die Schwachstelle, wenn man es selbst aus zwei Aufrufen berechnet: das Archiv rückt dazwischen vor, und der Unterschied, den Sie veröffentlichen, enthält dann neben einer Klimaänderung auch einen Versionswechsel.

Abdeckung, Felder und Zellen#

GEThttps://api.climatememory.com/v1/climate/coveragekein Schlüssel nötig1 Credit

Der ausgelieferte Lauf und die Daten, die er umfasst. Kein Schlüssel nötig.

GEThttps://api.climatememory.com/v1/climate/fieldskein Schlüssel nötig1 Credit

Worauf dieser Lauf antworten kann, mit Einheiten, und welche Felder abgeleitet sind. Kein Schlüssel nötig.

GEThttps://api.climatememory.com/v1/climate/cells/resolveScope: climate1 Credit

Welche Zelle für einen Punkt antwortet und wie weit sie entfernt ist.

GEThttps://api.climatememory.com/v1/climate/licensingkein Schlüssel nötig0 Credits

Die Lizenzbedingungen dieses Archivs. Kein Schlüssel nötig.

cells/resolve beantwortet die Frage, die man jedem Gitterprodukt stellen sollte, bevor man ihm traut: welche Zelle lese ich eigentlich, und wie weit ist sie von dem Punkt entfernt, nach dem ich gefragt habe? Bei 28 km kann dieser Abstand 20 km betragen, und ihn zu kennen ist der Unterschied zwischen einer Zahl zitieren und eine Zahl verantwortungsvoll zitieren.

fields bietet denselben Vertrag wie /v1/historical/variables: es listet auf, was der Lauf enthält, und nicht, was das Produkt eines Tages enthalten könnte, sodass ein darauf gebauter Client nicht bricht, wenn das Archiv wächst.

Fixieren Sie die Zelle statt der Koordinate, wenn eine Basislinie über Jahre vergleichbar bleiben muss. Eine Koordinate ist stabil, aber die Zelle, die sie bedient, würde sich verschieben, wenn sich das Gitter je änderte — und eine Basislinie, die sich stillschweigend verschiebt, ist genau der Fehler, den dieser Endpunkt verhindern soll. Die Gradtag-API folgt demselben Muster, mit einem eigenen Pfad: siehe eine Zelle fixieren.