This walkthrough shows, step by step, how we build the CHCCS Environmental Analysis Map — from raw public data to the final combined visualization.
We use Glenwood Elementary as a running example to illustrate each step, but the exact same methodology is applied equally to all 11 CHCCS elementary schools.
The map on the right shows the CHCCS school district boundary. All data is loaded from public sources and cached locally.
We begin with the locations of all 11 CHCCS elementary schools, downloaded from the National Center for Education Statistics (NCES) EDGE Public School Locations dataset (2023-24 school year).
The blue marker highlights Glenwood Elementary, our focus school. All other schools appear as smaller gray markers.
We download the complete road network from OpenStreetMap via the OSMnx library. Roads are color-coded by their OSM classification (motorway, primary, secondary, etc.).
Each road type receives a proxy weight reflecting its expected traffic volume. Motorways (weight 1.0) carry the most traffic; residential streets (0.01) carry the least.
| Road Type | Weight | Example |
|---|---|---|
| Motorway | 1.000 | I-40 |
| Primary | 0.300 | US-15-501 |
| Secondary | 0.150 | Estes Dr |
| Tertiary | 0.060 | Weaver Dairy Rd |
| Residential | 0.010 | Local streets |
Where available, we replace proxy weights with actual traffic counts from the North Carolina Department of Transportation (NCDOT). AADT = Annual Average Daily Traffic.
Each orange diamond on the map marks an NCDOT counting station. When a station is within 50 meters of an OSM road segment, its measured traffic count overrides the proxy weight.
The AADT-derived weight is: AADT / 50,000 (where 50,000 is the
motorway reference baseline).
Roads are now recolored by their final weight — a blend of proxy classifications and AADT overrides where available. Brighter red = higher weight = more expected pollution.
This gives us a pollution source map: every road segment has a weight proportional to its expected traffic-related emissions (NOx, black carbon, ultrafine particles).
Traffic pollution doesn't stay on the road — it disperses with distance. We model this as exponential decay: pollution drops off rapidly in the first 100-200 meters, then tails off more slowly.
The concentric rings show decay distances from Glenwood Elementary:
| Distance | Remaining |
|---|---|
| 100 m | 74% |
| 250 m | 47% |
| 500 m | 22% |
| 1,000 m | 5% |
The school's TRAP score sums contributions from every nearby road segment, each decayed by distance.
Applying the decay model to every road segment produces a continuous pollution surface across the district at 100-meter resolution.
Warmer colors (yellow → red) indicate higher cumulative TRAP exposure. The hottest zones follow major road corridors.
This is the raw pollution index — before accounting for any mitigating factors like tree cover.
To account for tree canopy mitigation, we use the ESA WorldCover satellite land cover dataset (10-meter resolution, 2021).
The map shows land cover classes near Glenwood: green = tree cover, red = built-up/impervious surfaces, blue = water, etc.
Trees reduce air pollution through particle deposition on leaves and aerodynamic dispersion. More canopy = more pollution reduction.
We compute tree canopy percentage around each grid cell and reduce the raw pollution score accordingly:
net = raw × (1 − α × canopy%)
With α = 0.56 (2.8% PM2.5 reduction per 5% canopy increase, from Nowak et al. 2014) and a maximum 80% reduction cap.
The result is the net pollution grid — raw scores reduced by local tree cover. Areas with dense canopy show noticeably lower values.
Flood risk is the second environmental layer. We load FEMA National Flood Hazard Layer polygons, classified into:
These polygons show areas with significant flood risk according to FEMA's flood insurance rate maps.
We overlay flood zones on school property parcels from Orange County GIS data to determine what percentage of each school's land falls within a flood zone.
The green polygon shows Glenwood's property boundary. Any red-highlighted area indicates overlap with a flood zone.
This intersection is computed in UTM coordinates (EPSG:32617) for accurate area measurements, then converted to acres.
The third environmental layer uses the same ESA WorldCover data to estimate relative heat exposure (Urban Heat Island effect).
Each land cover class receives a thermal weight: built-up surfaces contribute heat (+1.0), while trees provide cooling (-0.6). The weighted sum is normalized to a 0-100 scale.
| Land Cover | Weight | Effect |
|---|---|---|
| Built-up | +1.00 | Heat source |
| Bare/sparse | +0.40 | Heat absorption |
| Tree cover | −0.60 | Cooling |
| Water | −0.50 | Thermal buffer |
The final environmental analysis map combines all three layers:
In the full map, users toggle between layers using radio buttons (TRAP, UHI) and checkboxes (flood, tree canopy). This zoom-out shows the district-wide view with all data visible.
Each school receives scores at 500m and 1,000m radii, enabling direct comparison across all 11 schools.
This analysis has important limitations that users should understand:
For the full list of 23 known limitations, see the Environmental Analysis documentation.
All source code is available in this repository. Each data source is documented with its provider, access date, and refresh method.