// ------This code is used to calculate the FVC in GEE // ------Author: Yu Feng, E-mail: fengyu263@163.com // ------Set study area var roi = ee.FeatureCollection(muru); // ------Set start date var startDate = ee.Date('2000-01-01'); // ------Set end date var endDate = ee.Date('2000-12-31'); // ------Set display parameters var colorizedVis = { min: 0.0, max: 1.0, palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301'], }; Map.addLayer(roi, {color: "black"}, "roi",false); Map.centerObject(roi, 13); Map.setOptions("SATELLITE"); // ------Landsat image cloud processing function maskLsr(image) { var cloudShadowBitMask = 1 << 4; var cloudsBitMask = 1 << 3; var qa = image.select('QA_PIXEL'); var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0) .and(qa.bitwiseAnd(cloudsBitMask).eq(0)); return image.updateMask(mask) .select("SR_B[1-7]*") .copyProperties(image, ["system:time_start"]); } // ------Applies scaling factors(L5/L7) function applyScaleFactors_L5(image) { var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true); } // ------Applies scaling factors(L8) function applyScaleFactors_L8(image) { var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true); } // ------Filter images var imageCol = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2') // 2000-2011 (L5) // ee.ImageCollection('LANDSAT/LE07/C02/T1_L2') // 2013 (L7) // ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') // 2013-2020 (L8) .filterDate(startDate, endDate) .map(applyScaleFactors_L5) // L5 and L7 // .map(applyScaleFactors_L8) // L8 .map(maskLsr) .filterBounds(roi); var image = imageCol.median().clip(roi.geometry()); // ------Calculate NDVI var NDVI = image.normalizedDifference(["SR_B4","SR_B3"]).rename("NDVI"); // L5 and L7 //var NDVI = image.normalizedDifference(["SR_B5","SR_B4"]).rename("NDVI"); // L8 Map.addLayer(NDVI,colorizedVis,'NDVI'); // ------Calculate FVC function calFVC(BestVI,region,scale){ var num = BestVI.reduceRegion({ reducer:ee.Reducer.percentile([5,95]), geometry:region, scale:scale, maxPixels:1e13 }); var min = ee.Number(num.get("NDVI_p5")); var max = ee.Number(num.get("NDVI_p95")); print(min); print(max); var greaterPart = BestVI.gt(max); var lessPart = BestVI.lt(min); var middlePart =ee.Image(1).subtract(greaterPart).subtract(lessPart); var tempf1=BestVI.subtract(min).divide(max.subtract(min)); var FVC=ee.Image(1).multiply(greaterPart).add(ee.Image(0).multiply(lessPart)) .add(tempf1.multiply(middlePart)) return FVC.rename('FVC'); } var FVC = calFVC(NDVI,roi,30); // ------Export FVC Export.image.toDrive({ image: FVC, description: "fvc", scale: 30, region: roi.geometry(), maxPixels: 1e13 }); // ------Calculate the mean FVC var FVCmean = FVC.reduceRegion({ reducer: ee.Reducer.mean(), geometry: roi, scale: 30 }); print("FVC mean value is: ", FVCmean);