Click any component to explore it in the full case study.

2-Stage Spatial Filter + Storm State Machine
Stage 1
Bounding Box + Haversine
28.21–28.56°N / -81.74 to -81.40°W eliminates 95% of CONUS data. Haversine distance to 4 park centers (MK, EPCOT, HS, AK). nearest_park assigned at ingest — no runtime geo math.
Stage 2
BigQuery Ingest
tbl_lightning_whisperer: strike_id, timestamp, lat/lon, energy_Joules, nearest_park, distance_miles. 20-mile radius filter. Flash rate aggregated per 15-min window.
Stage 3
Storm State Machine
5 states: CLEAR → WATCH → APPROACH → ACTIVE → SEVERE. Fuses GLM flash rate, METAR present-wx, NWS alerts, SPC outlooks, and 24hr forecast probability.
Safety-Calibrated Thresholds
20-mile radius calibrated to ~80-min lead time for 10–20 mph storm motion. 10-mile ACTIVE threshold aligned with industry park lightning safety protocols. GLM Flash (not Event) level used for merged discharges — higher accuracy, lower false positive rate.
20-mile proximity radius~80-min lead time10-mile ACTIVE thresholdGLM Flash level (not Event)~8–12 km spatial accuracy5-state machine
20s
GLM file cadence
20mi
Park proximity filter
5
Storm states
4
Parks tracked
StackGOES-18 GLM LCFABigQueryNWS APIMETAR (KISM)Haversine distancePythonNetCDF parsingGCP