Global Dryland Desertification Risk (GDDR) Mapping
Version 1.0
2026
📜 Credits
Mohammad Javad Soltani
Hooman Latifi
📃 Overview
◼️ Global Desertification Risk Mapping is a comprehensive remote sensing framework for assessing desertification risk across global drylands (Aridity Index < 0.65) using long-term NDVI trends, climate data, and human footprint pressure.
◼️ The framework integrates satellite-derived vegetation trends (GIMMS 3G + MODIS, 1982–2025) with Mann-Kendall trend analysis, Google Earth Engine cloud computing, and multi-metric fusion to produce continuous, unit-free desertification risk scores.
◼️ Validation is performed against SDG Indicator 15.3.1 (Trends.Earth) and land use/land cover transition analysis, ensuring scientific robustness and policy relevance.
Key Innovations
Feature
Description
🌍 Multi-Decadal Analysis
43+ years of NDVI data (1982–2025) with GIMMS→MODIS quantile-matching harmonization
📈 Server-Side Mann-Kendall
Pixel-wise trend analysis via ee.Reducer.kendallsCorrelation() — no client-side loops
🔀 Percentile-Rank Fusion
Continuous risk score from geometric mean of AI, tau, and HFI percentile ranks
🧪 Ecological Significance
FDR-corrected significance testing with climate-matched null models (latitude bands)
✅ SDG 15.3.1 Alignment
Direct comparison with Trends.Earth land degradation indicators
🗺️ Multi-Resolution
5 km analysis resolution, IPCC region-based aggregation, patch-level validation
Theoretical Foundation
Riskgeomean=(AIr×Taur×HFIr)1/3
Where:
AIr = 1 − percentile_rank(Aridity Index) ↳ lower AI → higher risk
Taur = 1 − percentile_rank(MK tau) ↳ more negative trend → higher risk
HFIr = percentile_rank(Human Footprint Index) ↳ higher pressure → higher risk
🗂️ Repository Structure
Desertification-Risk/
│
├── Base_Maps_Gen/ # Base map generation pipeline
│ ├── MApGen_AI.ipynb # Aridity Index map generation
│ ├── MApGen_HFP.ipynb # Human Footprint Pressure map generation
│ ├── MKTrend_MApGen_MODIS.ipynb # MODIS Mann-Kendall trend maps
│ ├── Redundantness.ipynb # Redundancy analysis
│ └── Download_HFP_AI.py # Script: download HFP & AI data
│
├── NDVI_Trend/ # Core NDVI trend & desertification analysis
│ ├── Desertification_global_1982_2025.ipynb # Full record (GIMMS+MODIS, 1982-2025)
│ └── Desertification_global_2000_2025.ipynb # MODIS-era only (2000-2025)
│
├── Desertification_Gen/ # Desertification risk map generation
│ ├── Desertification_Map.ipynb # Percentile-rank + geometric-mean fusion
│ ├── Eco_Sig_Pathces_Map_Gen_Desert.ipynb # Ecological significance (desert risk)
│ └── Eco_Sig_Pathces_Map_Gen_Tau.ipynb # Ecological significance (tau trends)
│
├── LULC_Check/ # Land use/land cover validation
│ └── LULC_Check_V01.ipynb # Dryland LULC stability × desertification risk
│
├── Evaluation/ # Validation & evaluation
│ └── Fianl_EV_Coor_With_SDG.ipynb # SDG 15.3.1 coordination & final validation
│
├── LICENSE
└── README.md
🔬 Methodology
Analysis Pipeline (4 Stages)
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 1 — Base Map Generation │
│ │
│ GIMMS 3G (1982-1999) MODIS MOD13C2 (2000-2025) │
│ │ │ │
│ └───── QM Harmonisation ──┘ │
│ │ │
│ ┌───────┴───────┐ ┌──────────────────┐ │
│ │ CHIRPS Precip │ │ ERA5-LAND Temp │ │
│ │ (UCSB-CHG) │ │ (2m temperature) │ │
│ └───────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 2 — NDVI Trend Analysis (GEE) │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ ee.Reducer.kendallsCorrelation() — pixel-wise Mann-Kendall │ │
│ │ → τ (Kendall's tau) + p-value for every pixel │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ Dryland mask (AI < 0.65) applied before export │
│ Resolution: 5,000 m │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 3 — Desertification Risk Fusion │
│ │
│ Pass 1: Stream histograms → empirical CDFs (AI, tau, HFI) │
│ Pass 2: Percentile-rank transform + 3 fusion operators: │
│ • Risk_geomean = (AI_r × Tau_r × HFI_r)^(1/3) ← headline │
│ • Risk_arithmean = (AI_r + Tau_r + HFI_r) / 3 ← sensitivity│
│ • Risk_min = min(AI_r, Tau_r, HFI_r) ← sensitivity│
│ Pass 3: Pairwise agreement & Jaccard between fusion methods │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 4 — Validation & Evaluation │
│ │
│ • Ecological significance testing (FDR-corrected, │
│ climate-matched null models) │
│ • LULC transition analysis (degradation pathways) │
│ • SDG 15.3.1 coordination (Trends.Earth comparison) │
└─────────────────────────────────────────────────────────────────────────┘
Analysis Layers
Layer
Method
Inputs
Output
NDVI Harmonisation
Quantile-matching percentile stretch
GIMMS 3G + MODIS
Harmonised NDVI time series
Mann-Kendall Trend
ee.Reducer.kendallsCorrelation()
NDVI ImageCollection
τ + p-value per pixel
Risk Map (Boolean)
MK p < 0.05 ∩ τ < 0 ∩ AI < 0.65 ∩ HFP > 0.2
MK results + AI + HFP
Binary risk classification
Risk Map (Continuous)
Percentile-rank + geometric-mean fusion
AI, τ, HFI
Unit-free risk score [0, 1]
Ecological Significance
FDR Benjamini-Hochberg + latitude-matched null
Risk raster + IPCC regions
Significance maps + hexbin plots
LULC Stability
Directed transition analysis
GLDAS LULC patches
Degradation pathway stats
SDG Validation
Spatial join + agreement metrics
Risk raster + Trends.Earth
Accuracy assessment
📊 Performance Metrics
Desertification risk is evaluated using multiple complementary metrics, combining trend significance, ecological robustness, and policy alignment.
1. Mann-Kendall τ (Trend Strength)
Measures the monotonic trend direction and magnitude of NDVI over time:
τ ∈ [-1, 1]
τ < 0 → browning / vegetation decline
τ > 0 → greening / vegetation increase
τ = 0 → no monotonic trend
2. Risk Percentile Fusion
Three components are combined via geometric mean to produce a continuous risk surface:
Component
Variable
Rationale
AIr
1 − percentile(Aridity Index)
Drier areas have higher inherent vulnerability
Taur
1 − percentile(MK τ)
Stronger negative trends indicate active degradation
HFIr
percentile(Human Footprint)
Higher human pressure increases degradation risk
3. FDR-Corrected Significance (Benjamini-Hochberg)
Controls the false discovery rate across spatial hypothesis tests:
def benjamini_hochberg(pvals):
p = np.asarray(pvals, dtype=float)
n = p.size
order = np.argsort(p)
ranked = p[order]
adj_ranked = ranked * n / np.arange(1, n + 1)
adj_ranked = np.minimum.accumulate(adj_ranked[::-1])[::-1]
adj_ranked = np.clip(adj_ranked, 0.0, 1.0)
return adj_ranked[np.argsort(order)]
4. SDG Indicator 15.3.1 Agreement
Validation against Trends.Earth land degradation indicators across three time windows:
Window
Period
Source
Baseline
2000–2015
SDG 15.3.1 baseline
Mid-term
2004–2019
Trends.Earth v2
Recent
2008–2023
Trends.Earth v3
🚀 Quick Start
⚙️ System Requirements
Python 3.13 is required. This project has been developed and tested on Python 3.13.x. Using other Python versions (3.9, 3.11+) may cause dependency conflicts, particularly with GDAL, Rasterio, and Google Earth Engine bindings.
To verify your Python version:
python --version
# Expected: Python 3.13.x
Google Earth Engine account required. You must sign up at signup.earthengine.google.com and authenticate your account.
🗺️ Installation
1. Clone the repository:
git clone
github.com
cd Desertification-Risk
2. Create a virtual environment (strongly recommended):
python -m venv venv
3. Activate the environment:
On Windows:
venv\Scripts\activate
On macOS/Linux:
source venv/bin/activate
4. Upgrade pip, setuptools, and wheel:
pip install --upgrade pip setuptools wheel
5. Install dependencies:
pip install earthengine-api geemap matplotlib numpy pandas scipy statsmodels scikit-learn rasterio geopandas cartopy seaborn tqdm
6. Authenticate Google Earth Engine:
earthengine authenticate
📦 Key Dependencies
Package
Version
Role
Python
3.13.x
Base interpreter
earthengine-api
latest
Google Earth Engine Python client
geemap
latest
Interactive GEE mapping
GDAL
≥3.5
Geospatial data I/O and raster processing
Rasterio
≥1.3
Raster read/write built on GDAL
GeoPandas
≥1.0
Vector geometry handling and spatial joins
NumPy
≥1.24
Numerical computing
Pandas
≥2.0
Tabular data management
Matplotlib
≥3.8
Visualization
Cartopy
≥0.22
Map projection and geographic plotting
SciPy
≥1.11
Statistical computations
Scikit-learn
≥1.3
Machine learning utilities
Statsmodels
≥0.14
Statistical modeling (RESTREND)
tqdm
latest
Progress bars
▶️ Running the Pipeline
Each notebook can be run independently, but the recommended workflow order is:
Step 1 — Base Maps
Open and run notebooks in Base_Maps_Gen/:
Download_HFP_AI.py — Download Human Footprint Pressure and Aridity Index data
MApGen_AI.ipynb — Generate global Aridity Index base map
MApGen_HFP.ipynb — Generate Human Footprint Pressure base map
MKTrend_MApGen_MODIS.ipynb — Generate MODIS MK trend base maps
Step 2 — NDVI Trend Analysis
Choose the appropriate notebook in NDVI_Trend/:
Desertification_global_1982_2025.ipynb — Full 43-year record (GIMMS + MODIS)
Desertification_global_2000_2025.ipynb — MODIS-era only
Update file paths at the top of the notebook:
# Example path configuration
DATA_DIR = Path("/path/to/your/data")
OUT_DIR = Path("/path/to/your/output")
Then run all cells. The notebook will:
Install dependencies
Authenticate GEE
Export NDVI ImageCollections by year
Run server-side Mann-Kendall trend analysis
Generate desertification risk maps
Export results as GeoTIFF
Step 3 — Desertification Risk Fusion
Run Desertification_Gen/Desertification_Map.ipynb with:
# Path to your MK trend outputs
TAU_RASTER = "/path/to/tau_merged_global.tif"
SIG_RASTER = "/path/to/sig_merged_global.tif"
AI_RASTER = "/path/to/aridity_index.tif"
HFP_RASTER = "/path/to/human_footprint.tif"
# Output
OUTPUT_DIR = "/path/to/desertification_risk_output"
Step 4 — Ecological Significance
Run the ecological significance notebooks:
Eco_Sig_Pathces_Map_Gen_Desert.ipynb — For desertification risk maps
Eco_Sig_Pathces_Map_Gen_Tau.ipynb — For tau trend maps
Step 5 — Validation
Run LULC_Check/LULC_Check_V01.ipynb for LULC transition analysis
Run Evaluation/Fianl_EV_Coor_With_SDG.ipynb for SDG 15.3.1 validation
🌐 Data Sources
Dataset
Source
Period
Resolution
Usage
GIMMS 3G NDVI
NASA ARC
1982–1999
8 km → 5 km
Historical NDVI
MODIS MOD13C2
NASA LP DAAC
2000–2025
0.05° → 5 km
Recent NDVI
CHIRPS Precipitation
UCSB-CHG
1982–2025
0.05°
Climate normalization
ERA5-LAND Temperature
ECMWF/Copernicus
1982–2025
0.1°
Climate normalization
Aridity Index (AI)
CGIAR-CSI / GEE
Long-term avg
5 km
Dryland delineation
Human Footprint (HFP)
WCS/NASA SEDAC
2013
1 km
Human pressure
IPCC Reference Regions
IPCC-WGI
—
Vector
Regional aggregation
Trends.Earth SDG 15.3.1
Conservation International
2000–2023
Point data
Validation
📄 Citation
If you use this framework in your research, please cite the following:
Soltani, M.J., Latifi, H. (2026). Global Desertification Risk Mapping Using Multi-Decadal NDVI Trends, Satellite Climate Data, and Continuous Risk Fusion. Scientific Data.
BibTeX:
@article{
title = {Global Desertification Risk Mapping Using Multi-Decadal NDVI Trends, Satellite Climate Data, and Continuous Risk Fusion},
author = {Soltani, M.J. and Latifi, H.},
journal = {Scientific Data},
year = {2026},
note = {Submitted}
}
📧 Contact
Mohammad Javad Soltani📧 mohammadjavadsoltani@email.com🌐 GitHub Profile