// Example GEE Code - Abulug catchment // v2.0 February 2025 // richard.boothroyd@glasgow.ac.uk // richard.boothroyd@liverpool.ac.uk // Note: The code has been migrated to Landsat Collection 2. // Goal: Export binary images of the active river channel over 2-year time periods (to calculate locational probabilities). No binary image cleaning is applied within GEE. // Note: This code can take a while to run (approx 30 mins), to reduce the run-time comment out some of the yearRanges. // Sets up user-defined parameters: var buffer_1 = ee.FeatureCollection('users/rjboothroyd1/WP1_20_Largest_Trunk_Only_Buffered_Simplified/Abulug_3000m_Buffered_500m_Simplified'); var buffer_1 = buffer_1.geometry().transform('EPSG:4326', 10); var roi = buffer_1; Map.addLayer(roi, {color: 'FFFF00'}, 'ROI'); Map.centerObject(roi,12) var folder = ('NCOMMS_Data_Deposit'); var river = ('Abulug'); var scale = 30; var mndwi_param = -0.4; var ndvi_param = 0.20; var sites = [ [roi] ] var yearRanges = [ [1988, 1990], [1990, 1992], [1992, 1994], [1994, 1996], [1996, 1998], [1998, 2000], [2000, 2002], [2002, 2004], [2004, 2006], [2006, 2008], [2008, 2010], [2010, 2012], [2012, 2014], [2014, 2016], [2016, 2018], [2018, 2020] ] // Prepares Landsat dataset and multispectral functions // Params for visualisations: var params_true = {crs: 'EPSG:4326', region: roi, min: 0.0, max: 0.3, bands: ["Red", "Green", "Blue"], dimensions: 1000}; var params_false = {crs: 'EPSG:4326', region: roi, min: 0.0, max: 0.3, bands: ["Swir1", "Red", "Green"], dimensions: 1000}; // Standardise band names, merge Landsat data*/ var bn9 = ['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B6', 'QA_PIXEL', 'SR_B5', 'SR_B7']; var bn8 = ['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B6', 'QA_PIXEL', 'SR_B5', 'SR_B7']; var bn7 = ['SR_B1', 'SR_B1', 'SR_B2', 'SR_B3', 'SR_B5', 'QA_PIXEL', 'SR_B4', 'SR_B7']; var bn5 = ['SR_B1', 'SR_B1', 'SR_B2', 'SR_B3', 'SR_B5', 'QA_PIXEL', 'SR_B4', 'SR_B7']; var bns = ['uBlue', 'Blue', 'Green', 'Red', 'Swir1', 'QA_PIXEL', 'Nir', 'Swir2']; var ls5 = ee.ImageCollection("LANDSAT/LT05/C02/T1_L2") var ls7 = (ee.ImageCollection("LANDSAT/LE07/C02/T1_L2") .filterDate('1999-04-15', '2003-05-30')) // exclude LE7 images that affected by failure of Scan Line Corrector (SLC) var ls8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2") var ls9 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2") var applyScaleFactors = function(image) { var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); return image.addBands(opticalBands, null, true); } var ls5_scaled = ls5.map(applyScaleFactors).select(bn5, bns); var ls7_scaled = ls7.map(applyScaleFactors).select(bn7, bns); var ls8_scaled = ls8.map(applyScaleFactors).select(bn8, bns); var ls9_scaled = ls9.map(applyScaleFactors).select(bn9, bns); var merged_scaled = ls5_scaled.merge(ls7_scaled).merge(ls8_scaled).merge(ls9_scaled); // Functions for active river belt classification var Ndvi = function(image) { // calculate normalized difference vegetation index var ndvi = image.normalizedDifference(['Nir', 'Red']).rename('ndvi'); return(ndvi); }; var Mndwi = function(image) { // calculate modified normalized difference water index var mndwi = image.normalizedDifference(['Green', 'Swir1']).rename('mndwi'); return(mndwi); }; // Loop over years sites.forEach(function (site) { yearRanges.forEach(function (yearRange) { exportTimeseries(site, yearRange) }) }) function exportTimeseries(site, yearRange) { var sDate_T1 = ee.Date.fromYMD(yearRange[0], 1, 1); var eDate_T1 = ee.Date.fromYMD(yearRange[1], 1, 1); // Filter date range, roi and apply simple cloud processing var imgCol = merged_scaled.filterDate(sDate_T1, eDate_T1) .filterBounds(roi) .map(function(image) { var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0) return image.updateMask(qaMask).resample('bicubic').set('system:time_start',sDate_T1); }); // print(imgCol.limit(1)); // print(imgCol.size(),'T1: Number of tiles used'); // print(imgCol); var mndwi_scaled = (imgCol.map(Mndwi).map(function(i) { return i.unitScale(-0.4, 1).clamp(0, 1) }).reduce(ee.Reducer.percentile([10]))) var mndwi_out = (mndwi_scaled.gt(0)); var ndvi_scaled = (imgCol.map(Ndvi).map(function(i) { return i.unitScale(-1, 0.2).clamp(0, 1) }).reduce(ee.Reducer.percentile([10]))) var ndvi_out = (ndvi_scaled.lt(1)); var active_map = (mndwi_out).and(ndvi_out).rename('active').clip(roi); var size = imgCol.size().getInfo() var list = imgCol.toList(size) //var size = Active_Channel.getInfo() //print(size) for (var n=0; n