climatememory المطوّرون

مرجع الـ API

واجهة المناخ

سبع وثمانون سنة من المناخ اليومي، في كل بقاع اليابسة، من أرشيف واحد — من 1 يناير 1940 إلى ما دون الأسبوع من اليوم، على شبكة ERA5 باستبانة 0.25° (نحو 28 كم). يجيب عن سؤال هل هذا معتاد؟، مع الدليل.

المناخ اليومي#

GEThttps://api.climatememory.com/v1/climate/dailyscope: climate2 أرصدة، +1 عن كل مدة كاملة من 365.25 يومًا ضمن المجال

ثلاثة عشر حقلًا يوميًا لأي إحداثية يابسة، من 1940 إلى الأسبوع الماضي.

المعاملات

المعاملالنوعالافتراضيالوصف
latfloatمطلوب. أي إحداثية على اليابسة؛ فالأرشيف عالمي.
lonfloatمطلوب.
startISO date1 يناير من سنة النهايةالمجال مسقوف لكل طلب — انظر الخطط.
endISO dateآخر يوم في الأرشيف
fieldscsvالحرارة والهطولاسأل /v1/climate/fields عمّا يستطيع هذا التشغيل الإجابة عنه.
seriesbooltrueتضمين القيم يومًا بيوم. اجعله false حين لا تريد إلا التجميعات.
formatstringjsonjson أو csv. وCSV ميزة في الخطط المدفوعة ويعيد الصفوف الشهرية.

هذا ليس التاريخ الساعي مسبوقًا بـ GROUP BY. فالحقول اليومية تُشتق مرة واحدة، عند الإدخال، على حدّ يوم اختير للفيزياء لا للراحة، والحقول المشتقة — الحرارة المحسوسة ومدة السطوع والرطوبة المتوسطة — تُحسب من السلسلة الساعية الكاملة لا من القيم القصوى اليومية.

تُقطَّع الأيام عند منتصف الليل الشمسي، لا عند المنطقة الزمنية السياسية. والإزاحة هي round(longitude / 15).

وهذا خيار متعمَّد وقابل للقياس: فالتجميع على التوقيت العالمي يحيز الحد الأدنى اليومي بمقدار 2.1 °م في أليس سبرينغز، لأن الحد الأدنى يقع قبيل الفجر. والمنطقة الزمنية السياسية أسوأ — فخليتان متجاورتان على جانبَي حدّ ستُقطَّع أيامهما في لحظتين مختلفتين، وخريطة القيم العليا اليومية سترسم حدود المناطق الزمنية.

القيم قيم خلية الشبكة لا قيم النقطة. فنحن لا نعدّل الحرارة إلى ارتفاعك بالضبط. والمزودون الذين يفعلون ذلك سيفترقون عنا ببضعة أعشار الدرجة عند الإحداثية نفسها — حتى 0.4 °م في قياساتنا نحن — ولا رقم منهما خاطئ. فرقمنا هو ما تقوله إعادة التحليل عن تلك الخلية؛ ورقمهم هو تلك القيمة مضافًا إليها معدل تناقص حراري مطبَّق على فرق ارتفاع. وننشر الخلية لتعرف أيّهما تحصل عليه: انظر التغطية والخلايا.

التجميعات الشهرية#

GEThttps://api.climatememory.com/v1/climate/monthlyscope: climate2 أرصدة، +1 عن كل مدة كاملة من 365.25 يومًا ضمن المجال

الحقول نفسها مجمَّعة حسب الشهر التقويمي.

مجاميع للكميات التراكمية، ومتوسطات وقيم قصوى لما عداها. وبالسعر نفسه للسلسلة اليومية، لأنه يقرأ العمود نفسه.

اطلبها حين يكون الرقم الشهري هو ما ترسمه فعلًا، بدل جلب ثلاثين ضعف البيانات ثم اختزالها بنفسك — فالبطيء هو النقل لا الحساب.

مناخ مكان، في نداء واحد#

GEThttps://api.climatememory.com/v1/climate/summaryscope: climate3 أرصدة، +1 عن كل مدة كاملة من 365.25 يومًا ضمن المجال

معدلات شهرية وسلسلة سنوية وأرقام قياسية واتجاهات وكوپن — بلا حدّ للمجال.

المعاملات

