5分钟极简指南:用GEE与Landsat8 ST_B10波段实现城市热岛快速分析
当城市规划师需要在一次会议前快速评估热岛效应分布,或是研究生在开题报告中急需补充热环境数据时,传统的地表温度反演方法往往显得笨重而耗时。Google Earth Engine(GEE)平台与Landsat8 L2级数据的结合,为这类需求提供了"开箱即用"的解决方案——直接利用ST_B10热红外波段,无需复杂反演流程即可获得可靠的地表温度数据。
1. 为什么选择ST_B10波段作为直接温度指标
Landsat8 Collection2 Level2产品中的ST_B10波段(地表温度波段)已经过NASA官方处理,直接包含经过大气校正的地表温度信息(单位为开尔文)。这与早期需要自行通过单窗算法或辐射传输方程反演的温度数据相比,具有三个显著优势:
- 数据可靠性:由官方统一处理,避免个人反演过程中的参数选择偏差
- 流程简化:省去NDVI计算、大气透过率估算等6个传统反演步骤
- 即时可用:温度值=波段值×0.00341802+149.0(官方提供的换算系数)
注意:2021年后GEE已将所有Landsat8数据迁移至Collection2,使用旧版Collection1代码会导致波段缺失错误。
2. 五分钟核心操作流程
2.1 数据准备与预处理
首先在GEE中导入研究区域矢量边界(默认变量名table),执行以下代码完成数据筛选与质量控制:
// 定义研究区域和日期范围 var roi = table; var startDate = '2023-05-01'; var endDate = '2023-08-31'; // 加载Landsat8 Collection2 Level2数据 var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') .filterDate(startDate, endDate) .filterBounds(roi);2.2 云掩膜与温度转换
利用QA_PIXEL波段进行云检测,并转换温度单位至摄氏度:
function applyMask(image) { var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0); var thermal = image.select('ST_B10').multiply(0.00341802).add(149.0); return thermal.updateMask(qaMask); } var medianTemp = collection.map(applyMask).median(); var celsius = medianTemp.expression('B1 - 273.15', {'B1': medianTemp.select('ST_B10')});2.3 可视化与结果导出
设置温度显示范围(示例为2-49°C)和色阶:
Map.addLayer(celsius, { min: 2, max: 49, palette: ['blue', 'cyan', 'green', 'yellow', 'red'] }, 'Surface Temperature');导出GeoTIFF到Google Drive:
Export.image.toDrive({ image: celsius, description: 'LST_Export', fileNamePrefix: 'LandSurfaceTemperature', region: roi, scale: 30, crs: 'EPSG:4326' });3. 关键参数优化策略
3.1 时间范围选择建议
不同季节的温度分析需注意数据获取时间:
| 分析目标 | 推荐时间段 | 最少影像数 | 注意事项 |
|---|---|---|---|
| 夏季热岛效应 | 6-8月 | ≥3景 | 避免雨季云量影响 |
| 年度对比 | 同月份不同年份 | ≥5年 | 需统一物候期 |
| 日间温差分析 | 同日Landsat7/8/9 | 2景 | 需校正传感器差异 |
3.2 温度分级显示技巧
城市热岛分析推荐使用非等间距色阶:
var palette = [ '#2b83ba', // <20°C 冷区 '#abdda4', // 20-25°C '#ffffbf', // 25-30°C '#fdae61', // 30-35°C '#d7191c' // >35°C 热岛核心区 ];4. 典型应用场景与结果解读
4.1 城市热岛强度计算
通过提取城乡温度差异量化热岛效应:
// 假设已定义城市区域(urban)和乡村区域(rural) var urbanMean = celsius.reduceRegion({ reducer: ee.Reducer.mean(), geometry: urban, scale: 30 }).get('ST_B10'); var ruralMean = celsius.reduceRegion({ reducer: ee.Reducer.mean(), geometry: rural, scale: 30 }).get('ST_B10'); print('Urban-Rural Temperature Difference:', urbanMean.subtract(ruralMean));4.2 热环境与土地利用关联分析
结合ESA WorldCover数据快速识别高温源:
var landcover = ee.ImageCollection("ESA/WorldCover/v100").first(); Map.addLayer(landcover.clip(roi), {}, 'Land Cover'); // 计算不同地类平均温度 var zonalStats = celsius.addBands(landcover).reduceRegion({ reducer: ee.Reducer.mean().group({ groupField: 1, groupName: 'class' }), geometry: roi, scale: 10 });实际项目中,这种快速分析方法曾帮助某城市规划团队在一周内完成了全市热环境评估,识别出三个需要优先改造的工业区热岛核心。相比传统方法节省了近80%的处理时间,而温度分布规律与气象站数据的一致性达到±1.5°C以内。