在Google Earth Engine中按年份选择OLS夜间灯光影像集合问题
解决OLS影像集合按日期筛选的问题
嘿,我完全懂你遇到的困扰——OLS(比如DMSP/OLS夜间灯光)数据集的影像集合确实和Landsat这类常规遥感数据集的时间属性逻辑不一样,直接用filterDate()肯定没效果。咱们来拆解问题,一步步搞定它!
为什么常规日期筛选不生效?
OLS影像集合里的每景影像,并没有把年份信息存在通用的system:time_start字段里,而是单独用year这个属性来标记年份。这就是为啥你用针对标准时间字段的filterDate()方法时,根本找不到可匹配的时间数据。
直接按year属性筛选(最简单的方法)
既然OLS自带了year属性,咱们直接用filterMetadata()方法来精准筛选就行,代码示例如下:
// 加载DMSP/OLS夜间灯光影像集合 var olsCollection = ee.ImageCollection('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS'); // 筛选2013年的单景影像 var ols2013 = olsCollection.filterMetadata('year', 'equals', 2013); // 打印结果并添加到地图 print('2013年OLS夜间灯光影像', ols2013); Map.addLayer(ols2013.first(), {min: 0, max: 63}, '2013 Nighttime Lights');
进阶:筛选年份范围
如果需要筛选连续几年的影像,比如2010到2015年,只需要组合两个filterMetadata()条件:
// 筛选2010-2015年的OLS影像集合 var olsYearRange = olsCollection .filterMetadata('year', 'greater_than_or_equal', 2010) .filterMetadata('year', 'less_than_or_equal', 2015); print('2010-2015年OLS影像集合', olsYearRange);
可选:给OLS添加标准时间字段,适配filterDate()
如果你更习惯用Landsat那套filterDate()的操作逻辑,也可以手动给每景OLS影像添加system:time_start字段,把年份转换成对应的时间戳(比如每年的1月1日):
var olsWithStandardTime = olsCollection.map(function(image) { // 获取影像的年份属性,转换成当年1月1日的时间戳 var year = image.get('year'); var timeStart = ee.Date.fromYMD(year, 1, 1).millis(); // 给影像添加标准时间字段 return image.set('system:time_start', timeStart); }); // 现在就可以用熟悉的filterDate()筛选了! var ols2013_v2 = olsWithStandardTime.filterDate('2013-01-01', '2014-01-01'); print('用filterDate筛选的2013年OLS影像', ols2013_v2);
这样不管是单年筛选还是年份范围筛选,都能和操作Landsat一样顺手啦!
内容的提问来源于stack exchange,提问作者supercontra
相关产品推荐
相关产品推荐