المعاملالنوعالافتراضيالوصف
latfloatمطلوب.
lonfloatمطلوب.
startISO dateأول يوم في الأرشيفطلب السجل كله هو الاستعمال الطبيعي لهذه النقطة.
endISO dateآخر يوم في الأرشيف
dailyboolfalseيضيف day_normals: معدل كل يوم تقويمي من السنة على نافذتك، مع عدد الأرصاد وراء كل معدل.

كل ما تقوله صفحة مناخ عن موقع، مختزلًا سلفًا: اثنا عشر معدلًا شهريًا، وصف لكل سنة تقويمية كاملة، والأرقام القياسية على الإطلاق مع تواريخ تسجيلها، واتجاه الاحترار بالمربعات الصغرى مع معنويته، ورمز كوپن-غايغر. لأي إحداثية يابسة على الأرض.

السعر بحسب المجال، والمجال الافتراضي هو الأرشيف كله. والتسعير 3 أرصدة، +1 عن كل مدة كاملة من 365.25 يومًا ضمن المجال — فنداء بلا start يغطي من 1940 إلى اليوم ويكلّف 89 رصيدًا لا رصيدًا واحدًا. وعلى الخطة المجانية يعني ذلك نحو 110 نداءات شهريًا.

ويبقى ذلك الطريق الرخيص إلى هذا الجواب: فتركيبه بنفسك كان سيتطلب تسعة نداءات مسقوفة إلى /v1/climate/daily على المجال نفسه، وهي أغلى مجتمعة وتعيد واحدًا وثلاثين ألف صف عليك اختزالها بعد ذلك. لكنه ليس استعلامًا عابرًا، وصفحة تناديه لكل زائر ستفرغ حصة. فخزّنه مؤقتًا — فجواب إحداثية يتغير مرة واحدة يوميًا على الأكثر.

ومرّر start حين لا تحتاج السجل كله: فثلاثون سنة تكلّف 32 بدل 89.

ولا حدّ للمجال هنا، بخلاف /v1/climate/daily. فذلك الحدّ موجود لأن من يستطيع سحب السلسلة يومًا بيوم يستطيع إعادة بناء الأرشيف؛ وهذه النقطة لا تعيد أي سلسلة أصلًا. فالسجل الكامل يعود في نحو 62 كيلوبايت — و100 كيلوبايت مع daily=true — مقابل واحد وثلاثين ألف صف يومي اختُزل منها، فهو لا يعيد بناء شيء. وطلب واحد يحل محل النداءات اليومية التسعة المسقوفة التي كان الجواب نفسه سيكلّفها لولاه.

daily=true ليست normals?daily=true

وفي هذا الفرق يكمن المعنى. فـنقطة نهاية المعدلات تتوسط على نافذة ثلاثينية للمنظمة العالمية للأرصاد الجوية؛ أما هذه فتتوسط على النافذة التي طلبتها أنت — والأرشيف كله افتراضًا.

وهي السبيل الوحيد لأن تقول «9.4 °م فوق المعتاد لـ 30 يوليو» وخلف العبارة سبع وثمانون سنة لا ثلاثون. ويحمل كل يوم عدد عيّناته، فيصير التوسيع إلى معدل مركزي بخمسة عشر يومًا كتابةً Σ(mean·samples) / Σ(samples) — بالضبط، وبلا طلب ثانٍ.

عرفان يجب معرفتهما قبل المقارنة بمصدر آخر

لا تدخل السنة التقويمية في السلسلة السنوية ولا في الاتجاه إلا إذا حمل الأرشيف 360 يومًا من أيامها على الأقل، فتُستبعد السنة الجارية. فنصف سنة يُقرأ انهيارًا في الهطول ويجرّ معه خط الاتجاه.

وtrends يساوي null دون عشر سنوات كاملة. فدون ذلك لا يكون الميل إلا ضجيج طقس متلبّسًا ثوب إشارة مناخية، ونحن نفضّل ألا ننشر شيئًا على أن ننشر رقمًا خاطئًا بثقة. ولهذا السبب نفسه يحمل كل اتجاه p_value الخاص به وعلامة significant — فاقرأهما قبل أن تستشهد بالميل.

معدلات المنظمة العالمية للأرصاد الجوية#

