基于 GEE 批量下载 Landsat8 地表温度(LST)数据
目录
1 前言
2 数据处理
3 完整代码
4 运行结果
1 前言
地表温度(Land Surface Temperature, LST)是表征地球表面能量平衡和气候系统的重要参数。它不仅影响大气环流与区域气候,而且还与城市热岛效应、植被蒸散作用及土壤水分密切相关。利用卫星遥感数据,可以在大范围、长时间尺度上对地表温度进行连续监测。其中,Landsat 8 提供了中等空间分辨率(30 m)和热红外波段(TIRS),适合区域尺度的地表温度反演。本文展示如何借助 Google Earth Engine (GEE),实现 2024 年逐月地表温度的自动计算与导出。
数据源选取 Landsat 8 Collection 2 Level 2 SR 产品,包含经过大气校正的地表反射率与亮温数据。本文的代码能够批量生成逐月地表温度数据集,适用于多种研究:
-
城市与区域气候:分析热岛效应时空变化;
-
生态环境保护:评估湿地、森林、农田的热环境差异;
-
农业与水资源管理:监测干旱和蒸散发;
-
灾害风险评估:为热浪和干旱预警提供数据支持。
2 数据处理
(1)划定研究范围(ROI):
先导入你关注的区域(比如城市、流域等),代码里用roi = table
(实际要替换成你在 GEE 资产里的区域路径),还会把区域在地图上标红显示,方便直观查看。
(2)给影像 “去杂质”(掩膜处理):
卫星拍的图,难免有云、数据饱和这些 “杂质”。我们写了个maskL8sr
函数来清理:
- 云掩膜:借助
QA_PIXEL
波段,挑出无云干扰的像元; - 饱和掩膜:通过
QA_RADSAT
波段,筛选无辐射饱和的像元; - 同时,还对光学波段和热红外波段做 “定标”,把原始数据转换成地表反射率、亮温这些能用的格式。
(3)确定时间范围:
以 2024 年全年为例,设定好起始(2024-01-01)和结束(2025-01-01)时间,算出这期间有多少个月,为后续逐月处理做准备。
(4)批量处理 + 导出:
逐月筛选 Landsat 8 影像,用 “中位合成” 法把当月影像合并(减少噪声,让结果更典型),再裁剪到研究区范围。然后从热红外波段(ST_B10)提取数据,把开尔文温度转成常用的摄氏度,最后批量导出到 Google Drive,每个月的文件都清晰命名,方便后续分析。
3 完整代码
// 步骤1:导入感兴趣区域(ROI)
// 请将下面的路径替换为你自己的 ROI 路径(可在 GEE 资产中获取对应 FeatureCollection 路径)
var roi = table;
Map.addLayer(roi.style({color: "red", fillColor: "00000000"}), {}, "ROI");
Map.centerObject(roi, 8);// 步骤2:定义 Landsat 8 SR 影像掩膜函数(去除云、饱和等无效像元)
function maskL8sr(image) {// 云掩膜:利用 QA_PIXEL 波段,筛选低 5 位为 0 的像元(无云等干扰)var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);// 饱和像元掩膜:筛选 QA_RADSAT 波段为 0 的像元(无辐射饱和)var saturationMask = image.select('QA_RADSAT').eq(0);// 光学波段定标(转换为地表反射率)var opticalBands = image.select('SR_B.*').multiply(0.0000275).add(-0.2);// 热红外波段定标(转换为亮温)var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);// 添加定标后波段、应用掩膜并返回处理后影像return image.addBands(opticalBands, null, true).addBands(thermalBands, null, true).updateMask(qaMask).updateMask(saturationMask);
}// 步骤3:定义时间范围(以 2024 年全年为例)
var start = ee.Date('2024-01-01');
var end = ee.Date('2025-01-01');
var nMonths = end.difference(start, 'month');// 步骤4:批量逐月合成并导出地表温度数据
ee.List.sequence(0, nMonths.subtract(1)).getInfo().forEach(function(i) {var startMonth = start.advance(i, 'month');var endMonth = startMonth.advance(1, 'month');// 获取当月经过掩膜处理的影像集合var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2').filterDate(startMonth, endMonth).filterBounds(roi).map(maskL8sr);// 中位合成(减少噪声,保留典型值)并裁剪到 ROIvar composite = collection.median().clip(roi);// 提取热红外波段(ST_B10)并转换为摄氏度var lst = composite.select("ST_B10").subtract(273.15) // 开尔文转摄氏度.rename("LST_C");// 可视化第一个月的结果(方便快速查看)if (i === 0) {Map.addLayer(lst, {min: -10, max: 10, palette: ["blue","cyan","green","yellow","red"]}, 'LST Example');}// 导出到 Google DriveExport.image.toDrive({image: lst,description: 'LST_' + startMonth.format('YYYY_MM').getInfo(),fileNamePrefix: 'LST_' + startMonth.format('YYYY_MM').getInfo(),folder: 'Landsat8_LST', // 可自定义文件夹名region: roi,scale: 30, // 空间分辨率 30 米maxPixels: 1e13,crs: 'EPSG:4326' // WGS84 坐标系});
});
4 运行结果

