0

I am trying to export a GeoTIFF to my Google Drive, but this error occurs -

Error: Image.clipToBoundsAndScale, argument 'input': Invalid type. Expected type: Image. Actual type: ImageCollection. (Error code: 3).-

This is the code I use:

Map.centerObject(geometry);

// Apply Cloud mask
function maskL8sr(col) {

  // Bits 3 and 5 are cloud shadow and cloud, respectively.

  var cloudShadowBitMask = (1 << 3);

  var cloudsBitMask = (1 << 5);

  // Get the pixel QA band.

  var qa = col.select('pixel_qa');

  // Both flags should be set to zero, indicating clear conditions.

  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)

                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));

  return col.updateMask(mask);
}


// Declare visualization parameters (2 sets)

var vizParams = {

  bands: ['B5', 'B6', 'B4'],

  min: 642,

  max: 3307,

  gamma: [1, 0.9, 1.1]

};


var vizParams2 = {

  bands: ['B4', 'B3', 'B2'],

  min: 0,

  max: 3000,

  gamma: 1.4,

};



// Load Landsat Data collection for the data span declared

var col = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')

    .map(maskL8sr)

    .filterDate('2018-03-01','2023-10-1')

   .filterBounds(geometry)

    .map(function(image){return image.clip(geometry)});

print('collection', col);

 

// Image Reduction & Visualization - Product was named Median

var image = col.median();

Map.addLayer(image, vizParams2,'median');

// NDVI Calculation

var ndvi1 = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

var ndviParams = {min: 0.10554729676864096, max: 0.41295681063122924, palette: ['blue', 'white', 'green']};

//individual LST images

var col_list = col.toList(col.size());

var LST_col = col_list.map(function (ele) {

var date = ee.Image(ele).get('system:time_start');

var ndvi = ee.Image(ele).normalizedDifference(['B5', 'B4']).rename('NDVI');


// find the min and max of NDVI

  var min = ee.Number(ndvi.reduceRegion({

    reducer: ee.Reducer.min(),

    geometry: geometry,

    scale: 30,

    maxPixels: 1e9

  }).values().get(0));

 

  var max = ee.Number(ndvi.reduceRegion({

    reducer: ee.Reducer.max(),

    geometry: geometry,

    scale: 30,

    maxPixels: 1e9

  }).values().get(0));

 

  var fv = (ndvi.subtract(min).divide(max.subtract(min))).pow(ee.Number(2)).rename('FV');

 

  var a= ee.Number(0.004);

  var b= ee.Number(0.986);

 

  var EM = fv.multiply(a).add(b).rename('EMM');

 

  var image = ee.Image(ele);

 

  var LST = image.expression(

    '(Tb/(1 + (0.00115* (Tb / 1.438))*log(Ep)))-273.15', {

      'Tb': image.select('B10').multiply(0.1),

      'Ep': fv.multiply(a).add(b)

  });

return ee.Algorithms.If(min, LST.set('system:time_start', date).float().rename('LST'), 0);

}).removeAll([0]);

// Create an Image Collection
LST_col = ee.ImageCollection(LST_col);

print("LST_collection", LST_col);

Map.addLayer(ndvi1, ndviParams, 'ndvi');

// Select Thermal Band 10(with brightness temperature), no calculation

var thermal= image.select('B10').multiply(0.1);

var b10Params = {min: 306.4, max: 322.8, palette: ['blue', 'white', 'green']};

Map.addLayer(thermal, b10Params, 'thermal');

// find the min and max of NDVI

var min = ee.Number(ndvi1.reduceRegion({

  reducer: ee.Reducer.min(),

  geometry: geometry,

  scale: 30,

  maxPixels: 1e9

}).values().get(0));


//print('min', min );

var max = ee.Number(ndvi1.reduceRegion({

  reducer: ee.Reducer.max(),

  geometry: geometry,

  scale: 30,

  maxPixels: 1e9

}).values().get(0));

 

//print('max', max);

 

// Fractional Vegetation Equation

var fv = (ndvi1.subtract(min).divide(max.subtract(min))).pow(ee.Number(2)).rename('FV');

 

//print('fv', fv);

 

//Map.addLayer(fv);

 

//Declare Emissivity coefficients as variables

var a= ee.Number(0.004);

var b= ee.Number(0.986);

var EM = fv.multiply(a).add(b).rename('EMM');

 

var imageVisParam3 = {min: 0.9865619146722164, max:0.989699971371314};

 

//Map.addLayer(EM, imageVisParam3,'EMM');

 

//LST in Celsius Degree bring -273.15

//NB: In Kelvin don't bring -273.15

var LST = col.map(function (image){
var date = image.get('system:time_start');
var LST = image.expression(

    '(Tb/(1 + (0.00115* (Tb / 1.438))*log(Ep)))-273.15', {

    'Tb': thermal.select('B10'),

    'Ep':EM.select('EMM')

  }).float().rename('LST');

   return LST.set('system:time_start', date);
});

//print(LST);

Map.addLayer(LST, {min: 34.22748947143555, max: 50.7606086730957, palette: [

'040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',

'0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',

'3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',

'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',

'ff0000', 'de0101', 'c21301', 'a71001', '911003'

]},'LST');


print(

      ui.Chart.image.series({

        imageCollection: LST_col,

        region: geometry,

        scale: 20, // nominal scale Landsat imagery

        xProperty: 'system:time_start' // default

      }));

//export 
 var LST_map = LST_col.select (['LST']);
 print(LST_map);

 Export.image.toDrive ({image: LST_map, description: 'LST', scale: 20,
  fileFormat: 'GeoTIFF',
});

1 Answer 1

0

The error is that you are giving LST_map as an input to Export.image.toDrive, but LST_map is ee.ImageCollection. You can only export one image per Export task.

Image export tasks are created with a call to a client-side function Export.Image.toX where X is toDrive, toAsset, or toCloudStorage (e.g. Export.Image.toDrive).

You can make your image collection into a list and then use ee.List.get:

var n = myCollection.size().getInfo()  
var imgList = myCollection.tolist(n)
var img = imgList.get(0) 

You can wrap the imgList.get(X) and subsequent call to Export.image.toDrive in a loop or in a function, and create all the export tasks that you need. Note that this process requires the use of .getInfo() because Export.image.toX is a client-side function. Take a look at the full example given in this answer

There are also some third-party modules you can use to handle this process for you, both for javascript and python, some of which are listed below:

3
  • So how to can i choose a specific image out of the collection of 100 images? Oct 24, 2023 at 14:13
  • I updated the answer Oct 25, 2023 at 7:49
  • Thanks a lot, I appreciate your time! Oct 25, 2023 at 13:11

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.