//--------------------------------------------------------------------------------------------------- //EXTRACT AND EXPORT UNFORESTED AREAS //--------------------------------------------------------------------------------------------------- //This part is the first step for isolating world alpine areas. The output here is a vector file //of unforested areas in mountain ranges. //1. Load GMBA mountain polygons (Koerner et al., 2017) containing at least an alpine //(according to Koerner et al., 2011), clipped to the extent of their upper montane climatic belt. var mountainRanges = ee.FeatureCollection('/yourFC'); //2. Create mask of forest extent for the year 2015 //load Hansen's forest cover dataset var hansenImage = ee.Image('UMD/hansen/global_forest_change_2015_v1_3'); //select forest cover for the year 2000 var forest2000 = hansenImage.select(['treecover2000']); //select forest losses and gains var loss = hansenImage.select(['loss']); var gain = hansenImage.select(['gain']); //extract forest baseline, add gains, subtract losses var forestCalc = forest2000.eq(0).not().add(gain.eq(1)).subtract(loss.eq(1)); //build forest extent for the year 2015 var forestExtent = forestCalc.expression('b(0) > 0'); //create mask of unforested areas var unforestedMask = forestExtent.gt(0); //3. Clean mask. //smooth the image by convolving with the boxcar kernel. var boxcar = ee.Kernel.square({ radius: 5, units: 'pixels', normalize: true }); var smoothUnforestedMask = unforestedMask.convolve(boxcar); //define smoothed alpine mask by setting threshold >0.50 var smoothUnforested = smoothUnforestedMask.gt(0.50); //reduce ImageCollection to Image with value 1 where it was non zero var unforestedAreas = smoothUnforested.reduce(ee.Reducer.allNonZero()); //selected only areas with value 0 (unforested) var unforestedAreas = unforestedAreas.eq(0); //4. Vectorize unofrested areas mask, reducing spatial resolution to 50 m, select only unofrested part //and export to google drive //convert to vectors. var unforestedVectors = unforestedAreas.addBands(unforestedAreas).reduceToVectors({ geometry: mountainRanges, crs: unforestedAreas.projection(), scale: 50, geometryType: 'polygon', eightConnected: false, labelProperty: 'zone', maxPixels: 1e13, reducer: ee.Reducer.mean() }); //select alpine polygons ("zone" = 1) var unforestedVectors = unforestedVectors.filter(ee.Filter.eq('zone',1)); //export the FeatureCollection to a SHP file. Export.table.toDrive({ collection: unforestedVectors, folder: 'bioclimatic/3_forestBorder', description:'forestBorder', fileFormat: 'SHP' });