Lab 28 - Health Applications

Objective: Use satellite data to create public health indicators including land surface temperature exposure and access-to-green-space metrics.

What You'll Learn

  • Retrieve and visualize land surface temperature (LST) from Landsat
  • Compute population-weighted heat exposure at neighborhood scale
  • Map access to green space as a proxy for heat mitigation
  • Summarize results by administrative units with zonal statistics

Why This Matters

Environmental health inequities are measurable with remote sensing:

  • Heat vulnerability: Extreme heat kills more people than any other weather event
  • Environmental justice: Low-income neighborhoods often have less green space and higher temperatures
  • Urban planning: Data can guide tree planting and cooling center placement
  • Climate adaptation: Heat exposure will increase with climate change

Before You Start

  • Prerequisites: Complete introductory modules on LST and zonal statistics.
  • Estimated time: 75 minutes
  • Materials: Earth Engine account and a city of interest.

Key Terms

Land Surface Temperature (LST)
Temperature of the Earth's surface as measured by thermal infrared sensors.
Population-Weighted Exposure
An exposure metric that accounts for where people actually live, not just spatial averages.
Green Space Access
Proximity to parks and vegetation, often measured as distance or percent population within buffer.
Heat Island Effect
The phenomenon where urban areas are warmer than surrounding rural areas due to buildings and pavement.

Datasets Used

Dataset Purpose Resolution
Landsat 8/9 L2 Land Surface Temperature 100m thermal
WorldPop Population density 100m
OSM Landuse Parks and green space Vector
GADM/Census Administrative boundaries Vector

Part A: Land Surface Temperature and Exposure

  1. Pick a city of interest and define an area of interest (AOI)
  2. Load Landsat 8/9 L2 imagery, filter by date and cloud cover
  3. Convert thermal band to temperature (Kelvin, then Celsius)
  4. Load population raster and compute population-weighted LST

Starter Code

// 1) Study area - San Francisco Bay example
var city = ee.Geometry.Rectangle([-122.6, 37.6, -121.7, 37.95]);
Map.centerObject(city, 9);

// 2) Landsat 8/9 L2 collection
var l2 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
    .filterBounds(city)
    .filterDate('2021-06-01', '2021-09-30')
    .filter(ee.Filter.lt('CLOUD_COVER', 20));

// Convert L2 thermal band (ST_B10) to Kelvin
function toKelvin(img) {
    var kelvin = img.select('ST_B10').multiply(0.00341802).add(149.0)
        .updateMask(img.select('QA_PIXEL').bitwiseAnd(1).not());
    return kelvin.copyProperties(img, img.propertyNames());
}

var lst = l2.map(toKelvin).median().rename('LST_K').clip(city);
Map.addLayer(lst.subtract(273.15), 
    {min: 20, max: 45, palette: ['blue','cyan','yellow','red']}, 
    'LST (C)');

// 3) Population grid (WorldPop 2020)
var pop = ee.ImageCollection('WorldPop/GP/100m/pop')
    .filterDate('2020-01-01', '2020-12-31').mean()
    .clip(city).rename('pop');

// 4) Administrative units
var admin = ee.FeatureCollection('FAO/GAUL/2015/level2')
    .filterBounds(city)
    .filter(ee.Filter.eq('ADM0_NAME','United States of America'));

// 5) Population-weighted exposure = sum(pop * LST) / sum(pop)
var lstC = lst.subtract(273.15).rename('LST_C');
var popLst = pop.multiply(lstC).rename('pop_x_lst');

var combined = popLst.addBands(pop);
var stats = combined.reduceRegions({
    collection: admin, 
    reducer: ee.Reducer.sum().repeat(2), 
    scale: 100, 
    tileScale: 4
});

// Compute weighted mean
var results = stats.map(function(f){
    var s = ee.Number(f.get('sum'));
    var p = ee.Number(f.get('sum_1'));
    return f.set({pw_mean_LST_C: s.divide(p)});
});

print('Population-weighted LST (C) by admin unit', results.limit(5));
Map.addLayer(admin.style({color: 'white', width: 1}), {}, 'Admin');

Part B: Access to Green Space

  1. Load parks/green space polygons from OpenStreetMap
  2. Create 300m buffers around green spaces
  3. Calculate percent of population within green buffers by admin unit

Starter Code

// Load OSM green space
var osm = ee.FeatureCollection('projects/sat-io/open-datasets/OSM/landuse')
    .filterBounds(city)
    .filter(ee.Filter.inList('fclass', ['park','recreation_ground','grass']));

// Create 300m buffer around green spaces
var greenBuf = osm.map(function(f){return f.buffer(300)});
var greenImg = ee.Image(1).updateMask(
    ee.FeatureCollection(greenBuf).reduceToImage({
        properties: [], reducer: ee.Reducer.count()
    }).gt(0)
).rename('green');

// Calculate population within green buffer
var popInGreen = pop.updateMask(greenImg);
var s2 = ee.Image.cat(popInGreen.rename('pop_green'), pop.rename('pop_total'));
var greenStats = s2.reduceRegions({
    collection: admin, 
    reducer: ee.Reducer.sum().repeat(2), 
    scale: 100, 
    tileScale: 4
});

// Calculate percentage
var withPct = greenStats.map(function(f){
    var pg = ee.Number(f.get('sum')); 
    var pt = ee.Number(f.get('sum_1')); 
    return f.set({pct_pop_within_300m_green: pg.divide(pt).multiply(100)});
});

print('Population within 300m of green space (%)', withPct.limit(5));

Check Your Understanding

  1. Why use population-weighted LST instead of simple spatial average?
  2. What distance buffer would you use for "walkable" access to parks?
  3. How might green space access correlate with LST patterns?
  4. What other health-relevant variables could you derive from satellite data?

Troubleshooting

Problem: LST values seem unrealistic

Solution: Check the scale factor conversion. Landsat L2 thermal uses specific coefficients. Make sure you're subtracting 273.15 to convert from Kelvin to Celsius.

Problem: Population-weighted calculation returns null

Solution: Ensure popLst and pop bands align spatially. Use tileScale: 4 or higher for large areas.

Problem: No green spaces found

Solution: OSM coverage varies. Try different fclass values or use a different green space dataset.

Pro Tips

  • Use summer imagery: Heat exposure is most relevant during hot months
  • Time of day matters: Landsat passes around 10:30am local time
  • Normalize by area: When comparing units of different sizes
  • Consider nighttime LST: MODIS provides both day and night observations

📋 Lab Submission

Subject: Lab 28 - Health Applications - [Your Name]

Submit:

  • Map layers: LST (C), administrative boundaries, green buffers
  • Table: population-weighted LST and % within 300m of green space
  • Short reflection (5-8 sentences): Where are the hotspots? Which neighborhoods have lower green access?
  • Earth Engine script URL and export summary as CSV