Questa dashboard è una demo indicativa curata per operazioni di pista. Combina previsioni a breve termine HRRR e RAP con un piccolo catalogo di piste e profili aeromobile di riferimento per stimare componenti di vento frontale e vento al traverso, pressure altitude (altitudine di pressione) e density altitude (altitudine di densità) e un margine pista approssimato nel tempo.
La pagina risolve geometria della pista e coefficienti aeromobile da endpoint dedicati ai metadati, poi esegue una normale richiesta GribStream /api/v2/[dataset]/timeseries con variabili di previsione ed espressioni calcolate (expressions) in sequenza. Questo rende la logica specifica per l'aviazione trasparente e riproducibile dall'API pubblica, senza nasconderla in un endpoint dedicato lato server.
Le formule sono volutamente semplici e conservative: usano meteo previsto, valori di riferimento specifici dell'aeromobile e penalità o crediti generici per density altitude, vento in coda, vento frontale, peso e condizione della pista. È utile per demo, conversazioni di pianificazione e presentazioni a clienti.
L'esempio sotto usa lo stesso stile di richiesta della dashboard per KASE RWY 15 con un profilo di riferimento Cessna 172S. Elevazione del campo, orientamento pista, lunghezza pista e coefficienti aeromobile arrivano dagli endpoint dedicati ai metadati, mentre le variabili meteo e i campi derivati sulle prestazioni vengono calcolati in un'unica chiamata 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) e wind * sin(angle).field elevation + (29.92 - altimeter setting) * 1000.pressure altitude + 120 * (OAT - ISA temperature).Contesto e riferimenti: espressioni GribStream · FAA Pilot's Handbook of Aeronautical Knowledge · FAA Airplane Flying Handbook · Pressure altitude · Density altitude.
Non usare per operazioni reali. Questa pagina non sostituisce il manuale di volo dell'aeromobile, i dati ufficiali dell'aeroporto, le SOP aziendali né i calcoli di pianificazione operativa o di prestazioni del pilota. Usala come spiegazione visiva di ciò che GribStream può alimentare, non come autorità per decisioni go / no-go.