q14·intermediate
When and where do harmful algal blooms occur in my coastal waters?
oceanbiologywater-qualitypublic-health Datasets: 5 20–60 min
▶ Find the data for your area
Draw a rectangle to pick your area of interest, then see what NASA data covers it (live, here in your browser) or download a ready-to-run notebook with your AOI pre-filled. The notebook runs in any Python environment — it needs a free Earthdata Login to fetch the data.
Current AOI:
-71, 41 → -67, 45 (Gulf of Maine)When and where do harmful algal blooms occur in my coastal waters?
What you can answer
- Chlorophyll-a anomaly maps flagging unusually high productivity (potential bloom)
- Phytoplankton functional type discrimination (PACE hyperspectral) — distinguish cyanobacteria from diatoms
- Bloom seasonality — 22-year MODIS Aqua climatology for your bay/coast
- Spatial extent + persistence of an active bloom
- Trend over the satellite era — has bloom frequency or intensity changed?
What you can NOT answer with these alone
- Toxin concentrations (microcystin, brevetoxin) — requires water sampling
- Health risk without combining with shellfish-bed and beach-use data
- Sub-surface bloom layers — satellites see only the top optical depth (~5-30 m depending on water clarity)
- Definitive species identification — PACE hyperspectral suggests type; species-level needs lab
Code template
import earthaccess
import xarray as xr
import numpy as np
earthaccess.login(strategy="netrc")
# Gulf of Maine harmful algal bloom monitoring
aoi = (-71, 41, -67, 45)
# 1. PACE OCI hyperspectral chlorophyll (the new tool)
pace = earthaccess.search_data(short_name="PACE_OCI_L2_OC_NRT",
bounding_box=aoi,
temporal=("2024-04-01", "2025-12-31"))
# Extract chl-a, plus phytoplankton functional type if available
# Threshold: Chl > 10 mg/m³ → potential bloom
# 2. MODIS Aqua chlorophyll for long-term climatology
modis = earthaccess.search_data(short_name="MODISA_L3m_CHL",
bounding_box=aoi,
temporal=("2002-07-01", "2025-12-31"))
# Compute monthly climatology (mean per pixel per month-of-year)
# Compute current-year anomaly vs climatology
# 3. PACE absorption-by-CDOM (aCDOM)
# High aCDOM = freshwater inputs / runoff (often drives blooms)
pace_cdom = earthaccess.search_data(short_name="PACE_OCI_L2_BGC",
bounding_box=aoi, temporal=("2024-04-01", "2025-12-31"))
# 4. Plot:
# - Current bloom intensity map
# - Bloom-area time series 2002+
# - Phytoplankton-type pie chart per bloom event
Expected output
- Chlorophyll-a anomaly map flagging current bloom-affected pixels
- Time-series: total bloom area (km²) over 22 years showing potential trend
- PFT composition: % cyanobacteria vs diatoms vs other (PACE)
- aCDOM context: when is runoff driving the bloom?
Caveats
- Coastal Case-II waters are hard for satellite ocean-color retrievals (CDOM, sediment, shallow bottom). PACE handles these better than MODIS but algorithms are still maturing.
- Cloud cover destroys retrievals. Aim for 8-day or monthly composites in cloudy regions.
- Chl > threshold ≠ bloom — some bays are naturally productive. Use the ANOMALY (current minus climatology), not absolute chl.
- Toxin concentration is NOT proportional to chl — some species produce intense toxins at low cell counts
- MODIS reprocessing R2022.0 vs R2018.0 — use R2022.0 by default; reprocess any older data
Cross-DAAC composition
OB.DAAC only — both PACE and MODIS Aqua ocean color, single DAAC.
Sources
- PACE ocean color: https://pace.oceansciences.org/oci.htm
- NOAA HAB Operational Forecast (US): https://oceanservice.noaa.gov/hazards/hab/
- OceanColor processing: https://oceancolor.gsfc.nasa.gov/
📚 Problem Finder KB
Not yet tracked in the KB.