Este dashboard é uma demo exploratória curada para operações de pista. Ele combina previsões de curto prazo HRRR e RAP com um pequeno catálogo de pistas e perfis de aeronave de referência para estimar componentes de vento de proa e vento lateral, altitude de pressão e altitude de densidade, e uma margem de pista aproximada ao longo do tempo.
Nos bastidores, a página resolve geometria de pista e coeficientes de aeronave a partir de endpoints leves de metadados, e então executa uma requisição padrão do GribStream /api/v2/[dataset]/timeseries com variáveis de previsão e expressions calculadas em cadeia. Isso torna a lógica específica de aviação transparente e reproduzível pela API pública, em vez de escondida atrás de um endpoint específico do servidor.
As fórmulas são intencionalmente simples e conservadoras: usam previsão meteorológica, números de referência específicos da aeronave e penalidades ou créditos genéricos para altitude de densidade, vento de cauda, vento de proa, peso e condição da pista. Isso é útil para demos, conversas de planejamento e apresentações a clientes.
O exemplo abaixo segue o mesmo estilo de requisição que o dashboard faz para KASE RWY 15 com um perfil de referência Cessna 172S. A elevação do campo, rumo da pista, comprimento da pista e coeficientes da aeronave vêm dos endpoints de metadados, enquanto as variáveis meteorológicas e campos derivados de performance são calculados em uma única chamada padrão da 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) e wind * sin(angle).field elevation + (29.92 - altimeter setting) * 1000.pressure altitude + 120 * (OAT - ISA temperature).Contexto e referências: GribStream expressions · FAA Pilot's Handbook of Aeronautical Knowledge · FAA Airplane Flying Handbook · pressure altitude (altitude de pressão) · density altitude (altitude de densidade).
Não é adequada para uso operacional. Esta página não substitui o manual de voo da aeronave, dados oficiais do aeroporto, procedimentos operacionais padrão (SOPs) da companhia nem cálculos de despacho operacional e performance do piloto. Use como explicação visual do que o GribStream pode alimentar, não como autoridade para decisão go/no-go.