気温から雪水比と積雪量を推定する計算ツール
この推定ツールは、降雪中の気温を実用的な雪の膨らみ係数に変換します。結果は、液体降水量1単位から積もり得る雪の深さを同じ単位で示します。10:1なら、水1センチメートルに対して新雪がおよそ10センチメートルです。地点別の公式予報ではなく計画用の目安ですが、予想される定量的降水量から積雪量を読み解くための、透明で再現可能な出発点になります。
無料で実行
雪水比が示す内容
天気予報では、雨と融かした雪を共通の尺度で比較できるよう、降水量を液体換算で示すことがよくあります。しかし積雪深は、結晶の間にどれだけ空気が含まれるかによって変わります。雪水比は、この膨らみ方を表す値です。主な降雪時間を代表する気温を入力し、Celsius、Fahrenheit、kelvinのいずれかを選択してください。内部でCelsiusへ換算し、固定曲線から中心値と上下二十パーセントの実用範囲を返します。また、雪質を密度が高い、標準、軽い、非常に軽いの四段階で分類します。予想液体降水量に比率を掛ければ、最初の積雪量を見積もれます。たとえば液体0.5インチ、比率12:1なら、沈降前の新雪は約六インチです。範囲も併記するため、気温だけでは裏付けられない過度な精度を一つの数値から受け取ることを防げます。
気温による推定方法
この計算では、すべての雪嵐を一つの式で表せると仮定せず、上限と下限を持つ区分線形ヒューリスティックを使用します。極寒から氷点付近までの固定基準点に、一般的な雪水比を割り当てています。隣接する基準点の間は直線補間するため、任意の境界で結果が急変しません。氷点に近づくほど湿った結晶が密に詰まりやすく、比率は概して低下します。曲線は非常に寒いものの極端ではない条件で最大となり、最も低い気温に無制限の比率を割り当てません。摂氏マイナス百未満または二十度超は、降雪計画の妥当な領域外として拒否します。返される範囲は中心推定値の八十から百二十パーセントです。処理は完全に決定論的で、同じ入力は常に同じJSONを返し、ネットワーク、実況予報、乱数、時計を使用しません。
計画上の目安として使う方法
気温は雪密度を決める要因の一つにすぎないため、結果は公式予報ではなく基準値としてご利用ください。結晶形状は、地上だけでなく厚い大気層の湿度と温度に左右されます。強風は結晶を壊して圧縮し、着氷は密な過冷却水滴を加え、雨雪混在は比率を大きく下げます。暖かい地面、車両、日射、吹きだまり、沈降も測定深を変化させます。高層気象観測、地域気候値、実際の降雪観測がある場合は、それらを優先してください。日最高・最低気温ではなく、主な積雪時間帯を代表する気温を選びます。予想液体量に中心比率を掛け、さらにtypical_rangeの上下限でも計算すると、計画用の幅が得られます。APIは成功1件につき$0.002で、正規化気温、比率、換算値、分類、方法、注意事項を返します。
活用例
冬季降水予報の読み替え
予想液体降水量を、積雪深の中心推定値と実用的な範囲へ換算します。
除雪体制の準備
人員、車両、凍結防止材を手配するための一貫した初期シナリオを作成します。
教材や気象アプリの作成
決定論的なJSONで比率を説明し、透明な気温ヒューリスティックを組み込めます。
よくある質問
雪水比10:1は何を意味しますか?
液体水1単位から新雪が同じ深さの単位で10生じる意味で、水1センチメートルなら雪約10センチメートルです。
どの気温を入力すればよいですか?
日最高・最低ではなく、最も多く積もると予想される時間帯を代表する気温をご入力ください。
実況の天気予報を取得しますか?
いいえ。ご指定の気温だけを固定された決定論的ヒューリスティックで評価します。
実測積雪量が推定と異なるのはなぜですか?
風、湿度、結晶、着氷、雨雪混在、地温、圧密、測定時刻が実際の深さを変えるためです。
APIの料金はいくらですか?
正常な推定1件につき$0.002です。気温の欠落を含む無効な入力は拒否されます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/weather/snow-to-liquid-ratio-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"temperature":25}'const res = await fetch("https://api.kit.forhosting.com/weather/snow-to-liquid-ratio-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"temperature": 25
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/weather/snow-to-liquid-ratio-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"temperature": 25
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/weather/snow-to-liquid-ratio-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"temperature":25}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"temperature":25}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/weather/snow-to-liquid-ratio-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"temperature": 25
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "weather.snow_to_liquid_ratio_estimate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |