1

Whenever I try to export to the drive the image gives me the following error:

Error: Invalid argument: 'image' must be of type Image.

This is my code:

var mod11 = ee.ImageCollection("MODIS/MOD11A2");

// Specify name of country. 
var country_names = ['Vietnam']; 
// get fusion table with countries
var countries = ee.FeatureCollection('ft:1tdSwUL7MVpOauSgRzqVTOwdfy17KDbw-1d9omPw');
// select the country from the fusion table
var vietnamCountry = countries.filter(ee.Filter.inList('Country', country_names)).geometry();

// set start date
var startdate = ee.Date.fromYMD(2000,1,1);
// set end date
var enddate = ee.Date.fromYMD(2017,12,31);

// filter the data collection
var temp =  mod11.filterDate(startdate, enddate)
  .sort('system:time_start', false)
  .filterBounds(vietnamCountry) 
  .select("LST_Day_1km")

// convert LST to celcius
var toCelsius = function(image){
  var time = image.get('system:time_start')
  var celsius = image.multiply(0.02) // scale factor
                     .subtract(273.15) // from kelvin to C
                     .rename("Celcius")
                     .set('system:time_start',time)
  return celsius;
};

var CollectioninCelsius = temp.map(toCelsius)

var viz = {min:20.0, max:34, palette:"000b5e,96048f,4286f4,e2f442,960424"};
Map.addLayer(CollectioninCelsius.median().clip(table),viz,"temperature map")
Map.centerObject(vietnamCountry,5)

// Predefine the chart titles.
var title = {
  title: 'Temperature over time',
  hAxis: {title: 'Time'},
  vAxis: {title: 'Temperature (C)'},
};

// create the chart
var tempchart = ui.Chart.image.seriesByRegion(CollectioninCelsius, 
                           vietnamCountry, 
                           ee.Reducer.mean(), 
                           'Celcius', 
                            1000, 
                           'system:time_start', 
                           'PROJECT').setOptions(title);

// print the chart
print(tempchart);

Export.image.toDrive({
  image: mod11.select('Temp'),
  description: 'Temperatura',
  scale: 10,
  region: table, 
  crs: 'EPSG:4326',
  folder: 'TCC',
  maxPixels: 10000000
});

https://code.earthengine.google.com/25c00e940fdcd572f8b0524a50b86d94

Table: https://code.earthengine.google.com/?asset=users/eldileoliveira/Novapasta

1 Answer 1

1

You need to use the visualize function. It's hard to tell exactly what you want visualize, but I have a feeling this is what you're going for. I couldn't get the table to load right so I just used the Vietnam geometry for clipping instead. Here, what gets plotted on the map pane is the same image as what exports to drive but at a different resolution. If you want full resolution you can change that under the scale option in Export.image.toDrive() - it's a coarse resolution in this example for download speed/file size.

var mod11 = ee.ImageCollection("MODIS/MOD11A2");

// Specify name of country. 
var country_names = ['Vietnam']; 
// get fusion table with countries
var countries = ee.FeatureCollection('ft:1tdSwUL7MVpOauSgRzqVTOwdfy17KDbw-1d9omPw');
// select the country from the fusion table
var vietnamCountry = countries.filter(ee.Filter.inList('Country', country_names)).geometry();

// set start date
var startdate = ee.Date.fromYMD(2000,1,1);
// set end date
var enddate = ee.Date.fromYMD(2017,12,31);

// filter the data collection
var temp =  mod11.filterDate(startdate, enddate)
  .sort('system:time_start', false)
  .filterBounds(vietnamCountry) 
  .select("LST_Day_1km");

// convert LST to celcius
var toCelsius = function(image){
  var time = image.get('system:time_start');
  var celsius = image.multiply(0.02) // scale factor
                     .subtract(273.15) // from kelvin to C
                     .rename("Celcius")
                     .set('system:time_start',time);
  return celsius;
};

var CollectioninCelsius = temp.map(toCelsius).median();

var viz = {min:20.0, max:34, palette:"000b5e,96048f,4286f4,e2f442,960424"};


Map.addLayer(vietnamCountry,{},"vietnamCountry");

var regionTemp = CollectioninCelsius.clip(vietnamCountry);

Map.centerObject(vietnamCountry,5);
Map.addLayer(regionTemp, viz,"temperature map");

print("region Temp",regionTemp);

var tempExport = regionTemp.visualize({bands:'Celcius', min:20.0, max:34, palette:"000b5e,96048f,4286f4,e2f442,960424"});

Export.image.toDrive({
  image: tempExport,
  description: 'Temperatura',
  scale: 10000,
  region: vietnamCountry, 
  crs: 'EPSG:4326',
  folder: 'TCC',
  maxPixels: 10000000
});
1
  • 2
    The visualize function is not the one doing the trick here. You tried to export an ImageCollection (mod11), however, you can only export single images. The reducer 'median' makes a single composite of the image collection (var CollectioninCelsius = temp.map(toCelsius).median();). That said, it does not seem reasonable to export an 19-year median landsurface temperature. You might want to make something like seasonal composites, but that depends on your goal.
    – Kuik
    Apr 3, 2019 at 7:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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