Project 7 — Environmental Risk Analysis¶
Difficulty
🔴 Advanced. ~16–20 hours.
Goal¶
"Which neighborhoods in [your area] face the highest combined environmental risk — flood, wildfire, heat — adjusted for social vulnerability?"
This project marries physical hazard layers with social vulnerability indices (SVI) to identify the most at-risk communities.
Data needed¶
| Layer | Source |
|---|---|
| Census tracts | TIGER/Line |
| FEMA flood zones | https://msc.fema.gov/portal/advanceSearch |
| Wildfire risk (US) | USDA Forest Service WUI, or FEMA NRI |
| Urban heat / land surface temp | Landsat 8 thermal band, or NASA SEDAC |
| CDC Social Vulnerability Index (SVI) | https://www.atsdr.cdc.gov/place-health/php/svi/index.html |
| Population by tract | Census ACS |
Tools used¶
- Spatial Analyst: Reclassify, Weighted Overlay, Zonal Statistics
- Spatial Join, Tabulate Intersection
- Raster Calculator for thermal band → land surface temperature
Workflow¶
Step 1 — Set up¶
- Project:
env_risk_<area>. - Project to State Plane.
- Standardize all rasters to 30 m, snapped to the same raster.
Step 2 — Build the hazard score (per tract)¶
For each hazard, compute a per-tract score 1–5.
Flood score¶
- Polygon to Raster on FEMA flood zones (assign higher value to AE/A/VE).
- Tabulate Intersection → percent of each tract in flood zones.
- Bin: 0% → 1, ≤5% → 2, ≤15% → 3, ≤30% → 4, >30% → 5.
Add field FLOOD_SCORE.
Wildfire score¶
- Use the wildfire risk raster.
- Zonal Statistics as Table — mean wildfire risk per tract.
- Reclassify the mean into 5 bins (quintile or NRI thresholds).
Add field FIRE_SCORE.
Urban heat score¶
- From Landsat 8 thermal band (Band 10), compute Land Surface Temperature.
- Zonal Statistics — mean LST per tract.
- Reclassify: cooler tracts = lower score.
Add field HEAT_SCORE.
Step 3 — Combine into HAZARD_SCORE¶
def hazard(flood, fire, heat):
f = flood or 0
w = fire or 0
h = heat or 0
return (f * 0.35 + w * 0.35 + h * 0.30)
Add field HAZARD_SCORE = hazard(!FLOOD_SCORE!, !FIRE_SCORE!, !HEAT_SCORE!).
Adjust weights for your area (e.g., heavier flood weight in coastal regions).
Step 4 — Bring in social vulnerability¶
CDC SVI is already a 0–1 score per tract. Higher = more vulnerable.
- Join SVI to tracts on FIPS.
- Standardize: bin into 5 quintiles,
SVI_BIN1–5.
Step 5 — Combine into RISK_SCORE¶
The classic equation:
Or weighted:
Add RISK_SCORE.
Step 6 — Categorize¶
def cat(risk):
if risk is None: return "Unknown"
if risk >= 4.0: return "Very High"
if risk >= 3.0: return "High"
if risk >= 2.0: return "Moderate"
return "Low"
Add RISK_CATEGORY.
Step 7 — Map¶
- Symbology: Unique Values on
RISK_CATEGORYwith a sequential reds/yellows palette. - Overlay each individual hazard as a small inset (3 thumbnails).
- Highlight top 10 highest-risk tracts.
- Build an ArcGIS Online dashboard:
- The risk map
- A bar chart of top tracts
- Clickable filters by hazard
- A KPI: "X% of metro population in High or Very High risk."
Step 8 — Story Map¶
A 5-section narrative:
- Why combined risk matters (vs single-hazard)
- The data and methodology
- Each individual hazard
- Combined risk
- Recommendations / who acts
Skills learned¶
- Multi-hazard integration
- Zonal statistics across multiple rasters
- SVI / CDC index integration
- Hazard × vulnerability framing (industry standard)
- Cross-source ETL
Portfolio value¶
This is the climate-resilience and emergency-management portfolio piece. Cities, counties, FEMA, NGOs, and consulting firms work on this exact framing.
Stretch goals¶
- Add air quality (PurpleAir, EPA AQS) as a fourth hazard.
- Compare future climate scenarios with downloaded NCA or CMIP6 data.
- Cross-reference with HUD CDBG-DR funding to identify under-funded high-risk tracts.
- Build a model in ModelBuilder so the whole analysis runs with a single click.
🎓 You've reached the most advanced project in the roadmap. After shipping any 3 of these 7, you have a portfolio strong enough to apply for entry-level GIS roles.
→ Now: GIS Career Roadmap.