我正在尝试使用Google地球引擎中的TRMM数据集映射无雨天的最大天数。我通过迭代集合来做这件事,如果没有下雨,就会有人加入到单元格中(下面的代码)。当下雨时,该值乘以0,以便重置“计数器”。然后我想将每次迭代的每个结果存储在一个Image集合中,然后选择最大值以获得最长的连续干燥期。
但这就是理论。当我把它放在脚本中时,我将一次迭代的图像添加到列表时出错。有谁知道这是为什么以及如何解决这个问题?
代码:
var list = [];
function drylength(current, previous){
var mask = current.remap([0], [1], 0,"precipitation").rename('precipitation');
var sum = mask.add(previous).multiply(mask);
list.push(sum);
return sum;
}
var dataset = TRMM
.filterDate("2015-01-01","2015-02-01")
.sort('system:time_start:');
var totalPrecipitation = dataset.iterate(drylength, dataset.max()
.remap([0], [0], 0, "precipitation")
.rename('precipitation'));
print(list);
print(totalPrecipitation);
Map.addLayer(ee.Image(totalPrecipitation), imageVisParam);
此外,似乎只有3个项目存储在列表中,这使我假设迭代比文字迭代更复杂,其中所有图像都是逐个计算的?这是错误的图像:
如果图片不可见或搜索引擎写入错误:
Failed to decode JSON.
Error: Field 'value' of object '{"type":"ArgumentRef","value":null}' is missing or null.
Object: {"type":"ArgumentRef","value":null}.
和
Unknown variable references: [_MAPPING_VAR_0_0, _MAPPING_VAR_0_1].
答案 0 :(得分:1)
iterate()函数在服务器上运行,但您尝试推送的列表是客户端列表;那是行不通的。如果你把它作为ee.List,你可能能够使它工作,但是你必须把它放到前面的结果中(使用previous作为字典来保存它们)。
答案 1 :(得分:1)
使用多值结果这样的事情:
function drylength(current, previous) {
previous = ee.Dictionary(previous)
var mask = current.remap([0], [1], 0,"precipitation").rename('precipitation');
var sum = mask.add(previous.get('sum')).multiply(mask);
var list = previous.get('list')
list = list.push(sum);
return ee.Dictionary({sum: sum, list: list})
}
...
var totalPrecipitation = dataset.iterate(drylength, {sum: max, list: ee.List([])})