Home

Awesome

HMS-Smoke

NOAA's Hazard Mapping System (HMS)

The HMS Smoke Explorer allows end-users to visualize NOAA's Hazard Mapping System (HMS) smoke and fire products, MODIS aerosol optical depth, and GOES-East/West RGB imagery. Since 2005, NOAA analysts have been inspecting satellite imagery (e.g. GOES, MODIS, VIIRS) and manually outlining the extent of smoke across North America, classified into three density categories: light, medium, and heavy, to produce the HMS smoke product. A corresponding HMS fire product includes active fire detections from multiple satellites/sensors (e.g., MODIS, VIIRS, GOES, AVHRR) with quality control by the analysts.

The latest date available in the HMS Smoke Explorer is December 13, 2024.

banner image

Tool Capabilities

<img src="https://github.com/tianjialiu/HMS-Smoke/blob/main/docs/imgs/smoke_animation_2017aug01.gif" width="512">

Datasets on HMS Smoke Explorer

The HMS Smoke Explorer covers the time range of the HMS Smoke Product (2005/08-present). Ancillary datasets for visualization are listed below.

DatasetTime RangeSpatial Resolution
HMS Smoke2005/08-present--
HMS Fire2003/04-present--
HMS Smoke Text2005/07-present--
MODIS Burned Area2000/10-present500 m
MODIS MAIAC Aerosol Optical Depth (AOD)2000/02-present1 km
ECMWF/CAMS AOD, PM<sub>2.5</sub>2016/06-present0.4°
GOES-16/East2017/07-present2 km
GOES-17/West2018/12-2023/012 km
GOES-18/West2022/10-present2 km

HMS on Google Earth Engine

The processed HMS smoke product can be used for analysis on Google Earth Engine (EE) and downloaded as yearly files.

// read HMS smoke polygons and active fires by year
var inYear = 2020;
var HMS = ee.FeatureCollection('projects/GlobalFires/HMS/Smoke_Polygons/HMS_' + inYear);
var HMS_Fire = ee.FeatureCollection('projects/GlobalFires/HMS/Fire_Points/HMS_Fire_' + inYear);

// filter by month and day
var inMonth = 8;
var inDay = 1;
var HMS_day = HMS.filter(ee.Filter.eq('Month',8)).filter(ee.Filter.eq('Day',1));
var HMSFire_day = HMS_Fire.filter(ee.Filter.eq('Month',8)).filter(ee.Filter.eq('Day',1));

Map.addLayer(HMS_day);
Map.addLayer(HMSFire_day, {color:'red'});
Map.centerObject(HMS_day);

print(HMS_day);
print(HMSFire_day);

HMS Smoke Product

