Google Earth Engine Buffer – How to Create Buffer of Raster Without Original Area

buffergoogle-earth-enginejavaraster

I am quite new in GEE but got really stuck!

I want to create buffers around concession areas (raster) of 1km.
I first transformed my vector dataset into raster, reclassified the values to 1 and created a buffer.
That worked out fine. Now I want to have only the 2km layer without the concession areas in it.
The code I used is the following:

//convert vector to raster data - Timber Concessions 
print(Timber, "timber") // to check if layer is correct 
//Map.addLayer(Timber, {color:'green'}, 'Timber Concessions'); //to check if the layer is there 

var Concession = Timber
  .filter(ee.Filter.notNull(['superficie']))
  .reduceToImage({
  properties: ['superficie'],
  reducer: ee.Reducer.first()
});
                        
Map.addLayer(Concession, {
  palette: 'brown'},
  'Timber_Concession_Raster',
  false
  
);  
//convert all raster values to value 1 

var fromList = [8000, 22588, 23725,28875,25098,30600,33560,35520,
36573,39063,41000, 43612, 53000, 54529, 62570,70810,77600,86820,
89475, 91146, 92530, 93300, 94960, 100200, 104400, 105000, 106472, 
123600, 124280, 131100, 139000, 141900, 143000, 145000, 149542, 152772,
164710, 188406, 199900, 221708, 222765, 225500, 235654, 244632, 275770,
296000, 300000, 321840, 322880, 452200, 461296, 510920, 511888, 547026, 
568520, 571100, 583000, 621120, 635812, 674600,706452, 1159642];

var toList = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 
1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,
1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1,1];

var timberRemap = Concession.remap({
  from: fromList,
  to: toList, 
  defaultValue: 0,
  bandName: 'first'
});

print(timberRemap, 'timberrep')
Map.addLayer(timberRemap)

//buffer timber concessions by 2km to create buffer areas of high priority areas 
var timber_concessions = timberRemap.focal_max({
  radius: 2000,
  kernelType: 'circle',
  units: 'meters',
  iterations: 1
});

//This all works fine. But here: 

//mask buffered areas with raster of concessions to only get buffer areas / does not work, shows empty raster
var buffered_concessionareas = timber_concessions.select("remapped").where(timberRemap.select("remapped").eq(1),0).selfMask();
print(buffered_concessionareas, 'bufferedworkednot')
Map.addLayer(buffered_concessionareas, {}, 'buffer_areas') //shows only empty raster

Does anyone have any tips?

Best Answer

You can simply mask the buffered result with the originar:

var buffers = timber_concessions .updateMask(timberRemap)

however why wouldn't you use vector buffer and difference? Why are you converting to raster first?

Related Question