GEE根据省份信息基于单通道算法显示地表温度LST

** 本文为使用GEE平台显示地表温度,利用landsat8作为数据源基于单通道算法计算并显示地表温度**

代码说明:
数据源:使用LANDSAT/LC08/C02/T1_L2替代MODIS数据;添加云掩膜函数maskL8sr处理云污染;使用中值合成法median()减少异常值影响
LST计算流程: A[原始数据] --> B{辐射定标} B --> C[地表温度计算] C --> D[NDVI计算] D --> E[植被覆盖度估算] E --> F[比辐射率计算] F --> G[温度校正] G --> H[最终LST]
关键参数说明:
1、ST_B10处理:使用官方提供的缩放系数(0.00341802)和偏移量(149.0)
2、比辐射率公式:基于NDVI的植被覆盖度估算方法
3、温度转换公式:基于普朗克定律的单通道算法
此版本代码实现了:1、更高空间分辨率(30米 vs MODIS的1000米);2、真实地表温度计算(非直接观测值);3、完整的云掩膜处理;4、动态温度范围反馈

`// 加载中国省份边界数据
var chinaProvinces = ee.FeatureCollection('projects/ee-2121110051/assets/China_province');

// 获取不重复的省份名称并排序
var provinceNames = chinaProvinces.aggregate_array('name_1')
.distinct()
.sort();

// 创建省份选择下拉菜单
var provinceSelector = ui.Select({
items: provinceNames.getInfo(),
placeholder: '请选择省份',
style: { width: '200px' },
onChange: function(provinceName) {

// 显示选中省份边界
var province = chinaProvinces.filter(ee.Filter.eq('name_1', provinceName)).first();
var provinceGeometry = province.geometry();
Map.addLayer(provinceGeometry, {color: 'FF0000'}, '省份边界');
Map.centerObject(provinceGeometry, 6);

}
});

// 创建操作选择菜单
var actionSelector = ui.Select({
items: ['显示地表温度'],
placeholder: '选择操作',
style: { width: '200px' },
onChange: function(action) {
var provinceName = provinceSelector.getValue();
if (!provinceName) {
ui.alert('请先选择省份!');
return;
}

if (action === '显示地表温度') {
  calculateLST(provinceName);
}

}
});

//将控件添加到界面
Map.add(ui.Panel(provinceSelector));
Map.add(ui.Panel(actionSelector));

// Landsat 8地表温度计算函数
function calculateLST(provinceName) {
var province = chinaProvinces.filter(ee.Filter.eq('name_1', provinceName)).first();
var provinceGeometry = province.geometry();

// 定义时间范围(示例使用2023年夏季)
var startDate = '2023-06-01';
var endDate = '2023-08-31';

// 加载并预处理Landsat 8数据
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(provinceGeometry)
.filterDate(startDate, endDate)
.map(function(image) {
// 云掩膜
var qa = image.select('QA_PIXEL');
var cloud = qa.bitwiseAnd(1 << 3).or(qa.bitwiseAnd(1 << 5));
return image.updateMask(cloud.not());
});

// 中值合成
var composite = collection.median();

// 计算NDVI
var ndvi = composite.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');

// 计算比辐射率
var pv = ndvi.expression(
'((ndvi - 0.2) / (0.5 - 0.2)) ** 2', {'ndvi': ndvi}
).clamp(0, 1);

var emissivity = pv.multiply(0.004).add(0.986);

// 计算地表温度
var thermal = composite.select('ST_B10')
.multiply(0.00341802)
.add(149.0);

// 计算地表温度(单位:摄氏度)
var lst = thermal.expression(
'(Tb / (1 + (0.00115 * Tb / 1.4388) * log(emissivity))) - 273.15', {
'Tb': thermal,
'emissivity': emissivity
}).rename('LST');

// 可视化参数
var visParams = {
min: 25,
max: 45,
palette: [
'#0000FF', '#00FFFF', '#66FF00',
'#FFFF00', '#FFA500', '#FF0000'
]
};

// 添加温度图层
Map.addLayer(lst.clip(provinceGeometry), visParams, 'LST');

// 添加温度统计
var stats = lst.reduceRegion({
reducer: ee.Reducer.minMax(),
geometry: provinceGeometry,
scale: 100,
maxPixels: 1e9
});
print('地表温度统计(℃):', stats);
}
`

posted @ 2025-04-16 16:41  Jackson、  阅读(157)  评论(0)    收藏  举报