You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:00:49