// Define the region of interest (could be a point or polygon)
var point = ee.Geometry.Point(90.2611485521762, 23.44690280909043);
// Define the start and end years for the time series from 2013 to 2024
var startYear = 2013;
var endYear = 2024;
// Function to filter Landsat images for a specific year and calculate average NDVI
var calculateYearlyAverageNDVI = function(year) {
// Define the date range for the current year
var startDate = ee.Date.fromYMD(year, 1, 1);
var endDate = ee.Date.fromYMD(year, 12, 31);
// Filter the image collection for the year and apply cloud cover filter
var yearlyCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterBounds(point)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUD_COVER', 20)) // Cloud cover less than 20%
.map(function(image) {
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
return image.addBands(ndvi);
});
// Compute the average NDVI for the year
var averageNDVI = yearlyCollection.select('NDVI').mean();
// Extract the average NDVI value at the specified point
var averageNDVIValue = averageNDVI.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: point,
scale: 30
}).get('NDVI');
// Return the result as a feature with the year and average NDVI value
return ee.Feature(null, {
'year': year,
'average_NDVI': averageNDVIValue
});
};
// Generate a list of years from 2013 to 2024
var years = ee.List.sequence(startYear, endYear);
// Apply the function to each year and create a feature collection with the results
var yearlyNDVICollection = ee.FeatureCollection(years.map(calculateYearlyAverageNDVI));
// Print the average NDVI values for each year
print('Yearly Average NDVI:', yearlyNDVICollection);
// Chart the yearly average NDVI values
var chart = ui.Chart.feature.byFeature(yearlyNDVICollection, 'year', 'average_NDVI')
.setOptions({
title: 'Yearly Average NDVI at Point (2013-2024)',
hAxis: {title: 'Year'},
vAxis: {title: 'Average NDVI'},
lineWidth: 2,
pointSize: 3
});
print(chart);
// Map Visualization
Map.centerObject(point, 10);
Map.addLayer(point, {color: 'red'}, 'Selected Point');
// Optionally visualize NDVI of the last year's average
var lastYearNDVI = yearlyNDVICollection.sort('year', false).first();
var lastYearNDVIImage = ee.Image(ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterDate(ee.Date.fromYMD(endYear, 1, 1), ee.Date.fromYMD(endYear, 12, 31))
.select('NDVI')
.mean());
Map.addLayer(lastYearNDVIImage, {min: 0, max: 1, palette: ['white', 'green']}, 'NDVI (2024)');
// Optionally, add a legend for NDVI
var legend = ui.Panel({
style: {
position: 'bottom-right',
padding: '8px 15px'
}
});
legend.add(ui.Label({
value: 'NDVI Values',
style: {
fontWeight: 'bold',
fontSize: '14px',
margin: '0 0 4px 0',
padding: '0'
}
}));
var palette = ['white', 'green'];
var ndviRanges = ['Low NDVI', 'High NDVI'];
for (var i = 0; i < palette.length; i++) {
var colorBox = ui.Label({
style: {
backgroundColor: palette[i],
padding: '8px',
margin: '0 0 4px 0'
}
});
var description = ui.Label({
value: ndviRanges[i],
style: {margin: '0 0 4px 6px'}
});
legend.add(
ui.Panel({
widgets: [colorBox, description],
layout: ui.Panel.Layout.Flow('horizontal')
})
);
}
// Add the legend to the map
Map.add(legend);
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter