Before starting, make sure you understand these terms. They appear throughout all code blocks in this course.
| Term | Full Name | What it means in simple words |
|---|---|---|
| CEEI | Composite Environmental Exposure Index | A integrated spatial score combining air quality metrics and land surface temperature to quantify multi-hazard environmental stress. |
| NO2 | Nitrogen Dioxide | A reactive gas emitted from combustion processes that serves as a major urban air pollutant linked to respiratory health issues. |
| LST | Land Surface Temperature | The radiative temperature of the Earth surface measured by thermal remote sensing sensors. |
| GHSL | Global Human Settlement Layer | A spatial data framework produced by the European Commission providing global population distribution and built-up characteristics. |
| IoT | Internet of Things | A network of physical sensors collecting real-time environmental data that complement satellite remote sensing. |
| Spatial Autocorrelation | Spatial Autocorrelation | The statistical measure of degree to which spatial features located close together in space share similar values. |
| Pop Exposure Burden | Population Exposure Burden | The multiplicative product of environmental hazard intensity and population density within a given spatial unit. |
| TROPOMI | TROPOspheric Monitoring Instrument | The satellite spectrometer aboard Copernicus Sentinel-5P measuring atmospheric trace gases at high spatial resolution. |
| Syndromic Surveillance | Syndromic Surveillance | The real-time tracking of non-specific health indicators to detect potential disease outbreaks before formal clinical confirmation. |
| UHI | Urban Heat Island | A phenomenon where urban regions experience significantly higher temperatures than surrounding rural hinterlands. |
| MAUP | Modifiable Areal Unit Problem | A statistical bias occurring when point data are aggregated into arbitrary spatial boundary units. |
| ERA5 | ECMWF Reanalysis v5 | A comprehensive global atmospheric climate reanalysis dataset produced by ECMWF. |
Urban populations across global megacities face compound environmental health risks from elevated atmospheric pollutants and extreme heat stress. Remote sensing, combined with open population grids and IoT monitoring, enables continuous environmental exposure modeling at high spatial fidelity. This course demonstrates how to integrate Sentinel-5P NO2 atmospheric observations, MODIS surface thermal data, and GHSL population counts to compute exposure metrics for digital epidemiology and urban planning.
COPERNICUS/S5P/OFFL/L3_NO2You need two browser tabs open side by side throughout this course.
Course34_Digital Health and Environmental Exposure Monitoring in Global Cities
The prompt is the core skill of this course. A good prompt includes the exact dataset ID, band names, study area coordinates, dates, preprocessing steps, and desired outputs.
Paste the following code into your GEE code editor and click Run. Read the beginner notes below to understand what each line does.
// Define urban study region (London Metropolitan Area)
var roi = ee.Geometry.Point([-0.1276, 51.5074]).buffer(25000);
// Load Sentinel-5P Tropospheric NO2
var no2Col = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_NO2')
.select('tropospheric_NO2_column_number_density')
.filterBounds(roi)
.filterDate('2023-05-01', '2023-09-30');
var meanNO2 = no2Col.mean().clip(roi);
// Load MODIS Land Surface Temperature (LST)
var lstCol = ee.ImageCollection('MODIS/061/MOD11A2')
.select('LST_Day_1km')
.filterBounds(roi)
.filterDate('2023-05-01', '2023-09-30');
// Convert LST from raw scale factor to Celsius
var meanLST = lstCol.mean().multiply(0.02).subtract(273.15).clip(roi);
// Visualization parameters
var no2Vis = {min: 0.00002, max: 0.00015, palette: ['blue', 'cyan', 'green', 'yellow', 'red']};
var lstVis = {min: 15, max: 35, palette: ['blue', 'limegreen', 'yellow', 'orange', 'red']};
Map.centerObject(roi, 10);
Map.addLayer(meanNO2, no2Vis, 'Mean NO2 (mol/m2)');
Map.addLayer(meanLST, lstVis, 'Mean LST (C)');
Add this block after the previous code. It continues the analysis with additional processing and visualization.
// Load Population Grid from GHSL
var pop = ee.ImageCollection('JRC/GHSL/P2023D/GHS_POP')
.filter(ee.Filter.date('2020-01-01', '2020-12-31'))
.first()
.select('population_count')
.clip(roi);
// Min-Max normalization helper function
var normalize = function(img, roi) {
var stats = img.reduceRegion({
reducer: ee.Reducer.minMax(),
geometry: roi,
scale: 1000,
maxPixels: 1e8
});
var minVal = ee.Number(stats.values().get(0));
var maxVal = ee.Number(stats.values().get(1));
return img.subtract(minVal).divide(maxVal.subtract(minVal));
};
var normNO2 = normalize(meanNO2, roi);
var normLST = normalize(meanLST, roi);
// Calculate Composite Environmental Exposure Index (CEEI)
var ceei = normNO2.multiply(0.5).add(normLST.multiply(0.5)).rename('CEEI');
// Estimate Population Exposure Weighted Score
var popBurden = ceei.multiply(pop).rename('Pop_Burden');
// Visualization
Map.addLayer(ceei, {min: 0, max: 1, palette: ['white', 'yellow', 'orange', 'purple']}, 'Composite Exposure Index');
Map.addLayer(popBurden, {min: 0, max: 500, palette: ['white', 'pink', 'red', 'maroon']}, 'Population Burden Index');
Add this block at the end of your script to export the final map as a GeoTIFF to your Google Drive. After clicking Run, go to the Tasks tab in GEE and click Run next to each export task.
// Export the Population Burden raster to Google Drive
Export.image.toDrive({
image: popBurden,
description: 'London_Population_Exposure_Burden_2023',
folder: 'GEE_Digital_Health',
scale: 1000,
region: roi,
maxPixels: 1e8
});
Use DeepSeek to extend the script for each exercise below. Write a follow-up prompt describing what you want to add, then copy the generated code and paste it into your GEE script.
To get the best results from DeepSeek for GEE tasks, always include these elements in your prompts:
| Element | Example |
|---|---|
| Exact dataset ID | COPERNICUS/S5P/OFFL/L3_NO2 |
| Band names | "select band 'B4' for red, 'B8' for NIR" |
| Study area | "rectangle [-6.5, 33.0, -1.5, 36.0] North Morocco" |
| Date range | "filter from 2020-01-01 to 2023-12-31" |
| Output format | "print area in hectares, add a legend, export to Drive" |
| Error fixing | "The code gives error X. Please fix it." |
| Iteration | "Add a time series chart for each year 2018-2023" |