Space Data Atlas

Challenges

Harmonization of MODIS and VIIRS Hot Spots

Intermediate, Advanced. Earth Science, Software.

Merge two decades of active-fire detections from MODIS and VIIRS into one consistent record, then build a web app that shows a burning-activity calendar for any area.

Read the official challenge on spaceappschallenge.org

Your first hour

  1. Request a free FIRMS MAP_KEY and pull MODIS_SP and VIIRS_SNPP_SP detections for one test area.
  2. Compare detection counts in the 2012 onward overlap years to see how the two sensors differ.
  3. Sketch the burning-activity calendar using GIBS fire layers before building the full pipeline.

Suggested datasets

In order of how useful they are likely to be. These are suggestions, not the official resource list.

FIRMS Active Fire API

NASA FIRMS

Free API keyWorks in browser

Returns MODIS, VIIRS and Landsat fire detections as CSV for a bounding box and day range, including standard-processing archive sources (MODIS_SP, VIIRS_SNPP_SP, VIIRS_NOAA20_SP) as well as near-real-time feeds. The quickest way to get point detections for a fire calendar without handling swath files. Needs a free MAP_KEY.

endpoint https://firms.modaps.eosdis.nasa.gov/api/area/

MODIS/Terra Thermal Anomalies/Fire 5-Min L2 Swath 1km (MOD14) V061

NASA LP DAAC

Works in browser

The Terra MODIS active-fire swath product, with fire masks, detection confidence and fire radiative power back to 2000. This is the long MODIS side of a MODIS-VIIRS harmonized record; the Aqua twin is MYD14.

CMR short name MOD14, concept ID C2271754179-LPCLOUD, GIBS layer MODIS_Terra_Thermal_Anomalies_All

VIIRS/NPP Active Fires 6-Min L2 Swath 375m (VNP14IMG) V002

NASA LP DAAC

Works in browser

Suomi NPP VIIRS active-fire detections at 375 m, finer than MODIS and available since 2012. The overlap years with MODIS are where harmonization work happens.

CMR short name VNP14IMG, concept ID C2734202914-LPCLOUD, GIBS layer VIIRS_SNPP_Thermal_Anomalies_375m_All

VIIRS/JPSS1 (NOAA-20) Active Fires 6-Min L2 Swath 375m (VJ114IMG) V002

NASA LP DAAC

Works in browser

The same 375 m VIIRS fire algorithm run on NOAA-20, offset in orbit from Suomi NPP. Adding it increases how often each area is observed per day.

CMR short name VJ114IMG, concept ID C2734197957-LPCLOUD, GIBS layer VIIRS_NOAA20_Thermal_Anomalies_375m_All

Global Imagery Browse Services (GIBS)

NASA ESDIS

No loginWorks in browser

Ready-made map tiles for more than 1,000 NASA Earth layers (true color, fires, soil moisture, precipitation, night lights and more) served over WMTS with no login. The fastest way to put NASA Earth imagery on a web map or in a visualization.

GIBS layer MODIS_Terra_CorrectedReflectance_TrueColor, endpoint https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/1.0.0/WMTSCapabilities.xml

Starter code

Find VIIRS fire swaths for a regionPython
import earthaccess

# VIIRS 375 m active fire swaths over California, one week
results = earthaccess.search_data(
    short_name="VNP14IMG",
    bounding_box=(-124.5, 32.5, -114.0, 42.0),
    temporal=("2025-08-01", "2025-08-07"),
    count=5,
)
print(len(results), "granules")
for g in results:
    print(g["umm"]["GranuleUR"])

# Swap short_name to "MOD14" for the Terra MODIS record (2000 onward).
# Downloads need Earthdata Login:
# earthaccess.login()
# earthaccess.download(results, "./fires")
Pull fire detections for a bounding boxPython, needs login or key
import os, io
import requests
import pandas as pd

# Get a free MAP_KEY at https://firms.modaps.eosdis.nasa.gov/api/map_key/
key = os.environ["FIRMS_MAP_KEY"]
source = "VIIRS_SNPP_SP"          # or MODIS_SP for the MODIS archive
bbox = "-124.5,32.5,-114.0,42.0"  # west,south,east,north
url = f"https://firms.modaps.eosdis.nasa.gov/api/area/csv/{key}/{source}/{bbox}/5/2025-08-01"

r = requests.get(url, timeout=60)
r.raise_for_status()
df = pd.read_csv(io.StringIO(r.text))
print(len(df), "detections")
print(df[["latitude", "longitude", "acq_date", "confidence"]].head())
Fetch a GIBS true-color tileJavaScript
// Build a GIBS WMTS tile URL (no key, CORS enabled) for a given day.
// Layer names come from the GIBS capabilities document.
const layer = "MODIS_Terra_CorrectedReflectance_TrueColor";
const date = "2026-10-01";
const [zoom, row, col] = [2, 1, 2];
const url = `https://gibs.earthdata.nasa.gov/wmts/epsg4326/best/${layer}` +
  `/default/${date}/250m/${zoom}/${row}/${col}.jpg`;

const res = await fetch(url);
console.log(res.status, res.headers.get("content-type"), url);
// In a map library (Leaflet, OpenLayers) use the same template with
// {z}/{y}/{x}. Fire layers such as VIIRS_SNPP_Thermal_Anomalies_375m_All
// are vector tiles (.mvt, 500m matrix set); check the capabilities XML.

Try a live search

Ask NASA's Common Metadata Repository for the five newest files in MODIS/Terra Thermal Anomalies/Fire 5-Min L2 Swath 1km (MOD14) V061. This runs in your browser and needs no login.