GEE-使用NASA GLDAS温度数据时遇到的问题

时间:2019-07-10 11:22:32

标签: google-earth-engine

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

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

也许有更好的方法编写代码以避免该错误。有帮助吗?

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

在代码下方

## Define a list of two dataframes:
df <- data.frame("Var1" = c(0:5), "Var2" = c(-5:0), "Var3" = c(0,0,0,0,0,0))
df2 <- data.frame("VarA" = c(0:5), "VarB" = c(-5:0), "VarC" = c(3,3,3,3,3,3))
my_list <- list(df, df2)
## Colnames to consider, and missing values indicator, for each dataframe:
na_values <- list(0, 3) # NA = 0 in the first one, NA = 3 in the second
cols <- list(c("Var1", "Var2"), c("VarA", "VarB"))
## Define an R function to replace a given character by "NA" in a dataframe:
replace_nas <- function(data, cols, na_value){
    data[ , cols] <- lapply(data[ , cols], FUN = function(x) {
        x[x == na_value] <- NA
        return(x)
    }
    )
    return(data)
}
## Do this operation for each dataframe in "my_list" with a for loop:
res_list <- list()
for (k in 1:length(my_list)) {
    res_list[[k]] <- replace_nas(my_list[[k]], cols[[k]], na_values[[k]])
}
res_list

1 个答案:

答案 0 :(得分:1)

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

// USER SETTINGS //////////////////////////////////////////////////////////////////////////////
var pkg_trend = require('users/kongdd/public:Math/pkg_trend.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');

相应的GEE脚本为https://code.earthengine.google.com/683ea306d5b49e21ec5b7655ff032575

可以找到另一个示例here