Water and Moisture Indices in GeoIndexR

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Overview

Delineating water bodies and tracking moisture conditions are foundational tasks in hydrology, wetland monitoring, and irrigation management. GeoIndexR implements three key indices:

  1. NDWI (Normalized Difference Water Index, McFeeters 1996)
  2. MNDWI (Modified Normalized Difference Water Index, Xu 2006)
  3. NDMI (Normalized Difference Moisture Index, Gao 1996)

1. NDWI (McFeeters, 1996)

McFeeters designed NDWI to delineate open water features by maximizing green band reflectance and minimizing NIR reflectance:

$$\text{NDWI} = \frac{\text{GREEN} - \text{NIR}}{\text{GREEN} + \text{NIR}}$$

Water bodies typically have positive NDWI values ($\text{NDWI} > 0$), while terrestrial vegetation and dry soil display negative values.

library(GeoIndexR)
img <- get_example_data()

ndwi <- geo_index(img, "NDWI")
index_summary(ndwi)

2. MNDWI (Xu, 2006)

In urbanized and complex landscapes, built-up surfaces often produce false positive signals under classical NDWI. Xu (2006) replaced the NIR band with the Shortwave Infrared (SWIR) band:

$$\text{MNDWI} = \frac{\text{GREEN} - \text{SWIR}}{\text{GREEN} + \text{SWIR}}$$

Because built-up areas reflect strongly in SWIR, their MNDWI values are negative, clearly separating urban structures from open water.

mndwi <- geo_index(img, "MNDWI")
index_summary(mndwi)

3. NDMI (Gao, 1996)

The Normalized Difference Moisture Index monitors vegetation liquid water content:

$$\text{NDMI} = \frac{\text{NIR} - \text{SWIR}}{\text{NIR} + \text{SWIR}}$$

Higher values indicate well-hydrated vegetation canopies, whereas low or negative values signal drought or water stress.

ndmi <- geo_index(img, "NDMI")
index_summary(ndmi)

Multi-Index Stack & Comparison

We can compute and compare water and moisture indices together:

water_stack <- geo_indices(img, c("NDWI", "MNDWI", "NDMI"))
index_summary(water_stack)


Try the GeoIndexR package in your browser

Any scripts or data that you put into this service are public.

GeoIndexR documentation built on Oct. 10, 2026, 5:08 p.m.