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.

$$NDVI = \frac{\rho_{NIR} - \rho_{RED}}{\rho_{NIR} + \rho_{RED}}$$

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.

$$NDWI = \frac{\rho_{NIR} - \rho_{SWIR}}{\rho_{NIR} + \rho_{SWIR}}$$

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.

$$EVI = 2.5 \cdot \frac{\rho_{NIR} - \rho_{RED}}{\rho_{NIR} + 6\rho_{RED} - 7.5\rho_{BLUE} + 1}$$

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.

$$NBR = \frac{\rho_{NIR} - \rho_{SWIR2}}{\rho_{NIR} + \rho_{SWIR2}}$$

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:

$$T_{LST} = \frac{T_{bright}}{1 + \frac{\lambda \cdot T_{bright}}{\rho_c} \ln\varepsilon}$$

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:

$$P_v = \left(\frac{NDVI - NDVI_{soil}}{NDVI_{veg} - NDVI_{soil}}\right)^2$$

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

Python
script.py78 lines

Click 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 = \frac{NDVI_{current} - NDVI_{min}}{NDVI_{max} - NDVI_{min}} \times 100\%$$

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

Python
script.py101 lines

Click Run to execute the Python code

Code will be executed with Python 3 on the server

7. Key Takeaways

βœ“NDVI, EVI, NDWI, and NBR each exploit different spectral contrasts to monitor vegetation health, water stress, and burn severity.
βœ“Land Surface Temperature from thermal IR requires Planck inversion and emissivity correction; the split-window technique improves accuracy to ~1 K.
βœ“Multi-indicator drought monitoring (NDVI anomaly + VCI + LST anomaly) outperforms any single index by capturing both meteorological and agricultural drought.
βœ“MODIS provides the longest consistent record (20+ years) at 250 m; Sentinel-2 offers 10 m resolution for field-scale drought assessment.
βœ“Google Earth Engine enables planetary-scale drought analysis without downloading any data locally.