Monitoring Hydro Power Reservoir: Google Earth Engine Approach

The full GEE code is accessible here.


//Input data
var lc5 = ee.ImageCollection("LANDSAT/LT05/C01/T1_SR"),
lc8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR"),
area =
/* color: #d63000 */
/* shown: false */
/* displayProperties: [
"type": "rectangle"
] */
[[[110.74598823081428, 30.978376855133398],
[110.74598823081428, 30.69656245229708],
[111.31041083823615, 30.69656245229708],
[111.31041083823615, 30.978376855133398]]], null, false),
reservoir =
/* color: #98ff00 */
/* shown: false */
[[[110.94796628879455, 30.889411003189966],
[110.93286008762267, 30.856701958583074],
[110.99191160129455, 30.80835465840273],
[111.03551359104064, 30.858470300432337],
[110.97234220432189, 30.89058949908264]]]);
//Define image fore pre and post dam construction
var predamImage = ee.ImageCollection(lc5
.filterDate('1997-05-01', '1997-06-01')
var postdamImage = ee.ImageCollection(lc8
.filterDate('2019-05-01', '2019-06-01')
var preImage_cliped = predamImage.mosaic().clip(area);
var postImage_cliped = postdamImage.mosaic().clip(area);
var preNDWI = preImage_cliped.normalizedDifference(['B2', 'B4']);
var postNDWI = postImage_cliped.normalizedDifference(['B3', 'B5']);
// Mask the non-watery parts of the image, where NDWI < -1
var prendwiMasked = preNDWI.updateMask(;
var postndwiMasked = postNDWI.updateMask(;
/// Style and Visualization
var vis5 = {band:['B4', 'B3', 'B2'],min:0,max:2000}
var vis8 = {band:['B5', 'B4', 'B3'],min:0,max:2000}
var visprendwi = {palette: ['00FFFF'], min: 0,max: 1}
var vispostndwi = {palette: ['0080ff'], min: 0,max: 1}
///Add Map Layers to Interface
Map.addLayer(predamImage, vis5, 'Pre dam construction')
Map.addLayer(postdamImage, vis8, 'Post dam construction')
Map.addLayer(postndwiMasked, vispostndwi, 'Water at post dam construction')
Map.addLayer(prendwiMasked, visprendwi, 'Water at pre dam construction')
//Calculate the water size// Sum the pixel value
var before = prendwiMasked.reduceRegion({
reducer: ee.Reducer.count(), // count pixels
geometry: reservoir,
scale: 30
var after = postndwiMasked.reduceRegion({
reducer: ee.Reducer.count(), // count pixels
geometry: reservoir,
scale: 30
print (different,"square kilometer")
//Differentiating the size between water at before and after construction to get the size of flood area.var different = (24124 - 7871)*0.0090
Image of flooding area caused by the hydropower dam’s reservoir. The light blue is the surface of river before dam construction and the dark blue indicate the extra surface water after the dam construction.

MSc in Environmental Observation and Informatics @ UW-Madison|

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store