Did the power go out after this storm — and where?
Analysis-ready products for actual events that this question maps to — open each in the catalog, or browse them on the NASA Disasters Portal.
Draw a rectangle, then check which collections cover it. Most NASA data is global, so a big box matches a lot.
-82.15, 33.36 → -81.9, 33.55 (Augusta, Georgia)Nighttime lights are exactly what they sound like. A satellite looks down at Earth after dark and measures how brightly each spot glows: streetlights, houses, businesses. When a hurricane knocks out the power grid, those lights go dark. So a neighbourhood that was bright before the storm and black afterwards is a visible, mappable signal that the power went out there. This is the analysis behind the Disasters Portal's Hurricane-Helene power-outage maps.
Did the power go out after this storm — and where?
Nighttime lights are exactly what they sound like. A satellite looks down at Earth after dark and measures how brightly each spot glows: streetlights, houses, businesses. When a hurricane knocks out the power grid, those lights go dark. So a neighbourhood that was bright before the storm and black afterwards is a visible, mappable signal that the power went out there. This is the analysis behind the Disasters Portal’s Hurricane-Helene power-outage maps.
Which data to use, and how
Use this dataset: Black Marble VNP46A2 (short name VNP46A2). It gives you one cleaned-up brightness image per night, already corrected so that an ordinary night and a moonlit night are comparable. That’s what you need to compare “before” and “after” fairly. (Behind it sits the raw nighttime radiance from an instrument called the VIIRS Day/Night Band. Black Marble is that raw signal, tidied up.)
Then do five steps. The runnable code further down does all of this; this is just the idea.
- Pick the area: a small latitude/longitude box around the storm-hit town, plus two dates: a clear night before the storm and a clear night after it.
- Grab both nights’ brightness images for that box.
- Subtract one from the other, after minus before. Places where brightness dropped a lot are where the lights went out.
- Throw away the cloudy pixels. Each image comes with a flag marking spots the satellite couldn’t see clearly. Ignore those so a cloud doesn’t get mistaken for an outage.
- Overlay where people live so you can rank the worst-hit, most-populated areas first.
That’s the whole method. Below, “How a scientist answers this” names the exact tools, and the Run it cell does it live on synthetic data so you can see each step work.
What you can find out
- Where the lights went out. Compare a clear pre-storm night to a post-storm night: neighbourhoods that dimmed or vanished are the likely outage areas.
- How recovery progresses. Track the lights coming back over the following nights.
- Relative severity. Bigger brightness drops over more people = higher-priority areas.
What it can’t tell you
- It’s a proxy, not a meter. Black Marble measures light, not the grid directly. A dark patch is strong evidence of an outage, but it’s an inference. The satellite never touches the wires.
- Exact customer counts. Light loss tracks outages closely, but it isn’t a utility’s outage feed. For a real customer number you need the utility itself.
- Anything under thick cloud. A storm brings its own clouds, and those can blind the sensor right when you most want to look. You have to wait for the first clear night before you can map anything.
Gotchas to watch for
- The night sky itself changes the brightness. Moonlight, snow cover, and even wildfire smoke can make the ground look brighter or darker than it really is, for reasons that have nothing to do with the power grid. That’s why this product is BRDF-corrected, a cleanup step that removes the effect of how light bounces off the surface under different conditions. It’s also why you should still compare clear nights only, never a clear night against a hazy one.
- Clouds masquerade as outages. A cloudy pixel goes dark for the same reason an unpowered one does: no light reaches the satellite. Each image carries a quality flag for cloudy pixels. Drop those pixels before you difference the two nights, or you’ll map clouds instead of outages.
- One night is noisy; the pattern is the signal. A single dark pixel can be a fluke. Trust a cluster of dimmed pixels over a neighbourhood, not one lonely point, and confirm recovery by watching the lights return over several nights.
The real-data code
The Run it cell above runs the method on synthetic data (no login). Below is the whole recipe against the real archive: search both nights, open them, difference after minus before, drop the cloudy pixels, find the worst-hit area, and plot the outage map. It needs a free Earthdata Login.
import earthaccess, numpy as np, xarray as xr
import matplotlib.pyplot as plt
earthaccess.login(strategy="netrc")
aoi = (-82.15, 33.36, -81.9, 33.55) # storm-hit box (W, S, E, N) — Augusta, Georgia
# 1. Find one clear night BEFORE the storm and one clear night AFTER it.
before = earthaccess.search_data(short_name="VNP46A2", bounding_box=aoi,
temporal=("2024-09-20", "2024-09-25"))
after = earthaccess.search_data(short_name="VNP46A2", bounding_box=aoi,
temporal=("2024-09-28", "2024-10-03"))
# 2. Open each night's VNP46A2 granule. The product is gridded HDF5-EOS, so xarray
# reads it straight from the HDF5_LH5 group holding the science layers.
def read_ntl(grans):
ds = xr.open_dataset(earthaccess.open(grans[:1])[0],
group="HDFEOS/GRIDS/VNP_Grid_DNB/Data Fields",
engine="h5netcdf")
ntl = ds["Gap_Filled_DNB_BRDF-Corrected_NTL"].astype("float32")
qf = ds["Mandatory_Quality_Flag"] # 0/1 good, 2 = poor/cloud
ntl = ntl.where(ntl != 65535) # drop the fill value
return ntl.where(qf < 2) # 3. keep only clear pixels
ntl_before = read_ntl(before)
ntl_after = read_ntl(after)
# 4. Difference the two nights: after minus before. A large negative value means a
# spot that was bright is now dark — the visible signature of a power outage.
delta = (ntl_after.values - ntl_before.values)
delta = np.where(np.isnan(ntl_before.values) | np.isnan(ntl_after.values), np.nan, delta)
# Where did the lights go out? Flag pixels that lost most of their pre-storm brightness.
lost = (delta < 0) & (ntl_before.values > 5) # was lit, now much dimmer
frac_dark = np.nansum(lost & (delta < -0.5 * ntl_before.values)) / max(np.nansum(lost), 1)
median_drop = np.nanmedian(delta[lost]) if np.any(lost) else 0.0
# 5. Print the verdict and map the outage.
print(f"~{100*frac_dark:.0f}% of lit pixels lost over half their light; "
f"median drop {median_drop:+.1f} nW/cm2/sr -> widespread outage" if frac_dark > 0.2
else "No widespread darkening — grid likely held or skies were not clear")
plt.imshow(delta, cmap="RdBu", vmin=-30, vmax=30)
plt.colorbar(label="after - before (nW/cm2/sr)")
plt.title("Nightlight change after the storm (blue = went dark)")
plt.tight_layout(); plt.show()
# Cross-check before trusting it: confirm the dark cluster against the utility's own
# outage feed, and use the next clear night to watch the lights return (see the gotchas).
Where the data comes from
All from NASA through one free login (Earthdata Login). Black Marble (VNP46A2 and the sharper Black Marble HD) is NASA’s nightlights product, built from the raw VIIRS Day/Night Band radiance: the same instrument, processed two ways. This work supports the Respond phase of the NASA Disasters program, which uses Earth data to help during emergencies.
Sources
- Supports the Respond phase of the NASA Disasters program. The interactive nightlights guide explains the method.
Make it yours → Set your AOI and pick clear pre-storm and post-storm dates, then overlay population to prioritize the hardest-hit areas.
A safe place to practise the method on VNP46A2. The code is the real earthaccess workflow, but we feed it stand-in data shaped like the real product — so you can run it, change the numbers, and break it without an account. When you want the real data, use the recipe under “The real-data code” above, or download the notebook below.
Computed · real data Worked examples, computed end-to-end on real satellite data — not yet scientist-verified · expand ▾
Not the answer for your own area — that you run yourself above. Two forests show the deforestation fingerprint (Amazon, Sumatra); three Indian forests come out a genuine null — the method discriminates, it doesn't just confirm. A change must clear an empirical noise floor to count; a null is reported as a null. Computed on Google Earth Engine.
Augusta, Georgia
Night-time lights over Augusta, Georgia changed by -44% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the ┊ tick to count as a real signal.
Provenance & full trace — reproducible
Every number came from this exact query on Google Earth Engine. Same query → same number.
Night-time lights over Augusta, Georgia changed by -44% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
San Juan, Puerto Rico
Night-time lights over San Juan, Puerto Rico changed by -33% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the ┊ tick to count as a real signal.
Provenance & full trace — reproducible
Every number came from this exact query on Google Earth Engine. Same query → same number.
Night-time lights over San Juan, Puerto Rico changed by -33% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
New Orleans, Louisiana
Night-time lights over New Orleans, Louisiana changed by -26% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the ┊ tick to count as a real signal.
Provenance & full trace — reproducible
Every number came from this exact query on Google Earth Engine. Same query → same number.
Night-time lights over New Orleans, Louisiana changed by -26% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.
Fort Myers, Florida
Not measurable for Fort Myers, Florida: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.
Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the ┊ tick to count as a real signal.
Provenance & full trace — reproducible
Every number came from this exact query on Google Earth Engine. Same query → same number.
Not measurable for Fort Myers, Florida: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.
Houston, Texas
Not measurable for Houston, Texas: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.
Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the ┊ tick to count as a real signal.
Provenance & full trace — reproducible
Every number came from this exact query on Google Earth Engine. Same query → same number.
Not measurable for Houston, Texas: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.