
LonghaoWang
V1
2023/02/10阅读:40主题:姹紫
GEE月合成与天合成
GEE中的很多影像都是日尺度、4-day、8-day之类的。但是有时候我们不需要这么精细的时间分辨率。
日合成(以8-day为例)
比如我需要把4-day的LAI(MCD15A3H.061 MODIS Leaf Area Index)合成8-day

这时需要创建List,给List时间属性,用Map循环完成操作:
pkgs.aggLAI = function(imagecollection, start, end){
// calculate days
var days = end.difference(start,'days');
var day8_list = ee.List.sequence(0, days, 8);
// define the day advance function
function make_8day_list(n){
return start.advance(n, 'day');
}
var date_points = day8_list.map(make_8day_list);
// (2)
var aggLAI = function(date){
var image = imagecollection.filter(ee.Filter.date(ee.Date(date), ee.Date(date).advance(9, 'day')))
var image1 = image.first()
var LAI = image.select('Lai').mean()
return LAI
// .copyProperties(image1, image1.propertyNames())
.set("system:time_start", date)
.set("time", date)
}
var new_LAI = date_points.map(aggLAI)
var new_LAI = ee.ImageCollection(new_LAI)
return new_LAI
}
exports = pkgs;
这里写了一个合成8-day的函数,只要给出起始和终止时间即可~
这里的基本思路是创建一个间隔8day的List,如[0, 8, 16, ...]
只需要初始时间.advance相应的days即可获得8-day的时间
再用8-day筛选该时间内的影像赋值平均值
月合成
pkgs.aggLAI = function(imagecollection, start, end){
// calculate month
var startYear = start.get('year')
var endYear = end.get('year')
var years = ee.List.sequence(startYear,endYear);
var months = ee.List.sequence(1,12);
var monthlyImage = ee.ImageCollection.fromImages(
years.map(function (y) {
return months.map(function(m) {
var monthly = imagecollection
.filter(ee.Filter.calendarRange(ee.Number(y), ee.Number(y), "year"))
.filter(ee.Filter.calendarRange(ee.Number(m), ee.Number(m), "month"))
.mean();
return monthly
.set("year", y)
.set("month", m)
.set('date', ee.Date.fromYMD(y,m,1))
.set("system:time_start", ee.Date.fromYMD(y, m, 1));}); })
.flatten());
return monthlyImage
}
exports = pkgs;
月合成的难点是不能再用advance进行固定的day了,因为每个月的天数不一样。
这就要用year和month双循环map,再用Filter.calendarRange
作者介绍

LonghaoWang
V1