我正在尝试使用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
答案 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。