Search code examples
javascripttime-seriesgoogle-earth-engine

Getting error "image.normalizedDifference is not a function" for my GEE editor code to calculate timeseries of NDVI for a Landsat collection


Please I need help here. I am trying to generate a time-series NDVI chart using the code below, but I keep getting an error that reads "image.normalizedDifference is not a function" I need help with this please. I am new to the GEE platform.

 var finni = ee.FeatureCollection("users/Time-series-NDVI/Finney_shapefile"),
        landsat7 = ee.ImageCollection("LANDSAT/LE07/C02/T1_RT");
    
    //define start and end dates
    var startDate = '2001-01-01'
    var endDate = '2020-12-31'
    
    // filter images to cover only the dates required
    var images = landsat7.filter(ee.Filter.date(startDate, endDate));
    //print(images);
    
    //crop images to my study area
    var imgextent = images.filter(ee.Filter.bounds(finni));
    print(imgextent);
    
    // remove cloud cover
    var image = imgextent.filter(ee.Filter.eq('CLOUD_COVER', 0));
    print(image);
    
    // Select on Red and NIR bands from the collection
    var image = image.select(['B4', 'B3'])
    print(image)
    
    // Compute the Normalized Difference Vegetation Index (NDVI).
    var addNDVI = function(image){
      var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');
      return image.addBands(ndvi);
      };

    //Add the calculated NDVI band to my "image" already containing Red and NIR band 
    var withNDVI = image.map(addNDVI);

//Export a chart of only NDVI layer
var chart = ui.Chart.image.series({
  imageCollection: withNDVI.select('NDVI'),
  region: finni,
  reducer: ee.Reducer.mean(),
  scale: 30
}).setOptions({title: 'NDVI over time'});

// Display the chart in the console.
print(chart);

Solution

  • Use the addBands function with .clip() instead of the select function.

    Use this line return image.addBands(ndvi).clip(finni); instead of this "withNDVI.select('NDVI').clip(finni);" That should work.