Google Earth Engine – How to Subtract Two Feature Collections

change detectionfeature-collectiongoogle-earth-enginegoogle-earth-engine-javascript-api

I have two feature collections (before and after) that I want to subtract in Earth Engine. Each Feature Collection has an NDVI band computed, BF_NDVI for the before Image and AF_NDVI for the after collection.

I have written the function below from (Line 217) but it returns an error in Line 229: Object is not callable.

Any ideas on how I can solve this to get the resulting difference feature collection for export?

//Positive difference image indicates NDVI loss in the after invasion image
print('Difference_Image', difference)

//Extract before mean NDVI value
var bfMean = beforeCollectionMeans.select('BF_NDVI').first();

print('Before_Mean_NDVI', bfMean)

//Extract after mean NDVI value
var afMean = afterCollectionMeans.select('AF_NDVI').first();

print('After_Mean_NDVI', afMean)

//Get the difference mean NDVI value
var df = function(feature) {
  var diff = feature(bfMean).subtract(afMean)
  return diff;
}

var dfMean = invasionbuffer.map(df);

print('Difference_Mean_NDVI', dfMean)

The link to the full script; https://code.earthengine.google.com/ca15125c7b699144a04fd16fd76fd312

Best Answer

@Shiraz try this function I think it can help you..

var filter = ee.Filter.and(
  ee.Filter.equals({
    leftField: 'doy',
    rightField: 'doy'
  }),
  ee.Filter.equals({
    leftField: 'OBJECTID',
    rightField: 'OBJECTID'
  })
);
  
// var filter = ee.Filter.equals({leftField:'doy', rightField:'doy'})
var join = ee.Join.saveFirst('match')
var merged_all = join.apply(before_zonal_value,after_zonal_value,  filter)

// print(merged_all,"merged_all")

// Build final collection
var merged = merged_all.map(function(feat){
  var match = ee.Feature(feat.get('match'))
  var after = ee.Number(match.get('Mean_NDVI')) 
  var before = ee.Number(feat.get('Mean_NDVI'))
  var diff = before.subtract(after)
  var feture = match.set('Bef_Mean_NDVI', before)
            .set('Aft_Mean_NDVI', after)
            .set('Dif_Mean_NDVI', diff)
  var properties = feture.propertyNames()          
  var selectProperties = properties.filter(ee.Filter.neq('item', "Mean_NDVI"))
  return feture.select(selectProperties)          
})  
  

print(merged,"merged")

full code link

Related Question