Search code examples
javascriptdatedownloadrastergoogle-earth-engine

Image Download error in Google Earth Engine: "Image.date: Image '1' has a 'system:time_start' property which is not a number: 2005-09-01T00:00:00"


I want to download the time series of MODIS rasters from GEE,

var batch = require('users/fitoprincipe/geetools:batch')
print("batch.help", batch.help)

var doy = function(img) {
  var firstDayOfYear = ee.Number(img
    .get("system:time_start"))
    .divide(24*60*60*1000);
  var doy = img.subtract(firstDayOfYear).add(1);
  return doy
    .set("system:time_start", img.get("system:time_start"));
};
var roi = Haryana
var modis_vegetation = ee.ImageCollection("MODIS/006/MOD13Q1")
  .filterBounds(roi);

var startyear = 2000; 
var endyear = 2005;
var startmonth = 9; 
var endmonth = 9; 

var startdate = ee.Date.fromYMD(startyear, startmonth, 1);
var enddate = ee.Date.fromYMD(endyear , endmonth, 30);
var years = ee.List.sequence(startyear, endyear);
var months = ee.List.sequence(startmonth,endmonth);

var ndviCollection = modis_vegetation
  .filterDate(startdate, enddate)
  .select("NDVI");

var monthlyNDVI =  ee.ImageCollection.fromImages(
  years.map(function (y) { 
    return months.map(function(m) {
      var monthly = ndviCollection
        .filter(ee.Filter.calendarRange(y, y, "year"))
        .filter(ee.Filter.calendarRange(m, m, "month"))
        .mean(); 
      return monthly
        .set("year", y) 
        .set("month", m) 
        .set("system:time_start", ee.Date.fromYMD(y, m, 1));}); })
  .flatten());

while batch downloading the image collection it is throwing the error which is "Image.date: Image '5' has a 'system:time_start' property which is not a number: 2005-09-01T00:00:00"

var count = monthlyNDVI.size()
var all_tiles_monthlyNDVI = monthlyNDVI.map(function(image) { return image.reproject('EPSG:4326', null, 250); }); 
var monthlyNDVI_colList = all_tiles_monthlyNDVI.toList(all_tiles_monthlyNDVI.size());
var n = monthlyNDVI_colList.size().getInfo();
for (var i = 0; i < n; i++) {
      
      var img = ee.Image(monthlyNDVI_colList.get(i));
      var id = img.id().getInfo();
      var listOfImages = all_tiles_monthlyNDVI.toList(all_tiles_monthlyNDVI.size());
      var Tile = listOfImages.get(i);
      var allRasters = ee.ImageCollection.fromImages([Tile]);
      print("Raster no " + i, allRasters)

      batch.Download.ImageCollection.toDrive(allRasters, "MODIS", 
      {name: 'monthlyNDVI_250_m_'+id,
      scale: 250,
      region: shapefile_to_use
      })
}

How to convert this 'system:time_start' property to number?


Solution

  • Change

    .set("system:time_start", ee.Date.fromYMD(y, m, 1))
    

    to

    .set("system:time_start", ee.Date.fromYMD(y, m, 1).millis())
    

    to get the correct numerical value (milliseconds since Jan 1 1970) for a system:time_start property.