From f1a88995dbecd0ad6d066f267c6f5e906a8b2f2e Mon Sep 17 00:00:00 2001 From: gis-xh Date: Thu, 15 Jan 2026 17:52:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(LST=5Fdownload):=20=E6=B7=BB=E5=8A=A0MODIS?= =?UTF-8?q?=20LST=E6=95=B0=E6=8D=AE=E6=94=AF=E6=8C=81=E5=B9=B6=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E5=8F=AF=E8=A7=86=E5=8C=96=E8=8C=83=E5=9B=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GEE_Scripts/LST_download.js | 77 +++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/GEE_Scripts/LST_download.js b/GEE_Scripts/LST_download.js index c191b64..f98db55 100644 --- a/GEE_Scripts/LST_download.js +++ b/GEE_Scripts/LST_download.js @@ -1,12 +1,12 @@ /** - * Landsat 系列地表温度 (LST) 数据下载 —— 以年平均温度处理下载为例 + * 地表温度 (LST) 数据下载 —— 以年平均温度处理下载为例 * * @author CVEO Team * @date 2026-01-15 * - * 1. 加载 Landsat-8, Landsat-9 SR 数据 - * 2. 合并 Landsat-8, Landsat-9 LST 数据 - * 3. 合成年度平均 Landsat LST 数据 + * 1. 加载并合并 Landsat-8, 9 30m LST 数据 + * 2. 加载 MODIS MOD11A2 1km LST 数据 + * 3. 合成年度平均 LST 数据 * 4. 导出 COG 云优化并填补缺失值的 GeoTIFF 影像 (大区域 GEE 自动分块下载) */ @@ -25,6 +25,7 @@ var start_date = start_year + "-01-01"; var end_date = end_year + "-12-31"; var cloud_threshold = 90; // 最大云量阈值 var LansatBands = ["ST_B10"]; +var MODISBands = ["LST_Day_1km"]; var commonBands = ["LST"]; var region_geo = region.geometry(); @@ -47,6 +48,16 @@ function applyScaleFactors(image) { .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 @@ -90,6 +101,14 @@ var L9dataset = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2") .filter(ee.Filter.lt("CLOUD_COVER", cloud_threshold)); 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 数据 var LSTdataset = L8dataset.merge(L9dataset) .map(applyScaleFactors) @@ -123,15 +142,39 @@ if (start_year == end_year) { } 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(); 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(); 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 = { - min: 2, - max: 40, + min: 5, + max: 35, palette: [ '040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6', '0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef', @@ -149,6 +192,8 @@ var styling = { Map.centerObject(region, 10); 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(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); // 导出合并后的影像 @@ -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); Export.image.toDrive({ image: processed_img, - description: region_name_en + "_LST_" + year_str, + description: region_name_en + "_LST_" + year_str + "_30m", folder: "LST", region: region, // 添加后会自动裁剪 scale: 30, @@ -171,3 +216,21 @@ Export.image.toDrive({ 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, + }, +});