q03·intermediate
How has air quality changed in my city over the last decade?
atmosphereair-qualitypublic-healthurban Datasets: 5 10–30 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:
72.7, 18.9 → 73.1, 19.3 (Greater Mumbai)How has air quality changed in my city over the last decade?
What you can answer
- NO₂ column trend over 5+ years (OMI 2004+, TROPOMI 2018+, TEMPO 2023+ for North America)
- Aerosol optical depth (AOD) trend (MODIS MAIAC, MOD/MYD04)
- Seasonal cycle changes (weekday vs weekend, summer vs winter)
- COVID-19 anomaly (the canonical 2020 drop in NO₂)
- Post-policy intervention impact (e.g., diesel-truck restrictions, EV adoption)
What you can NOT answer with these alone
- Surface concentrations. Satellites measure column-integrated burden; surface NO₂ requires combining with chemistry-transport model output.
- Specific source attribution without ancillary land-use + emissions inventory data.
- Hourly cycles before 2024 outside North America (TEMPO is GEO; OMI/TROPOMI are polar-orbit daily).
Code template
import earthaccess
import xarray as xr
earthaccess.login(strategy="netrc")
# AOI: greater Mumbai
aoi = (72.7, 18.9, 73.1, 19.3)
# 1. OMI L2 NO2 — long backbone
omi = earthaccess.search_data(short_name="OMNO2", bounding_box=aoi,
temporal=("2015-01-01", "2025-12-31"))
# Open + extract ColumnAmountNO2Trop, average monthly per pixel
# 2. TROPOMI overlap (2018+) — higher resolution
trop = earthaccess.search_data(short_name="S5P_L2__NO2___", bounding_box=aoi,
temporal=("2018-04-01", "2025-12-31"))
# 3. Build a unified time series:
# - OMI monthly mean for 2015-2017 (pre-TROPOMI)
# - TROPOMI monthly mean for 2018-2025
# - Apply known bias correction between OMI and TROPOMI
# 4. Plot 2015-2025 trend, annotate COVID-19 dip, policy changes
Expected output
- Line chart: monthly mean tropospheric NO₂ column 2015–present, with overlay markers for known interventions
- Map: spatial pattern of NO₂ for two epochs (e.g., 2015-2019 mean vs 2020-2024 mean)
- Seasonal cycle: weekly cycle showing weekday vs weekend signal
Caveats
- OMI row anomaly: discard rows 24-52 (and later, more) since 2007. Use the
XTrackQualityFlags. - OMI 13×24 km vs TROPOMI 5×3.5 km: different spatial averaging when comparing epochs. Either downsample TROPOMI to OMI grid or upscale OMI with caution.
- Cloud filter: clouds eat 30-70% of observations per scene. Aggregate monthly to smooth.
- The 2020 COVID dip is a known reference event — your trend pipeline should reproduce it as a sanity check.
Cross-DAAC composition
GES DISC for OMI/TROPOMI; ASDC for TEMPO; both via earthaccess + Earthdata Login. Single auth flow.
Sources
- OMI NO₂ user guide: https://disc.gsfc.nasa.gov/datasets/OMNO2_003/summary
- TROPOMI NO₂: https://disc.gsfc.nasa.gov/datasets/S5P_L2__NO2____1/summary
- TEMPO project: https://tempo.si.edu/
Datasets used
📚 Problem Finder KB
Not yet tracked in the KB.