Trying to modify a code in Google Earth Engine I found in the internet which I need for performing time series analysis. I need Landsat images from 1984-2022, that’s why I merged two Image Collection (L5 and L8). But I am getting an error: ImageCollection (Error) Error in map(ID=28): Image.select: Pattern 'B5' did not match any bands.
var collectionL5 = ee.ImageCollection('LANDSAT/LT05/C02/T1_TOA')
.filterBounds(studyArea);
var collectionL8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterBounds(studyArea);
function maskL8sr(collectionL5) {
var cloudShadowBitMask = 1 << 3;
var cloudsBitMask = 1 << 5;
var qa = collectionL5.select('QA_PIXEL');
var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa.bitwiseAnd(cloudsBitMask).eq(0));
return collectionL5.updateMask(mask).divide(10000)
.select("B[0-9]*")
.copyProperties(collectionL5, ["system:time_start"]);
}
function maskL8sr(collectionL8) {
var cloudShadowBitMask = 1 << 3;
var cloudsBitMask = 1 << 5;
var qa1 = collectionL8.select('QA_PIXEL');
var mask = qa1.bitwiseAnd(cloudShadowBitMask).eq(0)
.and(qa1.bitwiseAnd(cloudsBitMask).eq(0));
return collectionL8.updateMask(mask).divide(10000)
.select("B[0-9]*")
.copyProperties(collectionL8, ["system:time_start"]);
}
var imageCollection = collectionL5.merge(collectionL8).filterBounds(studyArea);
var stepList = ee.List.sequence(1984,2021);
var filterCollection = stepList.map(function(year){
var startDate = ee.Date.fromYMD(year,5,1);
var endDate = ee.Date.fromYMD(year,9,15);
var composite_i = imageCollection.filterDate(startDate, endDate)
.map(maskL8sr)
.median()
.set('system:time_start',startDate);
return composite_i;
});
var yearlyComposites = ee.ImageCollection(filterCollection);
print(yearlyComposites, 'Masked and Filtered Composites');
// // Add Enhanced Vegetation Index to a function and apply it.
// // EVI = 2.5 * ((NIR - Red) / (NIR + 6 * Red – 7.5 * Blue + 1))
function evi(img){
var eviImg = img.select(['B5','B4','B2','B6','B3'],['nir','red','blue','swir1','green']);
eviImg = eviImg.expression(
'(2.5 * ((NIR - RED)) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {
'NIR': eviImg.select('nir'),
'RED': eviImg.select('red'),
'BLUE': eviImg.select('blue'),
'SWIR1': eviImg.select('swir1'),
'GREEN': eviImg.select('green')
}).rename('EVI');
return img.addBands(eviImg);
}
yearlyComposites = yearlyComposites.map(function(image){
return evi(image);
});
print(yearlyComposites, 'With EVI as Band');
// Create image collection of yearly composites, selecting the EVI band.
var eviCollection = yearlyComposites.select('EVI');
But I am getting error: ImageCollection (Error) Error in map(ID=28): Image.select: Pattern 'B5' did not match any bands.
I know that the problem is in Image 28. While checking the bands I noticed that image 28 is empty.I also noticed that 28 image is a "transitional" image between the L5 and L8 collections. Image28 Can it be possible that somehow while merging two image collections they overlap each other ending up with empty image inside.