In Google 地球引擎开发人员指南,有一个建议要避免for()
循环。他们建议使用map()
函数如本例所示:
// to avoid
var clientList = [];
for(var i = 0; i < 8; i++) {
clientList.push(i + 1);
}
print(clientList);
// to use
var serverList = ee.List.sequence(0, 7);
serverList = serverList.map(function(n) {
return ee.Number(n).add(1);
});
print(serverList);
我正在尝试在计算 VCI 之前选择每月/每年的 MODIS 场景。所以,我采取的方法是使用双循环:
modis = ee.ImageCollection("MODIS/MYD13A1");
var modis_list = [];
for(var i = 1; i <13; i++) {
for(var j = 2000; j <2018; j++){
modis_list.push(modis.filter(ee.Filter.calendarRange(i, i, 'month'))
.filter(ee.Filter.calendarRange(j, j, 'year')));
}
}
print(modis_list);
有没有办法复制这样的双循环map()
达到服务器端功能的方法是什么?
做到这一点的简单方法是使用一张涵盖您关心的“月份”的地图。
// Collect images for each month, starting from 2000-01-01.
var months = ee.List.sequence(0, 18*12).map(function(n) {
var start = ee.Date('2000-01-01').advance(n, 'month')
var end = start.advance(1, 'month')
return ee.ImageCollection("MODIS/MYD13A1").filterDate(start, end)
})
print(months.get(95))
这将返回 ImageCollections 列表。大多数月份只有 1 张图像,因为 MYD13A1 包含 16 天的图像,但有些月份会有两张。第 95 个月是 2008 年 1 月,有两个月份。
或者,您可以将集合与日期集合连接起来,但这更简单。
如果可能的话,您应该更喜欢filterDate而不是calendarRange,因为它已经过优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)