このダッシュボードは、滑走路運用を説明するために作られた参考デモです。短期予報のHRRRとRAP、小さな滑走路カタログ、参照用の航空機プロファイルを組み合わせ、時間ごとの向かい風・横風成分、気圧高度(pressure altitude)と密度高度(density altitude)、おおよその滑走路余裕を推定します。航空では英語の用語がそのまま使われることが多いため、初出では英語名も添えています。
ページは、軽量なメタデータエンドポイントから滑走路の幾何情報と航空機係数を取得し、そのうえで標準のGribStream /api/v2/[dataset]/timeseriesリクエストを送ります。リクエストには予報変数と、連鎖した計算式が含まれます。つまり、航空向けのロジックは専用エンドポイントの裏に隠れず、公開APIから透明に再現できます。
式は意図的に単純で保守的です。予報された気象条件、航空機ごとの参照値、密度高度、追い風、向かい風、重量、滑走路状態に対する一般的な補正を使います。デモ、計画段階の議論、顧客向け説明には役立ちますが、運航判断の根拠にするものではありません。
下の例は、ダッシュボードがKASE RWY 15と参照プロファイルCessna 172Sに対して行うリクエストと同じ形式です。飛行場標高、滑走路方位、滑走路長、航空機係数はメタデータエンドポイントから入り、気象変数と派生性能フィールドは1つの標準API呼び出しで計算されます。
curl -X POST 'https://gribstream.com/api/v2/hrrr/timeseries' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer [API_TOKEN]' \
-d '{
"fromTime": "2026-04-11T17:42:52Z",
"untilTime": "2026-04-12T12:42:52Z",
"minLeadTime": "0h",
"maxLeadTime": "36h",
"coordinates": [
{ "lat": 39.2232, "lon": -106.8688, "name": "KASE RWY 15" }
],
"variables": [
{ "name": "TMP", "level": "2 m above ground", "alias": "temp_k" },
{ "name": "DPT", "level": "2 m above ground", "alias": "dew_k" },
{ "name": "PRES", "level": "surface", "alias": "pres_pa" },
{ "name": "GUST", "level": "surface", "alias": "gust_ms" },
{ "name": "UGRD", "level": "10 m above ground", "alias": "u_ms" },
{ "name": "VGRD", "level": "10 m above ground", "alias": "v_ms" }
],
"expressions": [
{ "expression": "temp_k - 273.15", "alias": "temp_c" },
{ "expression": "dew_k - 273.15", "alias": "dew_c" },
{ "expression": "pres_pa / 3386.389", "alias": "station_inhg" },
{ "expression": "station_inhg / func.Pow(1 - (7820 * 0.3048) / 44330.0, 5.255)", "alias": "altimeter_inhg" },
{ "expression": "func.Hypot(u_ms, v_ms) * 1.94384", "alias": "wind_kt" },
{ "expression": "gust_ms * 1.94384", "alias": "gust_kt" },
{ "expression": "(int(270 - func.Atan2(v_ms, u_ms) * 180 / 3.14159) + 360) % 360", "alias": "wind_dir_deg" },
{ "expression": "(wind_dir_deg - 150) * 3.14159 / 180", "alias": "angle_rad" },
{ "expression": "wind_kt * func.Cos(angle_rad)", "alias": "headwind_kt" },
{ "expression": "func.Max(headwind_kt, 0.0)", "alias": "headwind_pos_kt" },
{ "expression": "func.Max(-headwind_kt, 0.0)", "alias": "tailwind_kt" },
{ "expression": "func.Abs(wind_kt * func.Sin(angle_rad))", "alias": "crosswind_kt" },
{ "expression": "func.Abs(gust_kt * func.Sin(angle_rad))", "alias": "gust_crosswind_kt" },
{ "expression": "7820 + (29.92 - altimeter_inhg) * 1000", "alias": "pressure_alt_ft" },
{ "expression": "15 - 1.98 * pressure_alt_ft / 1000", "alias": "isa_temp_c" },
{ "expression": "pressure_alt_ft + 120 * (temp_c - isa_temp_c)", "alias": "density_alt_ft" },
{ "expression": "9.600", "alias": "crosswind_baseline_kt" },
{ "expression": "1630 * func.Pow(90 / 100.0, 1.7) * (1 + func.Max(density_alt_ft, 0.0) / 1000.0 * 0.140) * 1.0 * (1 + tailwind_kt * 0.040) / func.Max(0.75, 1 + headwind_pos_kt * 0.012)", "alias": "takeoff_req_ft" },
{ "expression": "1335 * func.Pow(90 / 100.0, 1.45) * (1 + func.Max(density_alt_ft, 0.0) / 1000.0 * 0.050) * 1.0 * (1 + tailwind_kt * 0.030) / func.Max(0.80, 1 + headwind_pos_kt * 0.010)", "alias": "landing_req_ft" },
{ "expression": "8006", "alias": "runway_length_ft" },
{ "expression": "runway_length_ft - takeoff_req_ft", "alias": "takeoff_margin_ft" },
{ "expression": "runway_length_ft - landing_req_ft", "alias": "landing_margin_ft" },
{ "expression": "func.Min(takeoff_margin_ft, landing_margin_ft)", "alias": "min_margin_ft" }
]
}'
wind * cos(angle)とwind * sin(angle)を使う標準的なベクトル分解です。field elevation + (29.92 - altimeter setting) * 1000を使います。pressure altitude + 120 * (OAT - ISA temperature)を適用します。背景とリファレンス: GribStreamの計算式(expressions) · FAA Pilot's Handbook of Aeronautical Knowledge · FAA Airplane Flying Handbook · Pressure altitude · Density altitude.
運用判断には使えません。 このページは、航空機の飛行規程(flight manual)、空港データ資料、会社SOP、運航管理やパイロット向け性能計算の代替ではありません。GribStreamがどのような画面を動かせるかを説明するためのものとして使ってください。運航可否判断(go/no-go)の根拠にはしないでください。