🌍 Land Use/Land Cover Change Detection Using Google Earth Engine: Step-by-Step Guide

Introduction

Land Use and Land Cover (LULC) change detection is a vital application in remote sensing and GIS. It helps researchers and planners understand how landscapes evolve over time due to urbanization, deforestation, and other human or natural influences.

In this tutorial, we’ll explore how to use Dynamic World (DW) — Google’s near-real-time global land cover dataset — to detect built-up area expansion between 2016 and 2024 using Google Earth Engine (GEE).


1️⃣ Step 1: Define the Study Area

We’ll start by defining a study area — for example, Addis Ababa , Ethiopia.

// Example: Define study area var studyArea = ee.FeatureCollection('FAO/GAUL_SIMPLIFIED_500m/2015/level2') .filter(ee.Filter.eq('ADM2_NAME', 'Addis Ababa')); Map.centerObject(studyArea, 10);

2️⃣ Step 2: Load Dynamic World Classified Data

Dynamic World provides global, pixel-based land cover maps from Sentinel-2 imagery. Each pixel is classified into categories such as built-up, vegetation, water, bare ground, etc.

Here’s how to load and filter Dynamic World data for 2016 and 2024:

// Dynamic World data for 2016 and 2024 var dw2016 = ee.ImageCollection('GOOGLE/DYNAMICWORLD/V1') .filterDate('2016-01-01', '2016-12-31') .filterBounds(studyArea) .select('label') .mode() .clip(studyArea); var dw2024 = ee.ImageCollection('GOOGLE/DYNAMICWORLD/V1') .filterDate('2024-01-01', '2024-12-31') .filterBounds(studyArea) .select('label') .mode() .clip(studyArea);

3️⃣ Step 3: Extract Built-Up Areas

The label band in Dynamic World includes class codes (0–8).
Built-up areas correspond to the class value 0 (built area).

// Extract built-up areas var built2016 = dw2016.eq(0).selfMask(); var built2024 = dw2024.eq(0).selfMask();

Now you have two binary masks representing built-up pixels for 2016 and 2024.


4️⃣ Step 4: Detect Built-Up Area Change

To detect the expansion of built-up areas, subtract the 2016 map from the 2024 map.

// Detect new built-up areas var change = built2024.and(built2016.not()); // Visualize Map.addLayer(built2016, {palette: ['gray'], min: 0, max: 1}, 'Built-up 2016'); Map.addLayer(built2024, {palette: ['red'], min: 0, max: 1}, 'Built-up 2024'); Map.addLayer(change, {palette: ['yellow'], min: 0, max: 1}, 'New Built-up (2016–2024)');

You’ll now see:

  • Gray: Built-up areas in 2016

  • Red: Built-up areas in 2024

  • Yellow: Newly developed areas (change from vegetation or bare ground to built-up)


5️⃣ Step 5: Calculate Change Statistics

We can estimate the area of new built-up regions in square kilometers.

// Calculate area in square kilometers var areaImage = ee.Image.pixelArea().divide(1e6); var changeArea = change.multiply(areaImage).reduceRegion({ reducer: ee.Reducer.sum(), geometry: studyArea, scale: 10, maxPixels: 1e13 }); print('New Built-up Area (2016–2024):', changeArea.get('label'));





🎥 Watch Full Tutorial

Watch the complete step-by-step tutorial on YouTube:

https://youtu.be/G-ntC_gYx28?si=k5awLOflgwUghqVm

Conclusion

Using Dynamic World in Google Earth Engine makes land cover change analysis simpler and more accurate.
By comparing yearly classifications, we can quickly identify how built-up areas expanded — helping city planners and environmental scientists understand urban growth trends.

For more tutorials on GIS, remote sensing, and Earth observation, subscribe to the Geospatial Analysis YouTube channel and follow this blog for weekly updates.

#GoogleEarthEngine, #DynamicWorld, #LandCoverChange, #BuiltUpArea, #RemoteSensing, #GeospatialAnalysis, #UrbanExpansion


Comments