Ce tableau de bord est une démo indicative préparée pour les opérations de piste. Il combine des prévisions court terme HRRR et RAP avec un petit catalogue de pistes et des profils d'avions de référence pour estimer les composantes de vent de face et de vent traversier, altitude-pression et altitude-densité, ainsi qu'une marge de piste approximative au fil du temps.
La page résout la géométrie de piste et les coefficients d'avion depuis des endpoints légers de métadonnées, puis lance une requête GribStream standard /api/v2/[dataset]/timeseries avec variables de prévision et expressions calculées en chaîne. La logique aviation est donc transparente et reproductible depuis l'API publique, au lieu d'être cachée derrière un endpoint spécialisé côté serveur.
Les formules sont volontairement simples et conservatrices : elles utilisent la prévision météorologique, des chiffres de référence propres à l'avion et des pénalités ou crédits génériques pour altitude-densité, vent arrière, vent de face, poids et état de piste. C'est utile pour les démos, discussions de planification et présentations client.
L'exemple ci-dessous suit le même style de requête que le tableau de bord pour KASE RWY 15 avec un profil de référence Cessna 172S. L'altitude du terrain, l'orientation de piste, la longueur de piste et les coefficients avion viennent des endpoints de métadonnées, tandis que les variables météorologiques et champs de performance dérivés sont calculés en un seul appel API standard.
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) et wind * sin(angle).field elevation + (29.92 - altimeter setting) * 1000.pressure altitude + 120 * (OAT - ISA temperature).Contexte et références : GribStream expressions · FAA Pilot's Handbook of Aeronautical Knowledge · FAA Airplane Flying Handbook · Pressure altitude · Density altitude.
Non destiné à l'usage opérationnel. Cette page ne remplace pas le manuel de vol de l'avion, le dossier de données aéroport, les procédures compagnie ni les calculs de dispatch ou de performance du pilote. Utilisez-la comme explication visuelle de ce que GribStream peut alimenter, pas comme autorité de décision go / no-go.