climatememory programiści

Dokumentacja API

API Klimat

Osiemdziesiąt siedem lat klimatu dobowego, wszędzie na lądzie, z jednego archiwum — od 1 stycznia 1940 roku po ostatni tydzień, na siatce ERA5 w 0,25° (około 28 km). Odpowiada na pytanie czy to jest normalne?, wraz z dowodami.

Klimat dobowy#

GEThttps://api.climatememory.com/v1/climate/dailyscope: climate2 kredytów, +1 za każdy pełny okres 365,25 dni w zakresie

Trzynaście pól dobowych dla dowolnej lądowej współrzędnej, od 1940 roku po zeszły tydzień.

Parametry

ParametrTypDomyślnieOpis
latfloatWymagane. Dowolna współrzędna na lądzie; archiwum jest globalne.
lonfloatWymagane.
startISO date1 stycznia roku końcowegoZakres ma pułap na żądanie — zobacz Plany.
endISO dateostatni dzień archiwum
fieldscsvtemperatura i opadZapytaj /v1/climate/fields, na co ten przebieg potrafi odpowiedzieć.
seriesbooltrueDołącz wartości dzień po dniu. Ustaw na false, gdy chcesz tylko agregaty.
formatstringjsonjson albo csv. CSV to funkcja planów płatnych i zwraca wiersze miesięczne.

To nie jest historia godzinowa z GROUP BY z przodu. Pola dobowe są wyprowadzane raz, przy wciąganiu danych, na granicy doby wybranej ze względu na fizykę, a nie na wygodę, a pola pochodne — temperatura odczuwalna, usłonecznienie, średnia wilgotność — są liczone z pełnego szeregu godzinowego, a nie z dobowych ekstremów.

Doby są cięte o północy słonecznej, a nie według politycznej strefy czasowej. Przesunięcie to round(longitude / 15).

To wybór celowy i mierzalny: agregowanie po UTC zaniża dobowe minimum o 2,1 °C w Alice Springs, bo minimum wypada tuż przed świtem. Polityczna strefa czasowa byłaby jeszcze gorsza — dwie sąsiednie komórki po obu stronach granicy miałyby doby cięte w różnych momentach, a mapa dobowych maksimów rysowałaby kontur stref czasowych.

Wartości należą do komórki siatki, a nie do punktu. Nie dostrajamy temperatury do twojej dokładnej wysokości. Dostawcy, którzy to robią, będą się więc od nas różnić o kilka dziesiątych stopnia przy tej samej współrzędnej — do 0,4 °C w naszych własnych pomiarach — i żadna z tych liczb nie jest błędna. Nasza to, co reanaliza mówi o tej komórce; ich to ta wartość plus gradient pionowy zastosowany do różnicy wysokości. Publikujemy komórkę, żebyś wiedział, co dostajesz: zobacz pokrycie i komórki.

Agregaty miesięczne#

GEThttps://api.climatememory.com/v1/climate/monthlyscope: climate2 kredytów, +1 za każdy pełny okres 365,25 dni w zakresie

Te same pola zagregowane po miesiącach kalendarzowych.

Sumy dla wielkości kumulowanych, średnie i ekstrema dla reszty. Ta sama cena co szereg dobowy, bo czyta tę samą kolumnę.

Poproś o nie, gdy to wartość miesięczna jest tym, co naprawdę rysujesz, zamiast ściągać trzydzieści razy więcej danych i redukować je samodzielnie — wolny jest transfer, a nie arytmetyka.

Klimat miejsca, w jednym wywołaniu#

GEThttps://api.climatememory.com/v1/climate/summaryscope: climate3 kredytów, +1 za każdy pełny okres 365,25 dni w zakresie

Normy miesięczne, szereg roczny, rekordy, trendy i Köppen — bez limitu zakresu.

Parametry

ParametrTypDomyślnieOpis
latfloatWymagane.
lonfloatWymagane.
startISO datepierwszy dzień archiwumPoproszenie o cały zapis to normalny sposób używania tego endpointu.
endISO dateostatni dzień archiwum
dailyboolfalseDodaje day_normals: normę każdego dnia kalendarzowego roku w twoim oknie, wraz z liczbą obserwacji stojących za każdą z nich.

Wszystko, co strona klimatyczna mówi o danym miejscu, już zredukowane: dwanaście norm miesięcznych, jeden wiersz na każdy pełny rok kalendarzowy, rekordy wszech czasów z datami, w których padły, trend ocieplenia metodą najmniejszych kwadratów wraz z jego istotnością oraz kod Köppena-Geigera. Dla dowolnej lądowej współrzędnej na Ziemi.

Cena zależy od zakresu, a domyślnym zakresem jest całe archiwum. Wycenione na 3 kredytów, +1 za każdy pełny okres 365,25 dni w zakresie — więc wywołanie bez start obejmuje okres od 1940 do dziś i kosztuje 89 kredytów, a nie jeden. W planie darmowym to jakieś 110 wywołań miesięcznie.

To i tak tani sposób na tę odpowiedź: złożenie jej samodzielnie zajęłoby dziewięć limitowanych wywołań /v1/climate/daily na tym samym zakresie, które razem kosztują więcej i zwracają trzydzieści jeden tysięcy wierszy, które trzeba jeszcze zredukować. Ale to nie jest zwykłe sprawdzenie, a strona wywołująca to przy każdym odwiedzającym opróżni przydział. Zbuforuj to — odpowiedź dla współrzędnej zmienia się najwyżej raz dziennie.

Podaj start, gdy nie potrzebujesz całego zapisu: trzydzieści lat kosztuje 32 zamiast 89.

