当前位置: 首页 > news >正文

基于 GEE 的 MODIS 昼夜地表温度数据可视化与导出全流程解决方案

目录

一、研究区域(ROI)设置与地图初始化

(一)研究区域定义(ROI)

(二)地图定位与 ROI 可视化

二、时间范围设置(数据时间筛选依据)

三、MODIS LST 数据读取与预处理(核心步骤)

(一)数据集选择与筛选

(二)白天温度数据处理(从原始数据到摄氏度)

(三)夜间温度数据处理(与白天逻辑一致)

(四)昼夜平均温度计算(衍生指标)

四、可视化参数设置(地图显示优化)

(一)白天温度可视化(viz_day)

(二)夜间温度可视化(viz_night)

(三)平均温度可视化(viz_mean)

五、地图图层添加与显示控制

六、数据导出到 Google Drive(结果保存)

(一)关键参数深度解析

(二)导出操作流程

七、运行结果


若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

本代码基于Google Earth Engine(GEE) 平台编写,使用 GEE 的 JavaScript API 实现功能。GEE 是谷歌推出的云平台,集成了海量遥感数据(如 MODIS、Landsat 等)和地理空间分析工具,无需本地下载数据即可完成大规模空间数据处理。本代码的核心应用场景是地表温度(LST)时空分析,适用于农业干旱监测、城市热岛效应研究、生态环境评估等领域,针对特定区域的月度昼夜温度进行提取、计算、可视化与导出。

一、研究区域(ROI)设置与地图初始化

var roi = table;
// var roi = geometry;  // 手绘ROI时替换
Map.centerObject(roi, 9);
Map.addLayer(roi, { color: 'red' }, 'ROI');

(一)研究区域定义(ROI)

  • var roi = tabletable是 GEE 中的 “矢量表格数据” 变量,需提前导入(如从本地上传 Shapefile、KML 等矢量边界文件,或从 GEE 内置矢量数据集(如国家 / 省界)中筛选),代表研究的空间范围(如某城市、某流域)。
  • // var roi = geometry:注释行中的geometry是 GEE 中 “手绘几何图形” 的变量,若用户在 GEE 地图界面通过 “绘图工具” 手动绘制矩形、多边形等区域,需删除第一行var roi = table的注释,同时为该行添加注释,确保roi指向手绘区域。
  • 技术细节:ROI 的类型是ee.Geometry(几何对象)或ee.FeatureCollection(要素集合),后续所有数据处理(筛选、裁剪)均基于该范围,避免无关区域数据干扰。

