modify storm track to show status by color

This commit is contained in:
2025-07-20 01:13:25 -04:00
parent e5d73c8e5b
commit 61844c830e
+98 -36
View File
@@ -241,10 +241,10 @@ Col {data-width=500 .tabset}
### Track Map {.no-padding} ### Track Map {.no-padding}
```{r} ```{r}
# Overview - Track Map # Overview - Track Map
# TODO: implement hurricane category status
storm_track <- reactive({ storm_track <- reactive({
req(storm_selection$is_selected) req(storm_selection$is_selected)
result <- get_hurdat_track(storm_selection) result <- get_hurdat_track(storm_selection)
return(result) return(result)
@@ -277,42 +277,104 @@ observe({
lat = c(35) lat = c(35)
) )
} }
# HURDAT storm status
# TD Tropical cyclone of tropical depression intensity (< 34 knots)
# TS Tropical cyclone of tropical storm intensity (34-63 knots)
# HU Tropical cyclone of hurricane intensity (> 64 knots)
# EX Extratropical cyclone (of any intensity)
# SD Subtropical cyclone of subtropical depression intensity (< 34 knots)
# SS Subtropical cyclone of subtropical storm intensity (> 34 knots)
# LO A low that is neither a tropical cyclone, a subtropical cyclone, nor an extratropical cyclone (of any intensity)
# WV Tropical Wave (of any intensity)
# DB Disturbance (of any intensity)
# Line Color Storm Type Status Pressure (mb) Wind (mph) Wind (knots)
# Blue Subtropical Depression SD -- <=38 <=33
# Light Blue Subtropical Storm SS -- 39-73 34-63
# Green Tropical Depression (TD) TD -- <=38 <=33
# Yellow Tropical Storm (TS) TS 980+ 39-73 34-63
# Red Hurricane (Cat 1) HU <=980 74-95 64-82
# Pink Hurricane (Cat 2) HU 965-980 96-110 83-95
# Magenta Major Hurricane (Cat 3) HU 945-965 111-129 96-112
# Purple Major Hurricane (Cat 4) HU 920-945 130-156 113-136
# White Major Hurricane (Cat 5) HU <=920 157+ 137+
# Green dashed (- -) Wave/Low/Disturbance WV/LO/DB -- -- --
# Black hatched (++) Extratropical Cyclone EX -- -- --
storm_track <- storm_track %>%
mutate(
line_color = case_when(
storm_status == "TD" ~ "green",
storm_status == "TS" ~ "#FFDF00",
storm_status == "HU" ~ "magenta",
storm_status == "EX" ~ "black",
storm_status == "SD" ~ "blue",
storm_status == "SS" ~ "lightblue",
storm_status == "LO" ~ "green",
storm_status == "WV" ~ "green",
storm_status == "DB" ~ "green",
TRUE ~ "gray"
)
)
proxy <- leafletProxy("track_map") %>%
clearShapes() %>%
clearMarkers() %>%
setView(
lng = map_center$lon,
lat = map_center$lat,
zoom = 4
)
if (nrow(storm_track) >= 2) {
storm_track <- storm_track %>% arrange(datetime)
leafletProxy("track_map", data = storm_track) %>% for (i in 1:(nrow(storm_track) - 1)) {
clearShapes() %>% segment_data <- storm_track[i:(i+1), ]
clearMarkers() %>%
setView( proxy <- proxy %>%
lng = map_center$lon, addPolylines(
lat = map_center$lat, data = segment_data,
zoom = 4 lng = ~lon,
) %>% lat = ~lat,
addPolylines( weight = 2,
data = storm_track, color = storm_track$line_color[i],
lng = ~lon, opacity = 0.8
lat = ~lat, )
weight = 4, }
color = "blue" }
) %>%
addCircleMarkers( proxy %>%
data = storm_track %>% filter(record_identifier == "L"), addCircleMarkers(
lng = ~lon, data = storm_track,
lat = ~lat, lng = ~lon,
radius = 5, lat = ~lat,
weight = 0, radius = 1,
color = "red", color = ~line_color,
fillColor = "red", fillOpacity = 0.8,
fillOpacity = 0.8 popup = ~storm_status
) %>% ) %>%
addCircles( addCircleMarkers(
data = storm_track %>% filter(record_identifier == "L"), data = storm_track %>% filter(record_identifier == "L"),
lng = ~lon, lng = ~lon,
lat = ~lat, lat = ~lat,
radius = ~rmw_meters, radius = 5,
weight = 2, weight = 0,
color = "red", color = "red",
fillColor = "red", fillColor = "red",
fillOpacity = 0.3 fillOpacity = 0.8
) ) %>%
addCircles(
data = storm_track %>% filter(record_identifier == "L"),
lng = ~lon,
lat = ~lat,
radius = ~rmw_meters,
weight = 2,
color = "red",
fillColor = "red",
fillOpacity = 0.3
)
}) })
leafletOutput("track_map", height = "100%") leafletOutput("track_map", height = "100%")