替换Google Earth Engine中已删除的Landsat 5数据集计算2012年NDVI
Landsat 5 C02数据集计算NDVI的问题修复
问题原因
- Landsat 5的C01版本数据集已被GEE移除,必须使用C02版本。
- C02版本的**T1_L2(地表反射率产品)**波段命名规则与旧版不同:红波段为
SR_B3,近红外波段为SR_B4,而非旧版的B3/B4。 - 原始代码中存在冗余错误行:
var Filtered_Region = ImageCollection.filterBounds(Region);这里的ImageCollection未指定具体集合,属于无效代码。
修复步骤
- 选择正确的数据集:
- 优先使用
LANDSAT/LT05/C02/T1_L2(地表反射率产品,已完成大气校正,精度更高) - 若需原始辐射率产品,可使用
LANDSAT/LT05/C02/T1,但需自行处理大气校正,波段仍为B3/B4
- 优先使用
- 修正NDVI计算的波段名称:针对T1_L2产品,将
['B4', 'B3']改为['SR_B4', 'SR_B3'] - 移除无效代码行:删除未定义的
Filtered_Region相关代码 - 添加云量过滤(可选但推荐):加入
filterMetadata('CLOUD_COVER', 'less_than', 20)减少云污染对结果的影响
完整修正代码(使用T1_L2地表反射率产品)
// 定义时间范围 var startDate = '2012-04-01'; var endDate = '2012-05-15'; // 计算NDVI的函数(适配Landsat 5 C02 T1_L2) function calculateNDVI(image) { // T1_L2产品的红波段是SR_B3,近红外是SR_B4 var ndvi = image.normalizedDifference(['SR_B4', 'SR_B3']).rename('NDVI'); return image.addBands(ndvi); } // 筛选Landsat 5 C02 T1_L2数据集,添加云量过滤 var landsatCollection = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2') .filterBounds(Region) .filterDate(startDate, endDate) .filterMetadata('CLOUD_COVER', 'less_than', 20) // 过滤云量低于20%的影像 .map(calculateNDVI); // 获取时间范围内的NDVI中位数影像 var medianNDVI = landsatCollection.select('NDVI').median(); // 可视化参数 var visParams = { min: -1, max: 1, palette: ['blue', 'white', 'green'] }; // 添加图层到地图并居中到研究区 Map.addLayer(medianNDVI, visParams, 'NDVI 2012'); Map.centerObject(Region, 10); // 打印结果到控制台 print('Median NDVI Image:', medianNDVI);
补充说明
- 如果坚持使用T1原始产品,只需将数据集ID改为
LANDSAT/LT05/C02/T1,并将NDVI计算的波段改回['B4', 'B3']即可,但原始产品未做大气校正,NDVI精度会受影响。 - 确保已在GEE中定义了
Region研究区变量,否则会出现未定义报错。
内容的提问来源于stack exchange,提问作者GoogleEarthEngine
相关产品推荐
相关产品推荐