VariableDescriptionFormat
IDUnique ID for each polygonYYYYJJJ (1-4 = year, 5-7 = day of year, 8-11 = original row of a polygon in that day's raw HMS file)
YearYear2005-present
MonthMonth1-12
DayDay1-31
JDayJulian day or DOY1-365
StartStart time, UTCHHMM
EndEnd time, UTCHHMM
StSecStart timeseconds since 1970-01-01
EndSecEnd timeseconds since 1970-01-01
DurationEnd time minus start time, with a 15-min bufferhours
DensityDensity of smoke polygon'Light', 'Medium', 'Heavy', or 'Unspecified'
SatelliteSatellite used as a reference for the polygone.g., 'GOES-EAST', 'GOES-WEST'
AreaArea of polygonkm<sup>2</sup>
QAFlagQA flag0-5 (valid: 0 = good, 1 = coordinates adjusted, 2 = unclosed rings; invalid and not included in SHP: 3 = linestring, 4 = point / empty, 5 = crossed edges)
IsMultiIs the polygon a multipolygon?'Y' or 'N'
fillFlag*Flag on gap-filling smoke density0 = no gapfill, 1 = gapfill (model with AOD), 2 = gapfill (model without AOD)
fillConf*Confidence on gap-filled density based on predicted model outcomes from bootstrapping (polygons that did not need gap-filling are automatically labeled with a value of 1)0-1

* only relevant for 2005-2010, so HMS files for only those years have these columns on EE

Notes:

Caveats

Summary Stats and Quality Control

Number of HMS polygons in each year, and how many are invalid after processing in R. The number of smoke polygons with gapfilled densities are also shown below.

YearTotalValidInvalidGapfill
20056296629156291
200615453154411215441
200719881198701119612
20082320323186175073
200923517234803723332
20102724127215267437
20113372133704170
2012279722796480
20132316223143190
2014185651855780
20151635616344120
20162128021268120
2017258432584120
20184133141320110
20194294542934110
2020454404543820
2021275732757210
2022219062190420
2023203032030210
2024122201221730

Missing Dates

20050809,20050810,20060327,20060401,20060714,20060715,20061104,20070331,20070821,20080123,20080124,20080305,20081005,20090130,20090408,20121007,20150602,20150820,20160306,20161112,20170427,20170531,20170601,20170622,20170718,20190710,20190810

Caveats

HMS Fire Product

VariableDescriptionFormat
LonLongitude (center) of active fire coordinatesfloat
LatLatitude (center) of active fire coordinatesfloat
YearYear (HMS filename)2003-present
MonthMonth (HMS filename)1-12
DayDay (HMS filename)1-31
JDayJulian day or DOY (HMS filename)1-365
YearSatYear (satellite)2003-present
MonthSatMonth (satellite)1-12
DaySatDay (satellite)1-31
JDaySatJulian day or DOY (satellite)1-365
HHMMSatHour/minute of active fire detection, UTCHHMM
SatelliteSatellite origin of active fire detectione.g., 'GOES-EAST', 'GOES-WEST'
MethodMethod of active fire detectionANALYSIS = manual input, other labels = automated
EcosystemEcosystem category derived from the Global Land Cover Characterization databaseinteger
QAFlagQA flag for satellite detection date/time0, 1 (valid: 0 = good, 1 = date/time invalid and filled with HMS filename)

Summary Stats and Quality Control

Number of HMS active fires from various satellites and missing days since April 1, 2003. MODIS includes Aqua and Terra, VIIRS includes S-NPP, NOAA-20, and NOAA-21, GOES includes GOES-East and GOES-West, and AVHRR includes NOAA-15 to NOAA-19 and METOP-A/B/2.

YearAvailable DaysTotal Active FiresMODISVIIRSGOESAVHRRUnspecifiedMalformed Datetime (%)
20032191922645666107842241818153630
2004362531036175776013487222038800
2005360651044228018019284723017900
200636028592110608007242310741800
200736331365610660205571615133800
200836648166617392708650722123200
20093632708339384304473313225700
201036533067812012706323714731400.02
20113655203651733930127661219238160.03
2012366433654144903010457018418100
20133654652821608320118188186195670.01
20143643592491378363437466414640600
2015363322907130829067129124938110
20163623269091069021413785019120814370.01
201736071270117705421027814845917691000
2018362165173813038744382599086386653100
2019362257982410178221437312939744033700
20203662493748966692044170352909000
2021365416642914289825974931426038000
202236535707478092018344991655328000
20233658196303050366093159694000
20243488374879047369263637953000

Missing Dates

20030501,20030502,20030503,20030504,20030505,20030506,20030507,20030508,20030509,20030510,20030511,20030512,20030513,20030514,20030515,20030516,20030517,20030518,20030519,20030520,20030521,20030522,20030523,20030524,20030525,20030526,20030527,20030528,20030529,20030530,20030531,20030601,20030602,20030603,20030604,20030605,20030606,20030607,20030608,20030609,20030610,20030611,20030612,20030613,20030614,20030615,20030711,20030731,20030830,20030831,20030905,20030907,20030914,20031102,20031210,20031215,20040225,20040402,20040624,20041209,20050511,20050624,20050626,20050703,20050706,20060327,20060401,20060714,20060715,20061104,20070331,20070821,20090130,20090408,20140705,20150602,20150820,20160306,20161108,20161112,20161209,20170427,20170531,20170601,20170622,20170718,20180501,20181220,20181230,20190225,20190709,20190710

Basic Code for Processing HMS Products

<b>Folder Structure</b>:

HMS/ 
	Fire_Points/
		2003/
		...
		2024/
		processed/
	HMS_Extent/
	Smoke_Polygons/
		2003/
		...
		2024/
		processed/
	Smoke_Text/

<b>Steps</b>:

  1. Download the HMS .zip files to HMS/Smoke_Polygons/ and HMS/Fire_Points/ using ancill/HMS_Download.R and ancill/HMS_Fire_Download.R. Unzip using ancill/HMS_Unzip.R and ancill/HMS_Fire_Unzip.R.
  2. Process HMS daily shapefiles and output yearly shapefiles to HMS/Smoke_Polygons/processed/ and HMS/Fire_Points/processed/ using HMS.R and HMS_Fire.R.
  3. Retrieve HMS smoke text description links as .txt and output as yearly .csv tables in HMS/Smoke_Text/ using ancill/HMS_TextLinksYr.R; combine the .csv files into a single file, HMS/Smoke_Text/HMS_SmokeText.csv, using ancill/HMS_TextLinks.R

Gap-filling Unspecified Densities

We used random forest classification to assign densities (light, medium, or heavy) to polygons with unspecified densities from 2005-2010. This procedure is described in Liu et al. (2024, IJWF). Note that the code has recently been updated to use sf instead of rgdal, and additional processing has been done to fix more bad geometries. The code workflow uses EE to generate some input data for the random forest model (HMS_Stack.js,HMS_AOD.js). The rest of the workflow is in R with RFmodel_prepare.R to output a CSV table of data for all HMS polygons from 2005-2022, RFmodel_withAOD.R and RFmodel_withoutAOD.R to run the random forest classification models, RFmodel_export.R to output another CSV table now with the gap-filled densities, and finally HMS_gapfill_shp.R to rewrite HMS files from 2005-2010 with the gap-filled densities and associated flags.

Updates

Publications

Liu, T., F.M. Panday, M.C. Caine, M. Kelp, D.C. Pendergrass, L.J. Mickley, E.A. Ellicott, M.E. Marlier, R. Ahmadov, and E.P. James (2024). Is the smoke aloft? Caveats regarding the use of the Hazard Mapping System (HMS) smoke product as a proxy for surface smoke presence across the United States. Int. J. Wildland Fire, 33, WF23148. https://doi.org/10.1071/WF23148