GEThttps://api.climatememory.com/v1/climate/normalsscope: normals3 أرصدة

متوسط ثلاثيني على فترة مرجعية للمنظمة العالمية للأرصاد الجوية.

المعاملات

المعاملالنوعالافتراضيالوصف
latfloatمطلوب.
lonfloatمطلوب.
periodstring1991-20201991-2020 أو 1961-1990. وكلتاهما فترة مرجعية للمنظمة العالمية للأرصاد الجوية.
fieldscsvالحرارة والهطول
dailyboolfalseتضمين المعدلات اليومية الـ 366 مع تشتّتاتها، والرقم القياسي للحرّ والبرد لكل يوم تقويمي.

المعدل ليس متوسط الفترة التي طلبتها اتفاقًا. بل هو متوسط ثلاثيني على نافذة تثبّتها المنظمة العالمية للأرصاد الجوية، حتى يكون شخصان يستشهدان بمعدل مستشهدَين بالشيء نفسه.

وهذا يتطلب الـ scope normals، وهو ما لا يتطلبه الأرشيف اليومي. فمفتاح يقرأ /v1/climate/daily بلا مشكلة قد يحصل هنا مع ذلك على 403 scope_denied — انظر الخطط لمعرفة أي درجة تشمله.

وإن كان مرادك «المعدل على السجل كله» لا على نافذة المنظمة، فاستعمل بدلًا من ذلك /v1/climate/summary — فهو لا يتطلب إلا الـ scope climate ويعطيك سبعًا وثمانين سنة بدل ثلاثين.

مقارنة معدلين#

GEThttps://api.climatememory.com/v1/climate/normals/comparescope: normals6 أرصدة

الفترتان المرجعيتان والفرق بينهما، في نداء واحد.

هذا هو السؤال الذي يطرحه أكثر الناس حقًا حين يطلبون معدلًا — لا «ما المعتاد هنا» بل «كم تحرك المعتاد».

والإجابة عنه في طلب واحد تضمن ألا يأتي نصفاه من تشغيلين مختلفين، وهو بالضبط وجه الخلل في حسابه بنفسك من ندائين: فالأرشيف يتقدم بينهما، فيحمل الفرق الذي تنشره تغيّر إصدار إلى جانب تغيّر مناخ.

التغطية والحقول والخلايا#

GEThttps://api.climatememory.com/v1/climate/coverageلا حاجة إلى مفتاح1 رصيد

التشغيل المقدَّم والتواريخ التي يغطيها. دون حاجة إلى مفتاح.

GEThttps://api.climatememory.com/v1/climate/fieldsلا حاجة إلى مفتاح1 رصيد

ما يستطيع هذا التشغيل الإجابة عنه، بوحداته، وأي الحقول مشتقة. دون حاجة إلى مفتاح.

GEThttps://api.climatememory.com/v1/climate/cells/resolvescope: climate1 رصيد

أي خلية تجيب عن نقطة، وكم تبعد.

GEThttps://api.climatememory.com/v1/climate/licensingلا حاجة إلى مفتاح0 أرصدة

شروط ترخيص هذا الأرشيف. دون حاجة إلى مفتاح.

cells/resolve يجيب عن السؤال الذي ينبغي أن يُسأل لكل منتج شبكي قبل الوثوق به: أي خلية أقرأ فعلًا، وكم تبعد عن النقطة التي سألت عنها؟ فعند 28 كم قد تبلغ تلك المسافة 20 كم، ومعرفتها هي الفرق بين أن تستشهد برقم وأن تستشهد به بمسؤولية.

وfields له العقد نفسه الذي لـ /v1/historical/variables: فهو يسرد ما يحويه التشغيل لا ما قد يحويه المنتج يومًا ما، فلا ينكسر عميل بُني عليه حين يكبر الأرشيف.

ثبّت الخلية لا الإحداثية حين يجب أن يبقى خط أساس قابلًا للمقارنة عبر السنين. فالإحداثية ثابتة، لكن الخلية التي تخدمها ستنتقل لو تغيرت الشبكة يومًا — وخط الأساس الذي ينتقل صامتًا هو وجه الخلل الذي وُجدت هذه النقطة لمنعه. ولواجهة درجات-اليوم النمط نفسه بمسار مخصص: انظر تثبيت خلية.