Module 5: Drought & Vegetation Monitoring
Satellite-derived vegetation indices and land surface temperature form the backbone of operational drought monitoring. This module covers the physics behind spectral indices, thermal retrieval from Planck inversion, and end-to-end Google Earth Engine pipelines for drought early warning systems combining NDVI anomalies, the Standardized Precipitation Index (SPI), and LST.
1. Spectral Vegetation Indices
Healthy vegetation absorbs strongly in the red (~660 nm) due to chlorophyll pigments and reflects strongly in the near-infrared (~860 nm) due to mesophyll cell structure. This contrast is the foundation for all vegetation indices. By combining reflectances from specific spectral bands, we can quantify vegetation health, water content, and burn severity from space.
The following four indices are the workhorses of operational drought and vegetation monitoring. Each exploits a different aspect of the plant spectral response, and together they provide a comprehensive picture of ecosystem status.
Normalized Difference Vegetation Index (NDVI)
The most widely used vegetation index. NDVI ranges from β1 to +1, where values above 0.3 indicate healthy vegetation and values below 0.1 correspond to bare soil or water.
Sentinel-2: B8 (842 nm) and B4 (665 nm). Landsat 8/9: B5 and B4.
Normalized Difference Water Index (NDWI)
Sensitive to leaf water content. Negative NDWI values indicate water stress. Used operationally in drought early warning systems worldwide.
Sentinel-2: B8A (865 nm) and B11 (1610 nm). Landsat 8/9: B5 and B6.
Enhanced Vegetation Index (EVI)
Reduces atmospheric and soil background effects using the blue band. Does not saturate in dense tropical canopies like NDVI, making it preferred for forests.
Sentinel-2: B8, B4, B2. MODIS: standard EVI product (MOD13Q1).
Normalized Burn Ratio (NBR)
Highlights burned areas by exploiting the increase in SWIR reflectance and decrease in NIR reflectance after fire. dNBR (pre-fire minus post-fire) quantifies burn severity.
Sentinel-2: B8A and B12 (2190 nm). Landsat 8/9: B5 and B7.
Practical Note: Atmospheric Correction
All indices require surface reflectance (bottom-of-atmosphere, BOA) rather than top-of-atmosphere (TOA) values. Sentinel-2 Level-2A products from ESA's Sen2Cor processor provide atmospherically corrected reflectances. For Landsat, use the Collection 2 Level-2 Science Products. Failure to use BOA reflectance introduces systematic biases, especially in the blue and SWIR bands.
2. Land Surface Temperature from Thermal IR
Satellite thermal infrared sensors (Landsat 8/9 TIRS, MODIS bands 31β32, Sentinel-3 SLSTR) measure the radiance emitted by Earth's surface at wavelengths around 10β12 ΞΌm. Converting this radiance to physical temperature requires inverting the Planck function and correcting for surface emissivity.
The brightness temperature $T_{bright}$ is obtained by inverting the Planck function assuming a blackbody (emissivity = 1). The true land surface temperature accounts for the actual emissivity $\varepsilon$ of the surface material:
where $\lambda$ is the effective wavelength of the thermal band,$\rho_c = hc/k_B = 1.438 \times 10^{-2}$ mΒ·K is the Planck radiation constant, and $\varepsilon$ is the surface emissivity. Typical emissivity values: vegetation ~0.98, bare soil ~0.93, water ~0.99, urban surfaces ~0.91.
Emissivity Estimation from NDVI
When emissivity measurements are unavailable, a common approach uses the NDVI-based Proportion of Vegetation ($P_v$) method. The fractional vegetation cover is:
Emissivity is then estimated as $\varepsilon = 0.004 \cdot P_v + 0.986$, valid for mixed pixels. Pure soil pixels ($NDVI < 0.2$) use a fixed emissivity of 0.97, and pure vegetation pixels ($NDVI > 0.5$) use 0.99.
Split-Window Technique
For higher accuracy, the split-window method uses two adjacent thermal bands (e.g., MODIS bands 31 and 32 at 11 and 12 ΞΌm) to simultaneously solve for atmospheric water vapor absorption and surface temperature. This eliminates the need for independent atmospheric profiles and achieves LST accuracy of ~1 K over most surfaces.
3. Spectral Signatures & Index Computation
The following simulation generates synthetic reflectance spectra for five common land cover types (dense vegetation, sparse vegetation, bare soil, water, and urban) across Sentinel-2's key bands. We then compute NDVI, EVI, and NDWI for each cover type and visualize the results.
Spectral Signatures & Vegetation Index Computation
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server
4. Drought Monitoring Framework
Operational drought monitoring integrates multiple satellite-derived indicators into a composite assessment. The key components are:
NDVI Anomaly
The departure of current NDVI from the long-term mean for the same period. Computed as$\Delta NDVI = NDVI_{current} - \overline{NDVI}_{climatology}$. Negative anomalies indicate vegetation stress relative to normal conditions. Typically uses MODIS 16-day composites (MOD13Q1) with a baseline period of 20+ years.
Standardized Precipitation Index (SPI)
A probability-based metric that normalizes precipitation data to a standard Gaussian distribution. SPI values below β1.0 indicate moderate drought, below β1.5 severe drought, and below β2.0 extreme drought. Can be computed at multiple timescales (1, 3, 6, 12 months) to capture different drought characteristics.
LST Anomaly
Elevated land surface temperature amplifies evapotranspiration and accelerates soil moisture depletion. MODIS-derived LST anomalies ($\Delta T_{LST}$) above +2β3 K signal thermal stress. Combined with low NDWI, LST anomalies identify flash drought conditions that develop within weeks.
Vegetation Condition Index (VCI)
VCI normalizes NDVI between historical minimum and maximum values for each pixel:
VCI below 35% indicates drought conditions. This approach accounts for differences in vegetation density across regions, making it suitable for continental-scale monitoring.
5. GEE Drought Pipeline (Illustrative)
The following Google Earth Engine script demonstrates a complete drought monitoring pipeline that combines NDVI anomaly detection, Land Surface Temperature, and the Vegetation Condition Index. This is reference code intended for the GEE Code Editor.
// ββ GEE Drought Monitoring Pipeline ββ
// Illustrative code for Google Earth Engine Code Editor
// 1. Define region and time period
var region = ee.Geometry.Rectangle([32.0, -4.0, 42.0, 5.0]); // East Africa
var year = 2023;
var month = 8;
// 2. MODIS NDVI - current and climatology
var modisNDVI = ee.ImageCollection('MODIS/061/MOD13Q1')
.filter(ee.Filter.calendarRange(month, month, 'month'));
var ndviCurrent = modisNDVI
.filter(ee.Filter.calendarRange(year, year, 'year'))
.select('NDVI').mean().multiply(0.0001);
var ndviClimatology = modisNDVI
.filter(ee.Filter.calendarRange(2003, 2022, 'year'))
.select('NDVI').mean().multiply(0.0001);
var ndviAnomaly = ndviCurrent.subtract(ndviClimatology);
// 3. MODIS LST
var modisLST = ee.ImageCollection('MODIS/061/MOD11A2')
.filter(ee.Filter.calendarRange(month, month, 'month'));
var lstCurrent = modisLST
.filter(ee.Filter.calendarRange(year, year, 'year'))
.select('LST_Day_1km').mean().multiply(0.02).subtract(273.15);
var lstClimatology = modisLST
.filter(ee.Filter.calendarRange(2003, 2022, 'year'))
.select('LST_Day_1km').mean().multiply(0.02).subtract(273.15);
var lstAnomaly = lstCurrent.subtract(lstClimatology);
// 4. Vegetation Condition Index
var ndviMin = modisNDVI
.filter(ee.Filter.calendarRange(2003, 2022, 'year'))
.select('NDVI').reduce(ee.Reducer.min()).multiply(0.0001);
var ndviMax = modisNDVI
.filter(ee.Filter.calendarRange(2003, 2022, 'year'))
.select('NDVI').reduce(ee.Reducer.max()).multiply(0.0001);
var vci = ndviCurrent.subtract(ndviMin)
.divide(ndviMax.subtract(ndviMin))
.multiply(100);
// 5. Composite drought severity
// Drought = low VCI + negative NDVI anomaly + positive LST anomaly
var droughtSeverity = vci.lt(35)
.and(ndviAnomaly.lt(-0.05))
.and(lstAnomaly.gt(2));
// 6. Visualization
Map.centerObject(region, 6);
Map.addLayer(ndviAnomaly.clip(region),
{min: -0.3, max: 0.3, palette: ['d73027','fc8d59','fee08b','d9ef8b','91cf60','1a9850']},
'NDVI Anomaly');
Map.addLayer(lstAnomaly.clip(region),
{min: -5, max: 10, palette: ['313695','4575b4','abd9e9','fee090','fdae61','f46d43','a50026']},
'LST Anomaly (C)');
Map.addLayer(vci.clip(region),
{min: 0, max: 100, palette: ['8b0000','ff4500','ffa500','ffff00','7cfc00','228b22']},
'VCI (%)');
Map.addLayer(droughtSeverity.selfMask().clip(region),
{palette: ['ff0000']}, 'Severe Drought Areas');
// 7. Print area statistics
var droughtArea = droughtSeverity.selfMask()
.multiply(ee.Image.pixelArea()).divide(1e6)
.reduceRegion({reducer: ee.Reducer.sum(), geometry: region, scale: 1000});
print('Drought area (km2):', droughtArea);Pipeline Explanation
- βStep 1β2: Load MODIS NDVI (MOD13Q1, 250 m, 16-day) for the target month. Compute the 20-year climatological mean as baseline.
- βStep 3: Load MODIS LST (MOD11A2, 1 km, 8-day). Convert from scaled DN to Celsius and compute anomaly.
- βStep 4: Compute VCI by normalizing current NDVI between pixel-wise historical extremes.
- βStep 5: Fuse all three indicators: pixels with VCI < 35%, NDVI anomaly < β0.05, and LST anomaly > +2 K are classified as severe drought.
6. NDVI Time Series & Phenology
Long-term NDVI time series reveal vegetation phenology β the seasonal cycle of green-up, peak productivity, senescence, and dormancy. Drought events appear as departures from this normal cycle. The following simulation generates a multi-year NDVI time series with a drought event and performs seasonal decomposition.
NDVI Time Series with Drought Event Detection
PythonClick Run to execute the Python code
Code will be executed with Python 3 on the server