feat(LST_download): 添加MODIS LST数据支持并调整可视化范围.
This commit is contained in:
parent
b8a617ed8d
commit
f1a88995db
@ -1,12 +1,12 @@
|
|||||||
/**
|
/**
|
||||||
* Landsat 系列地表温度 (LST) 数据下载 —— 以年平均温度处理下载为例
|
* 地表温度 (LST) 数据下载 —— 以年平均温度处理下载为例
|
||||||
*
|
*
|
||||||
* @author CVEO Team
|
* @author CVEO Team
|
||||||
* @date 2026-01-15
|
* @date 2026-01-15
|
||||||
*
|
*
|
||||||
* 1. 加载 Landsat-8, Landsat-9 SR 数据
|
* 1. 加载并合并 Landsat-8, 9 30m LST 数据
|
||||||
* 2. 合并 Landsat-8, Landsat-9 LST 数据
|
* 2. 加载 MODIS MOD11A2 1km LST 数据
|
||||||
* 3. 合成年度平均 Landsat LST 数据
|
* 3. 合成年度平均 LST 数据
|
||||||
* 4. 导出 COG 云优化并填补缺失值的 GeoTIFF 影像 (大区域 GEE 自动分块下载)
|
* 4. 导出 COG 云优化并填补缺失值的 GeoTIFF 影像 (大区域 GEE 自动分块下载)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -25,6 +25,7 @@ var start_date = start_year + "-01-01";
|
|||||||
var end_date = end_year + "-12-31";
|
var end_date = end_year + "-12-31";
|
||||||
var cloud_threshold = 90; // 最大云量阈值
|
var cloud_threshold = 90; // 最大云量阈值
|
||||||
var LansatBands = ["ST_B10"];
|
var LansatBands = ["ST_B10"];
|
||||||
|
var MODISBands = ["LST_Day_1km"];
|
||||||
var commonBands = ["LST"];
|
var commonBands = ["LST"];
|
||||||
|
|
||||||
var region_geo = region.geometry();
|
var region_geo = region.geometry();
|
||||||
@ -47,6 +48,16 @@ function applyScaleFactors(image) {
|
|||||||
.addBands(thermalBands, null, true);
|
.addBands(thermalBands, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies scaling factors for MODIS.
|
||||||
|
* @param {ee.Image} image MODIS LST image
|
||||||
|
* @returns {ee.Image} MODIS LST image with scaled bands
|
||||||
|
*/
|
||||||
|
function applyModisScaleFactors(image) {
|
||||||
|
return image.multiply(0.02)
|
||||||
|
.copyProperties(image, ["system:time_start", "system:index", "system:id"]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开尔文转摄氏度
|
* 开尔文转摄氏度
|
||||||
* @param {ee.Image} image Landsat LST image
|
* @param {ee.Image} image Landsat LST image
|
||||||
@ -90,6 +101,14 @@ var L9dataset = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2")
|
|||||||
.filter(ee.Filter.lt("CLOUD_COVER", cloud_threshold));
|
.filter(ee.Filter.lt("CLOUD_COVER", cloud_threshold));
|
||||||
print(start_date + " - " + end_date + " Landsat-9 SR dataset", L9dataset);
|
print(start_date + " - " + end_date + " Landsat-9 SR dataset", L9dataset);
|
||||||
|
|
||||||
|
// 加载 MODIS LST 数据
|
||||||
|
var MODISLSTdataset = ee.ImageCollection('MODIS/061/MOD11A2')
|
||||||
|
.filter(common_filter)
|
||||||
|
.select(MODISBands, commonBands)
|
||||||
|
.map(applyModisScaleFactors)
|
||||||
|
.map(kelvinToCelsius);
|
||||||
|
print(start_date + " - " + end_date + " MODIS LST dataset", MODISLSTdataset);
|
||||||
|
|
||||||
// 合并 Landsat-8, Landsat-9 LST 数据
|
// 合并 Landsat-8, Landsat-9 LST 数据
|
||||||
var LSTdataset = L8dataset.merge(L9dataset)
|
var LSTdataset = L8dataset.merge(L9dataset)
|
||||||
.map(applyScaleFactors)
|
.map(applyScaleFactors)
|
||||||
@ -123,15 +142,39 @@ if (start_year == end_year) {
|
|||||||
}
|
}
|
||||||
print(year_str + " Annual Mean Landsat LST dataset", yearlyLST);
|
print(year_str + " Annual Mean Landsat LST dataset", yearlyLST);
|
||||||
|
|
||||||
|
// 合成年度平均 MODIS LST 数据
|
||||||
|
var yearlyMODISLST = ee.ImageCollection.fromImages(
|
||||||
|
years.map(function (y) {
|
||||||
|
return ee.ImageCollection.fromImages(
|
||||||
|
months.map(function (m) {
|
||||||
|
return MODISLSTdataset
|
||||||
|
.filter(ee.Filter.calendarRange(y, y, "year"))
|
||||||
|
.filter(ee.Filter.calendarRange(m, m, "month"))
|
||||||
|
.mean()
|
||||||
|
.clip(bounds)
|
||||||
|
.set("month", m)
|
||||||
|
.set("year", y);
|
||||||
|
})
|
||||||
|
).mean().set("year", y);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
print(year_str + " Annual Mean MODIS LST dataset", yearlyMODISLST);
|
||||||
|
|
||||||
var total_mean_LST = LSTdataset.select("LST").mean();
|
var total_mean_LST = LSTdataset.select("LST").mean();
|
||||||
print(year_str + " Total Year Mean Landsat LST Histogram", ui.Chart.image.histogram(total_mean_LST, region, 100, 258));
|
print(year_str + " Total Year Mean Landsat LST Histogram", ui.Chart.image.histogram(total_mean_LST, region, 100, 258));
|
||||||
|
|
||||||
var annual_mean_LST = yearlyLST.select("LST").mean();
|
var annual_mean_LST = yearlyLST.select("LST").mean();
|
||||||
print(year_str + " Annual Mean Landsat LST Histogram", ui.Chart.image.histogram(annual_mean_LST, region, 100, 258));
|
print(year_str + " Annual Mean Landsat LST Histogram", ui.Chart.image.histogram(annual_mean_LST, region, 100, 258));
|
||||||
|
|
||||||
|
var total_mean_MODIS_LST = MODISLSTdataset.select("LST").mean();
|
||||||
|
print(year_str + " Total Year Mean MODIS LST Histogram", ui.Chart.image.histogram(total_mean_MODIS_LST, region, 1000, 258));
|
||||||
|
|
||||||
|
var annual_mean_MODIS_LST = yearlyMODISLST.select("LST").mean();
|
||||||
|
print(year_str + " Annual Mean MODIS LST Histogram", ui.Chart.image.histogram(annual_mean_MODIS_LST, region, 1000, 258));
|
||||||
|
|
||||||
var lst_vis = {
|
var lst_vis = {
|
||||||
min: 2,
|
min: 5,
|
||||||
max: 40,
|
max: 35,
|
||||||
palette: [
|
palette: [
|
||||||
'040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
|
'040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
|
||||||
'0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
|
'0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
|
||||||
@ -149,6 +192,8 @@ var styling = {
|
|||||||
Map.centerObject(region, 10);
|
Map.centerObject(region, 10);
|
||||||
Map.addLayer(total_mean_LST, lst_vis, year_str + " Landsat Total Year Mean LST");
|
Map.addLayer(total_mean_LST, lst_vis, year_str + " Landsat Total Year Mean LST");
|
||||||
Map.addLayer(annual_mean_LST, lst_vis, year_str + " Landsat Annual Mean LST");
|
Map.addLayer(annual_mean_LST, lst_vis, year_str + " Landsat Annual Mean LST");
|
||||||
|
Map.addLayer(total_mean_MODIS_LST, lst_vis, year_str + " MODIS Total Year Mean LST");
|
||||||
|
Map.addLayer(annual_mean_MODIS_LST, lst_vis, year_str + " MODIS Annual Mean LST");
|
||||||
Map.addLayer(region.style(styling), {}, region_name);
|
Map.addLayer(region.style(styling), {}, region_name);
|
||||||
|
|
||||||
// 导出合并后的影像
|
// 导出合并后的影像
|
||||||
@ -158,7 +203,7 @@ var processed_img = annual_mean_LST.toFloat().unmask(-9999.0);
|
|||||||
print("Start exporting " + year_str + "Yearly Mean LST image (" + crs + ")", processed_img);
|
print("Start exporting " + year_str + "Yearly Mean LST image (" + crs + ")", processed_img);
|
||||||
Export.image.toDrive({
|
Export.image.toDrive({
|
||||||
image: processed_img,
|
image: processed_img,
|
||||||
description: region_name_en + "_LST_" + year_str,
|
description: region_name_en + "_LST_" + year_str + "_30m",
|
||||||
folder: "LST",
|
folder: "LST",
|
||||||
region: region, // 添加后会自动裁剪
|
region: region, // 添加后会自动裁剪
|
||||||
scale: 30,
|
scale: 30,
|
||||||
@ -171,3 +216,21 @@ Export.image.toDrive({
|
|||||||
noData: -9999.0,
|
noData: -9999.0,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 导出 MODIS 合并后的影像
|
||||||
|
var processed_modis_img = annual_mean_MODIS_LST.toFloat().unmask(-9999.0);
|
||||||
|
print("Start exporting " + year_str + " MODIS Yearly Mean LST image (" + crs + ")", processed_modis_img);
|
||||||
|
Export.image.toDrive({
|
||||||
|
image: processed_modis_img,
|
||||||
|
description: region_name_en + "_LST_" + year_str + "_1km",
|
||||||
|
folder: "LST",
|
||||||
|
region: region,
|
||||||
|
scale: 1000,
|
||||||
|
crs: crs,
|
||||||
|
maxPixels: 1e13,
|
||||||
|
fileFormat: "GeoTIFF",
|
||||||
|
formatOptions: {
|
||||||
|
cloudOptimized: true,
|
||||||
|
noData: -9999.0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user