【问题标题】:GEE - Problems in using NASA GLDAS temperature dataGEE - 使用 NASA GLDAS 温度数据的问题
【发布时间】:2019-07-10 11:22:32
【问题描述】:

我正在尝试使用 NASA GLDAS 温度数据来生成年度和长期统计数据。数据是每小时 3 次,我需要每天获取最大值。然后我想计算每日数据的长期平均值(即 2010 年到 2018 年)。 该代码可以在很短的时间内(几个月)工作,但会因较长的时间序列而失败。

错误信息是:超出用户内存限制或计算超时。

可能有更好的方法来编写代码以避免错误。有什么帮助吗?

这里是 GEE 代码的链接 https://code.earthengine.google.com/a83616530a8ed4af96dc4118328691e1

下面是代码

// USER SETTINGS //////////////////////////////////////////////////////////////////////////////
//


var ROI = geometry;


// Define time range
var startyear = 2010;
var endyear = 2018;

var startmonth = 1 
var endmonth = 12 

var startday = 1 
var endday = 31  



var vis = {min: 10.0,max: 30.0,palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'],};
var vis_D = {min: -2.0,max: 2.0,palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'],};



////////////////////////////////////////////////////////////////////////////////////////////////

var clip = function(img) {return img.clip(ROI);}   
var collection = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
                    .filterBounds(ROI)
                    .map(clip)
                    .select('Tair_f_inst');


// Set date in ee date format
var startdate = ee.Date.fromYMD(startyear,startmonth,startday);
var enddate = ee.Date.fromYMD(endyear,endmonth,endday).advance(1, 'day');

// create list for years
var years = ee.List.sequence(startyear,endyear);

// create list for months
var months = ee.List.sequence(startmonth,endmonth);

// get days in month
function getDaysInMonth(y,m) {
  var dt = ee.Date.fromYMD(y,m,1);
  var n = dt.advance(1,"month").difference(dt,'day');
  return ee.List.sequence(1,n);
}

// get days in month for AVG
function getDaysInMonth2(m) {
  var dt = ee.Date.fromYMD(1970,m,1);
  var n = dt.advance(1,"month").difference(dt,'day');
  return ee.List.sequence(1,n);
}

//get projection of the dataset
var proj = ee.Image(collection.first()).projection();



// Filter data
var datain = collection.filterDate(startdate, enddate)
  // .filter(ee.Filter.calendarRange(startmonth,endmonth, 'month'))


// convert to Celsius
var datain = datain.select('Tair_f_inst').map(function(image) {
  return image.subtract(273.15).rename('tmp')
  .set('system:time_start', image.get('system:time_start'))
  .set('doy', image.date().format('YYYY-MM-dd'))
})
// print(datain,'datain')



// aggregate hourly to daily
var daily =  ee.ImageCollection.fromImages(
  years.map(function (y) {
     return months.map(function(m) {
        var days = getDaysInMonth(y,m) 
        return days.map(function(d) {
          var filtered_Daily = datain.filter(ee.Filter.calendarRange(y, y, 'year'))
                    .filter(ee.Filter.calendarRange(m, m, 'month'))
                    .filter(ee.Filter.calendarRange(d, d, 'day_of_month'))
                    .max();
        return filtered_Daily.set('year', y)
              .set('month', m)
              .set('day', d)
              .set('date', ee.Date.fromYMD(y, m, d))
              .set('system:time_start', ee.Date.fromYMD(y, m, d).millis());

    });
    });
  }).flatten()
);

// print (daily,'daily');
// Map.addLayer(daily.first(), vis,'Air_Tmp');



var daily_LTA =  ee.ImageCollection.fromImages(
     months.map(function(m) {
        var days = getDaysInMonth2(m) 
        return days.map(function(d) {
          var filtered_Daily = datain
                    .filter(ee.Filter.calendarRange(m, m, 'month'))
                    .filter(ee.Filter.calendarRange(d, d, 'day_of_month'))
                    .mean()
                    .rename('tmp_LTA');
        return filtered_Daily.set('year', 1970)
              .set('month', m)
              .set('day', d)
              .set('date', ee.Date.fromYMD(1970, m, d))
              .set('system:time_start', ee.Date.fromYMD(1970, m, d).millis());

    });
  }).flatten()
);

print (daily_LTA,'daily_LTA');
Map.addLayer(daily_LTA.first(), vis,'Air_Tmp_LTA');

【问题讨论】:

    标签: google-earth-engine


    【解决方案1】:

    使用我的包,脚本可以非常简单,甚至对于全局应用程序也很高效。

    // USER SETTINGS //////////////////////////////////////////////////////////////////////////////
    var pkg_trend = require('users/kongdd/pkgs:/pkgs.js');
    
    function add_date(img){
        var date  = ee.Date(img.get('system:time_start'));
        var date_daily = date.format('YYYY-MM-dd');
        return img.set('date_daily', date_daily);
    }
    
    function k2C(img){
        return img.subtract(273.15);
    }
    
    var clip = function(img) { return img.clip(ROI); };
    
    /** END OF FUNCTIONS -------------------------------------------------------- */
    
    // CREATE GLOBAL ROI
    // var ROI = ee.Geometry.Polygon([-180, 90, 0, 90, 180, 90, 180, -90, 10, -90, -180, -90], null, false)
    // Map.addLayer(ROI,{}, 'ROI')
    // IF YOU DRAW A POLY OR POINT
    var ROI = geometry;
    
    // Set date in ee date format
    var date_start = ee.Date('2016-01-01');
    var date_end   = ee.Date('2018-12-31');
    
    var imgcol = ee.ImageCollection('NASA/GLDAS/V021/NOAH/G025/T3H')
        // .filterBounds(ROI) // this not work
        .filterDate(date_start, date_end)
        .map(add_date)
        // .map(clip)
        .select('Tair_f_inst');
    
    var imgcol_daily = pkg_trend.aggregate_prop(imgcol, "date_daily", 'mean')
        .map(k2C);
    
    // imgcol = pkg_trend.imgcol_addSeasonProb(imgcol); 
    print(imgcol.limit(3), imgcol.size());
    print(imgcol_daily.limit(3), imgcol_daily.size());
    
    var vis = { min: 10.0, max: 30.0, palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'], };
    var vis_D = { min: -2.0, max: 2.0, palette: ['1303ff', '42fff6', 'f3ff40', 'ff5d0f'], };
    
    /** VISUALIZATION ------------------------------------------------------------*/
    // print (daily,'daily');
    // Map.addLayer(daily.first(), vis,'Air_Tmp');
    print(imgcol_daily.size(), 'daily_LTA');
    Map.addLayer(imgcol_daily.first(), vis, 'Air_Tmp_LTA');
    

    另一个例子可以在here找到。

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多