Este dashboard es una demo orientativa curada para operaciones de pista. Combina pronósticos de corto plazo HRRR y RAP con un pequeño catálogo de pistas y perfiles de aeronave de referencia para estimar componentes de viento de frente y viento cruzado, altitud de presión y altitud de densidad, y un margen de pista aproximado a lo largo del tiempo.
Por debajo, la página resuelve geometría de pista y coeficientes de aeronave desde endpoints livianos de metadatos, y luego ejecuta una solicitud estándar de GribStream /api/v2/[dataset]/timeseries con variables de pronóstico más expressions calculadas en cadena. Eso hace que la lógica específica de aviación sea transparente y reproducible desde la API pública, en vez de quedar escondida detrás de un endpoint custom en el servidor.
Las fórmulas son intencionalmente simples y conservadoras: usan pronóstico meteorológico, números de referencia específicos de la aeronave y penalizaciones o créditos genéricos por altitud de densidad, viento de cola, viento de frente, peso y condición de pista. Esto es útil para demos, conversaciones de planificación y presentaciones a clientes.
El ejemplo de abajo es el mismo estilo de solicitud que hace el dashboard para KASE RWY 15 con un perfil de referencia Cessna 172S. La elevación del campo, rumbo de pista, longitud de pista y coeficientes de aeronave vienen de endpoints de metadatos, mientras que las variables meteorológicas y campos derivados de performance se calculan en una sola llamada estándar a la 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) y wind * sin(angle).field elevation + (29.92 - altimeter setting) * 1000.pressure altitude + 120 * (OAT - ISA temperature).Contexto y referencias: GribStream expressions · FAA Pilot's Handbook of Aeronautical Knowledge · FAA Airplane Flying Handbook · Pressure altitude · Density altitude.
No apto para uso operacional. Esta página no reemplaza el manual de vuelo de la aeronave, el paquete de datos del aeropuerto, los SOPs de la compañía ni los cálculos de dispatch / performance del piloto. Úsala como explicación visual de lo que GribStream puede alimentar, no como autoridad go / no-go.