I am trying to download yearly median Landsat 5. Specifically, I am interested in the thermal band (Band 6) and the spectral index called EBBI (formula in the code below).

My initial try, so far is (link to the code I am using) by downloading each month of the year and then calculate the yearly image outside of Google Earth Engine (GEE), in a GIS software. But this takes a huge amount of time and the end shows an error that there are no bands.

How can I export yearly median Landsat 5 images (Thermal and EBBI) in a more efficient way? By efficient I mean something similar to the code I am using to download Landsat 8. As you can see in the code for Landsat 8, all I have to change in order to compute a median monthly image or a median yearly image is to change the range in var landsat = landsat.filter(ee.Filter.calendarRange(1,1,'month')) to var landsat = landsat.filter(ee.Filter.calendarRange(1,12,'month')). And the year of course.

I would like create a similar code for Landsat 5. I have tried to do it but I am getting errors, depending to what parameters I am changing in the Landsat 5 code.

1 Answer 1


A complete code to download median monthly (or yearly, check the comments) Landsat 5 (surface reflectance, collection 1):

// dates
var YEAR_START = 2011;
var MONTH_START = 9;
// export
var CRS = 'EPSG: 7760';
var MAXPIXELS = 1000000000000; // can be replaced with 10e11
var REGION = table;

var landsat = ee.ImageCollection("LANDSAT/LT05/C01/T1_SR");

//Create mask function
function mask_ls_sr_c1(image) {
  // Bits 2, 3 and 5 are water, cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  var waterBitMask = (1 << 2);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
  return image.updateMask(mask);

var landsat = landsat.filter(ee.Filter.calendarRange(YEAR_START, YEAR_END,'year'))
                    .filter(ee.Filter.calendarRange(MONTH_START, MONTH_END, 'month'))
                    // Note 2: when I want to do a yearly composite, I can comment out filtering by month completely

//Calculate the median for each band, multiply by scale factor
//(0.0001), and clip to country polygon
var median1 = landsat.reduce(ee.Reducer.median())

//Calculate the median for B6, multiply by scale factor
//(0.1), and clip to country polygon
var median2 = landsat.select('B6')

//Create variable for each band
var B1 = median1.select('B1_median')
var B2 = median1.select('B2_median')
var B3 = median1.select('B3_median')
var B4 = median1.select('B4_median')
var B5 = median1.select('B5_median')
var B7 = median1.select('B7_median')
var B6 = median2.select('B6_median')

var ebbi = median1.expression('(SWIR - NIR)/ 10 * sqrt(SWIR + TIRS)',
  'TIRS' : B6

  image: B6,
  description: 'tirs',
  scale: 100, //100 for Band10
  maxPixels: MAXPIXELS,
  region: REGION,
  crs: CRS

  image: ebbi,
  description: 'ebbi',
  scale: 100, //100 for Band10
  maxPixels: MAXPIXELS,
  region: REGION,
  crs: CRS

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.