// Enter a country name and set parameters for forest definition. // County name must match an entry in Large Scale International Boundary (LSIB) dataset. var country = 'Haiti'; // selected country (e.g. Haiti) // Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); //var selected = countries.filter(ee.Filter.eq('country_na', ee.String(country))); var selected = geometry; // Center the map to the selected country. Map.centerObject(selected, 6); print('country: ', country); var imageVisParam = { "opacity":1, "bands":["loss","treecover2000","gain"], "min":[0,120,0], "max":[1, 0 ,1], "gamma":1 }; var imageVisParamLossYear = { "opacity":1, "bands":["lossyear"], "min":[1], "max":[18], "palette" : ['red'] }; var setProperties = function(img){ img = img.set("class0", "FF0000,\"Tree Cover Loss 2000-2018\"" ); img = img.set("class1", "0000FF,\"Tree Cover Gain 2000-2012\"" ); img = img.set("class2", "FF00FF,\"Tree Cover Loss and Gain\"" ); img = img.set("palette", "[\"00FF00\",\"000000\"]" ); img = img.set("unit", "% Tree Cover 2000"); img = img.set("min", "10" ); img = img.set("max", "100" ); return img; }; var setPropertiesLossYear = function(img, year){ img = img.set("class0", "FF0000,\"Tree Cover Loss - \"" + year); return img; }; var getHansenMap = function( label, pixScale, region ){ var treeCoverImage = hansenImage; //treeCoverImage = treeCoverImage.clip(region); // Threshold to determine if there is forest cover : 10% cover or there was a gain treeCoverImage = treeCoverImage.mask( treeCoverImage.select('treecover2000').gt(10).or( treeCoverImage.select('gain').gt(0) ) ); if( region ) treeCoverImage = treeCoverImage.clip( region ); var treeCoverImageVisualized = treeCoverImage.visualize( imageVisParam ); treeCoverImageVisualized = setProperties(treeCoverImageVisualized); return treeCoverImageVisualized; }; var getHansenLossYearMap = function( year, region ){ var treeCoverImage = hansenImage; year = year - 2000; //treeCoverImage = treeCoverImage.clip(region); // Threshold to determine if there is forest cover : 10% cover or there was a gain treeCoverImage = treeCoverImage.mask( treeCoverImage.select('loss').eq(1).and( treeCoverImage.select('lossyear').eq(year) ) ); if( region ) treeCoverImage = treeCoverImage.clip( region ); var treeCoverImageVisualized = treeCoverImage.visualize( imageVisParamLossYear ); treeCoverImageVisualized = setPropertiesLossYear(treeCoverImageVisualized, year +2000); return treeCoverImageVisualized; }; //returns JSON object with properties total, area, density var getAreaData= function( geometry ){ var treeCoverImage = hansenImage; treeCoverImage = treeCoverImage.clip(geometry); var forestCoverMask = treeCoverImage.expression( 'treecover2000>25?1:gain>0?1:0', { treecover2000 : treeCoverImage.select('treecover2000'), gain : treeCoverImage.select('gain') } ).rename("tree_presence"); // Threshold to determine if there is forest cover : 10% cover or there was a gain var lossGainImage = treeCoverImage.addBands(forestCoverMask ).select(["loss","gain", "tree_presence"]).multiply(ee.Image.pixelArea()); var statsLossGain = lossGainImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: geometry, maxPixels: 1e10 }); var averageTreeCover = treeCoverImage.select("treecover2000").reduceRegion({ reducer: ee.Reducer.mean(), geometry: geometry, maxPixels: 1e10 }); var totalArea = geometry.area().divide( 10000 ); var areaTreeCover = ee.Number( statsLossGain.get('tree_presence') ).divide( 10000 ); var areaLost = ee.Number( statsLossGain.get('loss')).divide( 10000 ); var areaGain = ee.Number( statsLossGain.get('gain')).divide( 10000 ); var avgTreeCover = averageTreeCover.get("treecover2000"); var percentageTreeCoveredArea = areaTreeCover.divide(totalArea).multiply(100); var percentageTreeCoveredLoss = areaLost.divide(areaTreeCover).multiply(100); var percentageTreeCoveredGain = areaGain.divide(areaTreeCover).multiply(100); var listOfYears = ee.List.sequence(1,18,1); var lossCoverImage = treeCoverImage.mask( treeCoverImage.select('loss').gt(0)); var lossByYear = listOfYears.map( function(year){ var lossInYear = lossCoverImage.select(['lossyear']).eq( ee.Number(year).toInt() ); var areaImage = lossInYear.multiply(ee.Image.pixelArea()).divide( 10000); var lostArea = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: geometry, maxPixels: 1e10 }); return ee.Dictionary(["year", ee.Number(year).add( 2000 ), "lostArea", lostArea.get('lossyear')]); } ); // Get a histogram of the tree cover 2000 distribution in steps of 10% var treeCover2000Histogram = treeCoverImage.select("treecover2000").reduceRegion({ reducer: ee.Reducer.fixedHistogram({ min:0, max :100, steps:10 }), geometry: geometry, maxPixels:1e10 }); var data = ee.Dictionary( { treeCover2000 : areaTreeCover, treeCoverLoss : areaLost, treeCoverGain : areaGain, treeCoverAverage : avgTreeCover, totalArea : totalArea, percentageTreeCoveredArea : percentageTreeCoveredArea, percentageTreeCoveredLoss : percentageTreeCoveredLoss, percentageTreeCoveredGain : percentageTreeCoveredGain, lossByYear : lossByYear, histogram : treeCover2000Histogram } ); return data; }; var testPublicFunctions = function(){ var p = getAreaData( geometry ); print ("Hansen tree cover data ( cover, loss and gain) in Hectares", p); getHansenMap("Test Polygon", 100, geometry ); Map.addLayer( getHansenLossYearMap(2000) ,null, " Loss 2000" ); Map.addLayer( getHansenLossYearMap(2005) ,null, " Loss 2005", false ); Map.addLayer( getHansenMap("Test map", 30), null, "Hansen map 2000-2018"); }; testPublicFunctions();