1

我正在尝试使用 Google Earth Engine 中的 TRMM 数据集绘制最大无雨天数。我通过遍历集合来做到这一点,如果没有下雨,则将一个添加到单元格中(下面的代码)。下雨时,该值乘以 0,因此“计数器”被重置。然后我想将每次迭代的每个结果存储在一个图像集合中,然后选择最大值以获得最长的连续干燥期。

但这就是理论。当我将其放入脚本中时,在将一次迭代的图像添加到列表时出现错误。有谁知道这是为什么以及如何解决?

代码:

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 个项目,这让我假设迭代比逐个计算所有图像的字面迭代更复杂?这是错误的图像:

Google 地球引擎错误

如果图像不可见或搜索引擎写入错误:

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].
4

2 回答 2

2

像这样使用多值结果的东西:

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([])})
于 2018-03-20T09:38:08.263 回答
1

iterate() 函数在服务器上运行,但您尝试推入的列表是客户端列表;那行不通。如果你把它变成一个ee.List,你也许可以让它工作,但你必须把它放到上一个结果中(使用previous作为字典来保存两者)。

于 2018-03-18T18:00:13.860 回答