Florida Storm Tracker and Model Mixer
Storm Tracker
A hurricane watcher’s guide to the latest track and model forecasts during the 2025 Atlantic Hurricane Season.
Map
Florida is in a scramble to re-energize the state as quickly as possible. Here's a guide to the percentage of power outages in each county. Click on each county to see the details. Last update:
See Legend
Hide Legend
Tropical Depression
Tropical Storm
Hurricane Cat.1
Hurricane Cat.2
Hurricane Cat.3
Hurricane Cat.4
Hurricane Cat.5
See Watches & Warnings
Watches & Warnings
Source: National Oceanic and Atmospheric Administration
Find hurricanes passed near me
Storm Forecast Tools and Spaghetti Models
Forecast models not available
Hurricane forecast model explanation: Ryan Truchelut, a meteorologist with the Tallahassee-based startup, offers this explainer of the science behind the spaghetti models.
More
Watch storm through webcams A number of cameras are showing live feeds as storm approaches.
Florida Gridlock Guide
Here's the latest traffic reports and live views from the state's highways.
Track Hurricane Irma
Live Twitter feed and interactive tracking map of Hurricane Irma.
Hurricane Irma coverage
Collection of USA Today Network stories, photos and videos
OFF THE GRID: Power Outage Tracker As severe weather or blizzards threaten, this database scrapes power outage information from more than 1,000 companies nationwide. It will automatically update every 15 minutes.
Weather Alerts: Warnings, Watches and Advisories Track all current severe weather warnings, watches and advisories for West Palm Beach, Florida and other areas in the United States on the interactive weather alerts page. This data is updated every 5 minutes.
Rolling Storm Damage Reports As storms strike, this interactive map is your guide to impacts and damage reports coming into National Weather Service stations nationwide.
A history of twisters: Tornadoes in Florida since 1950s This interactive map, which contains data from January 1950, pinpoints where a cyclone touched down and traces its path of destruction. For more recent tornadoes, clicking deeper provides more details, damage estimates and whether someone was injured or killed in the storm.
Real-time Streamflow Map: River Water Level Current data typically are recorded at 15- to 60-minute intervals.
Excessive Rainfall Forecast Weather Prediction Center forecasts the probability that rainfall will exceed flash flood guidance within 25 miles of a point.
Maximum Heat Index Forecast Maximum heat index forecast for next 7 days. Updated daily from May 1 through Sept. 30
Drought Monitor and History Data shows the location and intensity of drought across the country.
Wildfire and Smoke Tracker Fire data is updated hourly based upon input from incident intelligence sources, GPS data, infrared (IR) imagery from fixed wing and satellite platforms.
Wildfire History See a map of wildfires since 2017
Air Quality Index (AQI) Forecasts and Current Conditions The Air Quality Index (AQI) translates air quality data into numbers and colors that help people understand when to take action to protect their health.
Snow & Ice: Winter Weather Forecasts Map indicates the probability of accumulated snow or ices for next 3 days
Weather Data since 1895 County-level monthly precipitation and temperature data since 1895 provieded by National Centers for Environmental Information (NCEI). The data is updated every month.
';
//popupContent += '
'+new Date(feature.properties.ts*1000).toLocaleString("en-US",{month:"long", day:"numeric", year:"numeric", hour:"numeric", minute:"numeric", timeZoneName:"short"})+'
';
popupContent += '
';
//popupContent += 'Name: '+feature.properties.sname+' ';
popupContent += 'Type: '+feature.properties.st+' ';
if (feature.properties.udt == feature.properties.ldt ){
popupContent += 'Time: '+feature.properties.udt+' ';
} else {
if (feature.properties.udt) {popupContent += 'UTC Time: '+feature.properties.udt+' ';}
popupContent += 'Local Time: '+feature.properties.ldt+' ';
}
if (feature.properties.knt) {popupContent += 'Wind: '+Math.round(feature.properties.knt*1.152)+' mph ';}
if (feature.properties.pres) {popupContent += 'Pressure: '+intComma(feature.properties.pres)+'MB ';}
popupContent += '
';
return popupContent;
}
function onPntTrackFeature(feature) {
var popupContent = "";
popupContent += '
'+feature.properties.sname+'
';
popupContent += '
Advisory '+feature.properties.adn+'
';
popupContent += '
';
if (feature.properties.st) {popupContent += 'Type: '+feature.properties.st+' ';}
popupContent += 'Time: '+feature.properties.time+' ';
if (feature.properties.knt) {popupContent += 'Maximum Wind: '+Math.round(feature.properties.knt*1.152)+' mph ';}
if (feature.properties.gust) {popupContent += 'Wind Gusts: '+Math.round(feature.properties.gust*1.152)+' mph ';}
if (feature.properties.pres) {popupContent += 'Pressure: '+intComma(feature.properties.pres)+'MB ';}
popupContent += '
';
return popupContent;
}
function onWWFeature(feature) {
var popupContent = '
'+feature.properties.name+'
';
popupContent += '
';
popupContent += ''+feature.properties.storm+' ';
popupContent += 'Time '+feature.properties.time+' ';
popupContent += '
';
return popupContent;
}
function onCWWFeature(feature) {
const options = { dateStyle: 'full', timeStyle: 'long', timeZone: "America/New_York" };
var dlink = '/severe-weather-alerts-warnings-watches/detail/'+slugify(feature.properties.p+' '+feature.properties.s+' '+feature.properties.ex)+'/'+feature.properties.id+'/'
if (feature.properties.d != null) {
var wwadesc = truncate(feature.properties.d, 15);
if (feature.properties.d != wwadesc) {
wwadesc += '......
VIEW MORE '
}
} else {
var wwadesc = ''
}
var popupContent = '
'+feature.properties.p+' '+feature.properties.s+'
';
popupContent += '
';
popupContent += 'Status '+feature.properties.t+' ';
if (feature.properties.d != null){popupContent += ''+wwadesc+' ';}
if (feature.properties.is != null){popupContent += 'Initially Issued '+new Intl.DateTimeFormat('en-us', options).format(new Date(feature.properties.is*1000))+' ';}
if (feature.properties.ex != null){popupContent += 'Expires '+new Intl.DateTimeFormat('en-us', options).format(new Date(feature.properties.ex*1000))+' ';}
if (feature.properties.h != null && feature.properties.h != 'None'){popupContent += 'Population '+feature.properties.h+' ';}
popupContent += '
';
return popupContent;
}
function onPAvFeature(feature) {
var popupContent = '
'+feature.properties.name+'
';
popupContent += '
'+feature.properties.st+'
';
popupContent += '
';
popupContent += '
'+feature.properties.description+'
';
popupContent += '
';
return popupContent;
}
function onDescFeature(feature) {
var popupContent = '
'+feature.properties.description+'
';
return popupContent;
}
function onMLAFeature(feature) {
var popupContent = '
Arrival Time of Possible Tropical Storm Force Winds '+feature.properties.description+'
';
return popupContent;
}
function onGTWOFeature(feature) {
if (feature.properties.BASIN == 'Pacific') {
if (gtwotext.hasOwnProperty("Pacific") ) {
var gtwodesc = gtwotext[feature.properties.BASIN][feature.properties.AREA];
} else {
var gtwodesc = gtwotext['East Pacific'][feature.properties.AREA];
}
} else {
var gtwodesc = gtwotext[feature.properties.BASIN][feature.properties.AREA];
}
var popupContent = '
';
return popupContent;
}
function onSurgeFeature(feature) {
var popupContent = "";
popupContent += '
Peak Storm Surge: '+feature.properties.name+'
';
return popupContent;
}
function onLAEVACFeature(feature) {
var popupContent = '
'+feature.properties.Type+' Evacuation
';
popupContent += 'Parish '+feature.properties.Parish+' ';
popupContent += 'Area '+feature.properties.Name+' ';
if(feature.properties.Description != null){popupContent += ''+feature.properties.Description+' ';}
popupContent += '
';
return popupContent;
}
var gtwoColor = {'high':'#E80000','medium':'#FF9200','low':'#FFFF00','High':'#E80000','Medium':'#FF9200','Low':'#FFFF00'};
var bF = {'al':'Atlantic', 'ep':'East Pacific', 'cp':'Central Pacific'};
mapboxgl.accessToken = 'pk.eyJ1IjoieXB5dW4iLCJhIjoiY2oxcW4ybWhxMDBkMjJxcGVhbDV5cnpzYyJ9.oFQSnOc57xCR7A51OR6-3w'; //ck0flqufl2k1x1cpmupm5sl2y
var map = new mapboxgl.Map({container: 'stormtrackingmap', style: 'mapbox://styles/ypyun/ck0flqufl2k1x1cpmupm5sl2y', center: [-80.0585,26.6696], zoom: 6, attributionControl: false, });
map.addControl(new mapboxgl.AttributionControl({ compact: true, customAttribution:[''] }));
var bounds = new mapboxgl.LngLatBounds();
var showWWXGT = 'yes';
map.on('load', function () {
var layers = map.getStyle().layers;
var firstSymbolId;
for (var i = 0; i < layers.length; i++) { if (layers[i].type === 'symbol') { firstSymbolId = layers[i].id; break; } }
var icsize = ['interpolate', ['linear'], ['zoom'], 1, 0.4, 3, 0.6, 6, 0.8, 8, 1.0,];
var storm_radius = ["match",["get","c"],"c1",6,"c2",7.5,"c3",9,"c4",10.5,"c5",12, 4];
var line_width = ["match",["get","c"],"c1",6,"c2",7.5,"c3",9,"c4",10.5,"c5",12,4];
var storm_color = ["match",["get","c"],"td","#F0C889","ts","#E07D56","c1","#DA6445","c2","#D54B33","c3","#CF3222","c4","#CA1911","c5","#C40000","ex","#F0C889","#CCC"];
var line_color = ["match",["get","c"],"td","#F0C889","ts","#E07D56","c1","#DA6445","c2","#D54B33","c3","#CF3222","c4","#CA1911","c5","#C40000","ex","#F0C889","#CCC"];
var risk_color = ["match",["get","RISK7DAY"],"Low","#e1e12a","Medium","#ff9200","Med","#ff9200","High","#e80000","#CCC"];
if (showWWXGT == 'yes') {
map.addSource('cww', {type: 'geojson', data: '/media/jsons/weather/wwa/current_ww_crh.json?v='+rnna });
map.addLayer({ "id": "CCWW", "type": "fill", "source":"cww", "layout":{"visibility": "none"}, "filter":["any",['==','p','Severe Thunderstorm'],['==','p','Tornado'],['==','p','Marine'],['==','p','Beach Hazard'],['==','p','Coastal Flood'],['==','p','Extreme Wind'],['==','p','Flood'],['==','p','Flash Flood'],['==','p','Flood (Forecast)'],['==','p','Gale'],['==','p','Hurricane Force Wind'],['==','p','Inland Hurricane Wind'],['==','p','Hurricane'],['==','p','High Wind'],['==','p','Hydrologic'],['==','p','Lakeshore Flood'],['==','p','Lake Wind'],['==','p','Marine Dense Fog' ],['==','p','Small Craft for Rough Bar'],['==','p','Rip Currents'],['==','p','Small Craft'],['==','p','Hazardous Seas'],['==','p','Small Craft for Winds'],['==','p','Storm'],['==','p','Storm Surge'],['==','p','High Surf'],['==','p','Small Craft for Hazardous Seas'],['==','p','Inland Tropical Storm Wind'],['==','p','Tropical Storm'],['==','p','Tsunami'],['==','p','Typhoon'],['==','p','Wind']], "paint": {'fill-color': {type:'identity', property:'c'}, 'fill-opacity':0.6, 'fill-outline-color': '#CCC', }}, firstSymbolId); // "filter":["==","$type","Polygon"]
map.on('click', 'CCWW', function (e) {new mapboxgl.Popup({ offset: 14 }).setLngLat(e.lngLat).setHTML(onCWWFeature(e.features[0])).addTo(map);});
map.on('mouseenter', 'CCWW', function () {map.getCanvas().style.cursor = 'pointer'; });
map.on('mouseleave', 'CCWW', function () {map.getCanvas().style.cursor = '';});
if(klen > 0){
map.addLayer({ "id": "gtwoLine", "type": "line", "source": { "type": "geojson", "data":gtwolin }, "paint": {'line-color': risk_color, 'line-opacity':0.7, 'line-width': 3.2, }},firstSymbolId);
map.addLayer({ "id": "gtwoGonOutline", "type": "line", "source": { "type": "geojson", "data":gtwogon }, "paint": {'line-color':risk_color, 'line-opacity':0.7, 'line-width': 3.2, }},firstSymbolId);
map.addLayer({ "id": "gtowGon", "type": "fill", "source": { "type": "geojson", "data":gtwogon }, "paint": {'fill-color': risk_color, 'fill-opacity':0.3, 'fill-outline-color': {type:'identity', property:'color'}, }, "filter":["==","$type","Polygon"]}, firstSymbolId);
map.on('click', 'gtowGon', function (e) {new mapboxgl.Popup({ offset: 14 }).setLngLat(e.lngLat).setHTML(onGTWOFeature(e.features[0])).addTo(map);});
map.on('mouseenter', 'gtowGon', function () {map.getCanvas().style.cursor = 'pointer'; });
map.on('mouseleave', 'gtowGon', function () {map.getCanvas().style.cursor = '';});
gtwopnt.features.forEach(function(gtmarker) {
var el = document.createElement('div'); el.className = 'glIcon'; el.style.backgroundImage = 'url("/media/storm/icons/gtwo'+gtmarker.properties.RISK7DAY.toLowerCase()+'.png")'; new mapboxgl.Marker(el).setLngLat(gtmarker.geometry.coordinates).setPopup(new mapboxgl.Popup({ offset: 14 }).setHTML(onGTWOFeature(gtmarker))).addTo(map);
if (gtmarker.properties.BASIN == 'Atlantic'){bounds.extend(gtmarker.geometry.coordinates);}
});
}
}
});
// active no
if(klen > 0){
var gtwpntlen = Object.size(gtwopnt['features']);
var gtwgonlen = Object.size(gtwogon['features']);
if(gtwpntlen > 0){gtwopnt.features.forEach(function(gtmarker) { if (gtmarker.properties.BASIN == 'Atlantic'){ bounds.extend(gtmarker.geometry.coordinates);} }); }
if(gtwgonlen > 0){gtwogon.features.forEach(function(gtmarker) { if (gtmarker.properties.BASIN == 'Atlantic'){ gtmarker.geometry.coordinates[0].forEach(function(gcoord){ bounds.extend(gcoord);}) } }); }
}
map.addControl(new mapboxgl.NavigationControl(), 'top-left');