Tutaj nie ma limitu zakresu, w odróżnieniu od /v1/climate/daily. Tamten limit istnieje, bo wywołujący, który potrafi ściągnąć szereg dzień po dniu, może odtworzyć archiwum; ten endpoint nie zwraca żadnego szeregu. Pełny zapis wraca w około 62 kB — 100 kB z daily=true — wobec trzydziestu jeden tysięcy wierszy dobowych, z których został zredukowany, więc nie odtwarza niczego. Jedno żądanie zastępuje dziewięć limitowanych wywołań dobowych, których ta sama odpowiedź inaczej by wymagała.

daily=true to nie to samo co normals?daily=true

I w tej różnicy tkwi sedno. Endpoint norm uśrednia po trzydziestoletnim oknie WMO; ten uśrednia po oknie, o które poprosiłeś — domyślnie po całym archiwum.

To jedyny sposób, żeby powiedzieć „9,4 °C powyżej normy jak na 30 lipca” z osiemdziesięcioma siedmioma latami za tym twierdzeniem, a nie trzydziestoma. Każdy dzień niesie swoją liczbę próbek, więc poszerzenie do piętnastodniowej normy centrowanej zapisuje się jako Σ(mean·samples) / Σ(samples) — dokładnie i bez drugiego żądania.

Dwie konwencje, które warto znać przed porównaniem z innym źródłem

Rok kalendarzowy wchodzi do szeregu rocznego i do trendu tylko wtedy, gdy archiwum ma co najmniej 360 jego dni, więc rok bieżący jest wyłączony. Pół roku czyta się jak załamanie opadów i ciągnie za sobą linię trendu.

trends jest równe null poniżej dziesięciu pełnych lat. Poniżej tego nachylenie to szum pogodowy przebrany za sygnał klimatyczny, a wolimy nie publikować nic niż pewną siebie błędną liczbę. Z tego samego powodu każdy trend niesie własne p_value i flagę significant — przeczytaj je, zanim zacytujesz nachylenie.

Normy WMO#

GEThttps://api.climatememory.com/v1/climate/normalsscope: normals3 kredytów

Trzydziestoletnia średnia z okresu referencyjnego WMO.

Parametry

ParametrTypDomyślnieOpis
latfloatWymagane.
lonfloatWymagane.
periodstring1991-20201991-2020 albo 1961-1990. Oba są okresami referencyjnymi WMO.
fieldscsvtemperatura i opad
dailyboolfalseDołącz 366 norm dobowych wraz z ich rozrzutami oraz rekord ciepła i chłodu dla każdego dnia kalendarzowego.

Norma to nie średnia z okresu, o który akurat poprosiłeś. To średnia trzydziestoletnia z okna ustalonego przez Światową Organizację Meteorologiczną, tak żeby dwie osoby cytujące normę cytowały to samo.

To wymaga scope'u normals, którego dobowe archiwum nie wymaga. Klucz, który bez problemu czyta /v1/climate/daily, może tu i tak dostać 403 scope_denied — zobacz Plany, żeby sprawdzić, który poziom go obejmuje.

Jeśli chodzi ci o „normę z całego zapisu”, a nie z okna WMO, użyj raczej /v1/climate/summary — wymaga tylko scope'u climate i daje osiemdziesiąt siedem lat zamiast trzydziestu.

Porównanie dwóch norm#

GEThttps://api.climatememory.com/v1/climate/normals/comparescope: normals6 kredytów

Oba okresy WMO i zmiana między nimi, w jednym wywołaniu.

To pytanie, które większość ludzi naprawdę zadaje, prosząc o normę — nie „co jest tu normalne”, ale „o ile normalne się przesunęło”.

Odpowiedź w jednym żądaniu gwarantuje, że obie połowy nie mogą pochodzić z różnych przebiegów, a to właśnie tryb awarii liczenia tego samemu z dwóch wywołań: archiwum posuwa się między nimi, a różnica, którą publikujesz, zawiera wtedy zmianę wersji obok zmiany klimatu.

Pokrycie, pola i komórki#

GEThttps://api.climatememory.com/v1/climate/coverageklucz niepotrzebny1 kredyt

Serwowany przebieg i daty, które obejmuje. Klucz niepotrzebny.

GEThttps://api.climatememory.com/v1/climate/fieldsklucz niepotrzebny1 kredyt

Na co ten przebieg potrafi odpowiedzieć, z jednostkami, i które pola są wyprowadzane. Klucz niepotrzebny.

GEThttps://api.climatememory.com/v1/climate/cells/resolvescope: climate1 kredyt

Która komórka odpowiada za punkt i jak daleko leży.

GEThttps://api.climatememory.com/v1/climate/licensingklucz niepotrzebny0 kredytów

Warunki licencji tego archiwum. Klucz niepotrzebny.

cells/resolve odpowiada na pytanie, które należałoby zadać każdemu produktowi siatkowemu, zanim się mu zaufa: którą komórkę tak naprawdę czytam i jak daleko jest od punktu, o który pytałem? Przy 28 km ta odległość może wynieść 20 km, a jej znajomość to różnica między zacytowaniem liczby a zacytowaniem jej odpowiedzialnie.

fields ma ten sam kontrakt co /v1/historical/variables: wypisuje, co zawiera przebieg, a nie co produkt kiedyś może zawierać, więc klient zbudowany na nim nie psuje się, gdy archiwum urośnie.

Przypnij komórkę zamiast współrzędnej, gdy punkt odniesienia musi pozostać porównywalny przez lata. Współrzędna jest stabilna, ale komórka, która ją obsługuje, przesunęłaby się, gdyby siatka kiedyś się zmieniła — a punkt odniesienia, który po cichu się przesuwa, to właśnie ten tryb awarii, któremu ten endpoint ma zapobiegać. API stopniodni ma ten sam wzorzec, z dedykowaną ścieżką: zobacz przypinanie komórki.