(二)地图定位与 ROI 可视化

  • Map.centerObject(roi, 9)
    • Map是 GEE 的地图对象,用于控制地图显示;
    • centerObject(roi, 9):将地图视角自动定位到 ROI 的几何中心,第二个参数 “9” 是地图缩放级别(GEE 缩放级别范围为 0-24,0 代表全球视角,24 代表米级细节,9 约对应 “区域级” 视角,可根据 ROI 大小调整,如小区域设 12-15,大区域设 6-8)。
  • Map.addLayer(roi, { color: 'red' }, 'ROI')
    • addLayer是地图添加图层的核心函数,参数依次为 “待添加数据”“样式配置”“图层名称”;
    • { color: 'red' }:设置 ROI 的显示颜色为红色(可替换为#ff0000十六进制色值或'blue'等英文色名);
    • 'ROI':图层在地图图例中的名称,便于用户识别和切换。

二、时间范围设置(数据时间筛选依据)

var startDate = '2025-07-01';
var endDate   = '2025-07-31';
  • 格式要求:GEE 中日期需采用'YYYY-MM-DD'(年 - 月 - 日)字符串格式,若写成'2025/07/01'会导致筛选失败。
  • 时间筛选逻辑:后续读取 MODIS 数据时,会仅保留 “拍摄时间在startDate(含)到endDate(不含)之间” 的影像 —— 即本代码提取 2025 年 7 月 1 日至 7 月 31 日的完整月度数据(注:GEE 日期筛选为 “左闭右开”,endDate设为'2025-08-01'可实现相同效果)。
  • 应用场景:若需分析季节温度变化,可将startDate设为'2025-06-01'endDate设为'2025-08-31'(夏季);若需逐年对比,可固定月份(如 7 月)、修改年份(如'2024-07-01')。

三、MODIS LST 数据读取与预处理(核心步骤)

(一)数据集选择与筛选

var modis = ee.ImageCollection("MODIS/061/MOD11A2").filterDate(startDate, endDate).filterBounds(roi);
  • 数据集说明

    • "MODIS/061/MOD11A2":GEE 中的 MODIS 地表温度数据集 ID,其中 “061” 代表数据版本(V6.1,是当前(截至 2024 年 5 月)的最新稳定版),“MOD11A2” 是产品名称 —— 该产品是8 天合成的 1 公里分辨率昼夜地表温度数据(即每 8 天生成 1 幅影像,避免单天云污染导致的数据缺失)。
    • 该数据集包含多个波段,核心波段为LST_Day_1km(白天地表温度)和LST_Night_1km(夜间地表温度),此外还有质量控制波段(如QC_Day)用于筛选有效数据(本代码未涉及质量控制,若需提升精度,可添加filter筛选高质量像元)。
  • 双重筛选逻辑

    • filterDate(startDate, endDate):按时间范围筛选,仅保留 7 月内的影像(2025 年 7 月共 31 天,会筛选出 4 幅影像:7 月 1-8 日、9-16 日、17-24 日、25-31 日);
    • filterBounds(roi):按空间范围筛选,仅保留 “影像覆盖范围与 ROI 有交集” 的影像,剔除完全不包含研究区域的冗余数据。

(二)白天温度数据处理(从原始数据到摄氏度)

var lst_day = modis.select('LST_Day_1km').mean().multiply(0.02).subtract(273.15).rename('LST_Day_C');

该段代码是数据预处理的核心,每一步均针对 MODIS 数据的格式特点设计,具体解析如下:

步骤代码片段功能与原理技术细节
1select('LST_Day_1km')从影像集合中提取 “白天温度波段”若需同时处理质量控制波段,可写为select(['LST_Day_1km', 'QC_Day'])
2.mean()计算时间范围内所有影像的平均值将 7 月的 4 幅白天温度影像取平均,得到 “7 月白天平均温度”,消除单幅影像的云污染或异常值影响
3.multiply(0.02)原始数据缩放还原MODIS LST 原始数据以 “整数” 形式存储(为减少存储空间),真实值 = 原始值 ×0.02(该系数是 MODIS 数据手册规定的固定值)
4.subtract(273.15)单位转换(开尔文→摄氏度)MODIS 原始温度单位为 “开尔文(K)”,摄氏度(℃)= 开尔文 - 273.15,转换后的数据更符合实际应用习惯
5.rename('LST_Day_C')波段重命名命名格式为 “数据类型_时间_单位”,LST_Day_C代表 “白天地表温度(摄氏度)”,便于后续识别和导出

(三)夜间温度数据处理(与白天逻辑一致)

var lst_night = modis.select('LST_Night_1km').mean().multiply(0.02).subtract(273.15).rename('LST_Night_C');

唯一差异是select('LST_Night_1km'):提取 “夜间温度波段”,其余步骤(求平均、缩放、单位转换、重命名)与白天温度完全一致,最终得到 “7 月夜间平均温度(摄氏度)” 数据。

(四)昼夜平均温度计算(衍生指标)

var lst_mean = lst_day.add(lst_night).divide(2).rename('LST_Mean_C');
  • 计算逻辑:基于 “白天平均温度” 和 “夜间平均温度”,通过逐像元运算得到 “昼夜平均温度”—— 即每个空间像元的温度值 =(该像元白天温度 + 该像元夜间温度)÷2。
  • GEE 运算特性:GEE 的影像运算(add/divide)是 “逐像元并行计算”,无需循环遍历每个像元,效率极高,适合大规模区域(如全国、全球)的数据处理。
  • 应用价值:昼夜平均温度比单一白天 / 夜间温度更能反映区域整体热状况,是农业作物生长、生态系统呼吸分析的常用指标。

四、可视化参数设置(地图显示优化)

为不同温度数据设计差异化的可视化方案,核心是 “匹配数据取值范围 + 选择辨识度高的颜色渐变”,避免因温度范围不匹配导致的 “一片空白” 或 “颜色溢出” 问题。

(一)白天温度可视化(viz_day)

var viz_day = {min: 15,    // 最低显示温度(℃)max: 55,    // 最高显示温度(℃)palette: ['#001aff', '#00bfff', '#7fff00', '#ffff00', '#ff7f00', '#ff0000']  // 颜色渐变方案
};
  • 温度范围设计依据:7 月为夏季,多数地区白天地表温度在 15-55℃之间(如温带地区约 15-35℃,热带沙漠地区可达 50℃以上),设置min=15max=55可覆盖绝大多数场景;若研究区域为高纬度地区,可将min下调至 10℃。
  • 颜色方案逻辑:采用 “冷色→暖色→暖色” 的渐变,对应温度 “低→中→高”:
    • #001aff(深蓝色)→#00bfff(浅蓝色):15-25℃(低温区,如高海拔或高纬度地区);
    • #7fff00(浅绿色)→#ffff00(黄色):25-35℃(中温区,如温带农田);
    • #ff7f00(橙色)→#ff0000(红色):35-55℃(高温区,如城市建成区、沙漠)。

(二)夜间温度可视化(viz_night)

var viz_night = {min: 5,max: 35,palette: ['#001a66', '#0073e6', '#66ccff', '#ffff99', '#ff9933', '#cc0000']
};
  • 温度范围调整:夜间无太阳辐射,温度普遍低于白天,故min=5max=35(如热带地区夜间约 20-35℃,温带地区约 5-20℃,寒带地区可能低于 5℃,低于 5℃的像元会显示为最浅的冷色)。
  • 颜色方案调整:采用 “更深的冷色→更暗的暖色”,与白天形成区分:
    • #001a66(深海军蓝)→#0073e6(中蓝色):5-15℃(夜间低温区);
    • #66ccff(浅蓝)→#ffff99(浅黄):15-25℃(夜间中温区);
    • #ff9933(深橙)→#cc0000(深红):25-35℃(夜间高温区,如城市热岛中心)。

(三)平均温度可视化(viz_mean)

var viz_mean = {min: 10,max: 45,palette: ['#003366', '#0099cc', '#66ff66', '#ffff66', '#ff9900', '#ff0000']
};
  • 温度范围折中:昼夜平均温度介于白天和夜间之间,故min=10max=45,覆盖绝大多数场景;
  • 颜色方案平衡:冷色端比白天深、比夜间浅,暖色端与白天一致,确保视觉上与白天 / 夜间图层有区分但不突兀。

五、地图图层添加与显示控制

Map.addLayer(lst_day.clip(roi), viz_day, 'LST Daytime (°C)', true);
Map.addLayer(lst_night.clip(roi), viz_night, 'LST Nighttime (°C)', false);
Map.addLayer(lst_mean.clip(roi), viz_mean, 'LST Mean (°C)', false);

Map.addLayer(image, visParams, name, shown)的 4 个参数功能如下:

参数示例功能
imagelst_day.clip(roi)待显示的影像数据,clip(roi)是 “裁剪” 操作 —— 仅保留 ROI 范围内的像元,ROI 外的像元设为 “无数据”,避免无关区域干扰视觉
visParamsviz_day可视化参数,即上文定义的viz_day/viz_night/viz_mean,控制影像的颜色和显示范围
name'LST Daytime (°C)'图层名称,显示在 GEE 地图界面的 “图层列表” 中,需包含数据类型和单位,便于用户识别
showntrue/false图层默认显示状态:true代表加载代码后自动显示该图层,false代表默认隐藏,需用户手动在图层列表中勾选才能显示

默认显示lst_day(白天温度),隐藏lst_night(夜间)和lst_mean(平均):原因是白天温度的空间差异更明显(如城市热岛、沙漠与农田的对比),适合作为 “初始查看图层”;用户可根据需求切换显示,例如需分析城市热岛的昼夜差异时,可同时勾选白天和夜间图层,通过 “透明度调整”(GEE 图层列表中可设置)叠加对比。

六、数据导出到 Google Drive(结果保存)

将处理后的温度数据导出为GeoTIFF 格式(遥感数据标准格式,可在 ArcGIS、QGIS 等软件中进一步分析),核心是配置导出参数,确保数据完整性和可用性。以下以白天温度导出为例,夜间和平均温度的导出逻辑完全一致,仅变量名不同。

Export.image.toDrive({image: lst_day.clip(roi),          // 待导出影像(裁剪后的白天温度数据)description: 'LST_Day_' + startDate + '_to_' + endDate,  // 导出任务描述folder: 'GEE_LST',                 // 目标文件夹(需提前在Google Drive中创建)fileNamePrefix: 'LST_Day_' + startDate + '_' + endDate,  // 导出文件前缀region: roi,                       // 导出区域(与ROI一致)scale: 1000,                       // 导出分辨率(米)maxPixels: 1e13,                   // 最大像素数量限制crs: 'EPSG:4326'                   // 坐标系
});

(一)关键参数深度解析

  • image: lst_day.clip(roi):必须与显示图层一致,确保导出的是 “裁剪后的 ROI 范围内数据”,避免导出全图导致文件过大。
  • description:显示在 GEE “任务列表” 中的任务名称,需包含数据类型和时间范围,便于区分多个导出任务(如同时导出 7 月和 8 月的数据,可通过description快速识别)。
  • folder: 'GEE_LST':Google Drive 中的目标文件夹名称,需提前在 Google Drive 中手动创建该文件夹(路径:Google Drive → 新建 → 文件夹 → 命名为GEE_LST),否则导出会失败。
  • fileNamePrefix:导出文件的名称前缀,最终生成的文件名格式为fileNamePrefix.tif(如LST_Day_2025-07-01_2025-07-31.tif),包含数据类型和时间,便于后续管理。
  • region: roi:定义导出的空间范围,需与clip(roi)的范围一致,确保导出数据的空间完整性。
  • scale: 1000:导出分辨率(单位:米),需与原始 MODIS 数据的分辨率一致(MOD11A2 原始分辨率为 1 公里,即 1000 米),若设为 500,会导致数据 “重采样”(精度无提升但文件变大);若设为 2000,会导致精度降低。
  • maxPixels: 1e13:GEE 默认限制导出影像的最大像素数量为 1e8(约 1000×1000 像元),若 ROI 范围较大(如省级、国家级),需提高该值(1e13 足够覆盖全球范围),否则会提示 “像素数量超过限制” 并失败。
  • crs: 'EPSG:4326':导出数据的坐标系,EPSG:4326是 “WGS84 坐标系”(全球通用的地理坐标系,经纬度单位),若需用于投影坐标系(如 UTM),可替换为'EPSG:32649'(UTM 49N,根据研究区域的 UTM 带调整)。

(二)导出操作流程

代码运行后,需在 GEE 界面完成以下步骤:

  • 点击右上角 “Tasks”(任务)按钮,找到 3 个导出任务(分别对应白天、夜间、平均温度);
  • 对每个任务点击 “Run”(运行),在弹出的对话框中确认参数(无需修改),点击 “Run”;
  • 等待导出完成(时间取决于 ROI 大小,小区域约 1-5 分钟,大区域约 10-30 分钟);
  • 导出完成后,在 Google Drive 的GEE_LST文件夹中找到 GeoTIFF 文件,下载到本地即可使用。

七、运行结果

研究区地理位置
研究区白天地表温度数据反演结果
研究区晚上地表温度数据反演结果
研究区昼夜间平均地表温度数据反演结果
点击RUN即可下载数据

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

http://www.dtcms.com/a/499012.html

相关文章:

  • 【Docker】记录一次使用docker部署dify网段冲突的问题
  • 缓存三剑客问题
  • 构建AI智能体:六十七、超参数如何影响大模型?通俗讲解原理、作用与实战示例
  • timm教程翻译:(一)Overview
  • 手写Spring第5弹:告别项目混乱:用Maven构建标准Java项目目录结构
  • Vue3 表单输入绑定
  • 手机app制作网站网站后台尺寸一般做多大的
  • C程序中的选择语句
  • OpenCV进阶:图像变换、增强与特征检测实战
  • 自己做的网站怎样对接支付宝php餐饮美食店网站源码 生成html
  • 【大数据技术实战】Kafka 认证机制全解析
  • Android14源码移植到Android16的应用报错分析说明
  • 13万枚比特币被没收。。。
  • 企业网站规划案例网页微信版传输助手
  • 用Trae自动生成一个围棋小程序
  • 聊天室项目开发——etcd的安装和使用
  • 小林coding | MySQL图解
  • 大模型-智能体-【篇二:多智能体框架】
  • C语言文件操作全面解析:从基础概念到高级应用
  • 人大计算金融课程名称:《机器学习》(题库)/《大数据与机器学习》(非题库) 姜昊教授
  • 网站建设的策划文案设计公司网站公司详情
  • VMD-LSTM: 医疗时序数据降噪与预测优化课件分析(2025年6月教学版)
  • iOS Runtime之 KVO
  • ZigBee中的many-to-one和link status(1)
  • 【WRF-CMAQ第二期】WRF-CMAQ 测试案例安装与运行
  • 汕头seo网站排名免费制作网页的软件有哪些
  • 韩国设计网站推荐yandex搜索引擎入口
  • 2025年机器视觉软件平台哪个好?场景适配视角下的优质实例解析
  • 【C++/Lua联合开发】 (一) Lua基础知识
  • 从前序与中序遍历序列构造二叉树