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 |
|---|---|---|
| Vector-Borne Disease | Vector-Borne Disease (VBD) | Infectious diseases transmitted by arthropods such as mosquitoes, ticks, and sandflies. |
| Environmental Suitability | Environmental Habitat Suitability | The degree to which environmental conditions satisfy the ecological requirements for vector survival and reproduction. |
| Thermal Performance Curve | Thermal Performance Curve (TPC) | The non-linear relationship between ambient temperature and vector biological traits like biting rate or pathogen incubation. |
| Extrinsic Incubation Period | Extrinsic Incubation Period (EIP) | The time required for a pathogen to develop inside a vector before becoming transmissible to a human host. |
| Environmental Exposure | Environmental Health Exposure Proxy | Satellite-derived measures of environmental conditions that favor vector habitat, distinct from direct disease occurrence. |
| Random Forest | Random Forest Classifier | An ensemble machine learning technique combining multiple decision trees to predict suitability from environmental covariates. |
| Spatial Autocorrelation | Spatial Autocorrelation | The tendency for geographical observations close to each other to have similar environmental or epidemiological values. |
| ERA5-Land | ECMWF ERA5-Land Reanalysis | A high-resolution global atmospheric dataset providing continuous climate estimates over land. |
| CHIRPS | Climate Hazards Group InfraRed Precipitation with Station data | A quasi-global rainfall dataset designed for monitoring precipitation extremes and climate trends. |
| LST | Land Surface Temperature | The radiative skin temperature of the Earth surface measured by infrared satellite sensors. |
| Ecological Niche Model | Ecological Niche Modeling (ENM) | A computational method mapping environmental conditions that correspond to species presence or suitability. |
| Confounding Variable | Confounding Variable | An unmeasured factor such as vector control measures or healthcare infrastructure that alters observed health relationships. |
Global climate change is altering the geographic range and seasonal transmission dynamics of vector-borne diseases such as dengue, malaria, and chikungunya. This course introduces an advanced GeoAI framework that integrates ERA5-Land climate reanalysis, MODIS land surface temperature, and CHIRPS precipitation data to evaluate vector habitat suitability across tropical and subtropical regions. Students will combine remote sensing climate proxies with Random Forest classification in Google Earth Engine to predict environmental suitability and assess human population exposure.
ECMWF/ERA5_LAND/MONTHLY_AGGRYou need two browser tabs open side by side throughout this course.
Course31_Global Climate Change and Vector-Borne Disease Risk Modeling
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.
var roi = ee.Geometry.Polygon([
[[-120, 30], [-120, -30], [150, -30], [150, 30]]
], null, false);
var startDate = '2022-01-01';
var endDate = '2022-12-31';
var era5 = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')
.filterDate(startDate, endDate)
.select('temperature_2m');
var meanAirTempC = era5.mean().subtract(273.15).rename('air_temp_c');
var modisLST = ee.ImageCollection('MODIS/061/MOD11A2')
.filterDate(startDate, endDate)
.select(['LST_Day_1km', 'LST_Night_1km']);
var meanLST = modisLST.mean().multiply(0.02).subtract(273.15).rename(['lst_day_c', 'lst_night_c']);
var chirps = ee.ImageCollection('UCSB-CHG/CHIRPS/PENTAD')
.filterDate(startDate, endDate)
.select('precipitation');
var totalPrecip = chirps.sum().rename('annual_precip_mm');
var predictorStack = meanAirTempC
.addBands(meanLST.select('lst_day_c'))
.addBands(totalPrecip)
.clip(roi);
Map.centerObject(roi, 3);
Map.addLayer(predictorStack.select('air_temp_c'), {min: 10, max: 35, palette: ['blue', 'yellow', 'red']}, 'Mean Air Temp (C)');
Map.addLayer(predictorStack.select('annual_precip_mm'), {min: 100, max: 3000, palette: ['white', 'cyan', 'darkblue']}, 'Annual Precip (mm)');
Add this block after the previous code. It continues the analysis with additional processing and visualization.
var tempSuitability = predictorStack.select('air_temp_c').gte(20).and(predictorStack.select('air_temp_c').lte(32));
var precipSuitability = predictorStack.select('annual_precip_mm').gte(500);
var pseudoSuitability = tempSuitability.and(precipSuitability).rename('suitability');
var presencePoints = pseudoSuitability.selfMask().stratifiedSample({
numPoints: 400,
classBand: 'suitability',
region: roi,
scale: 20000,
geometries: true
}).map(function(f) { return f.set('label', 1); });
var absencePoints = pseudoSuitability.not().selfMask().stratifiedSample({
numPoints: 400,
classBand: 'suitability',
region: roi,
scale: 20000,
geometries: true
}).map(function(f) { return f.set('label', 0); });
var trainingData = presencePoints.merge(absencePoints);
var trainingSamples = predictorStack.sampleRegions({
collection: trainingData,
properties: ['label'],
scale: 20000,
tileScale: 4
});
var classifier = ee.Classifier.smileRandomForest(100)
.train({
features: trainingSamples,
classProperty: 'label',
inputProperties: predictorStack.bandNames()
});
var suitabilityMap = predictorStack.classify(classifier);
Map.addLayer(suitabilityMap, {min: 0, max: 1, palette: ['lightgray', 'orange', 'red']}, 'RF Environmental Suitability Proxy');
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.image.toDrive({
image: suitabilityMap,
description: 'Global_Tropical_Vector_Suitability_2022',
folder: 'GEE_Vector_Health_Exports',
fileNamePrefix: 'vector_suitability_rf_2022',
region: roi,
scale: 10000,
crs: 'EPSG:4326',
maxPixels: 1e9
});
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 | ECMWF/ERA5_LAND/MONTHLY_AGGR |
| 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" |