基于 GEE 下载逐年 MODIS 地表温度 LST 数据

目录

1 地表温度(LST)

2 数据准备

3 代码实现

3.1 加载研究区与数据集

3.2 数据预处理与标准化

3.3 逐年批量导出

3.4 可视化结果

4 运行结果

5 完整代码



1 地表温度(LST)

在遥感领域,地表温度(Land Surface Temperature, LST)是研究气候变化、城市热岛效应、农业干旱评估等方面的重要指标。本文将以Google Earth Engine(GEE)为工具,详细解析如何高效地批量下载MODIS地表温度数据,结合代码实现逐年地表温度指标的计算与导出。

地表温度(LST)是地表辐射热量的直接表现,MODIS数据产品(如MOD11A2)为全球范围提供了高时间分辨率和高空间分辨率的LST观测数据。其优点包括:

高时空覆盖:
MODIS传感器提供连续的全球地表观测,时空分辨率适中(1公里)。

长期序列:
  可获取2000年至今的地表温度数据,适用于长期趋势分析。

然而,由于数据量大、时间序列长,在传统本地化处理模式下会遇到存储与计算瓶颈。Google Earth Engine提供了云端计算平台,能够高效完成大范围、多年份地表温度数据的处理和下载。

全球地表温度LST

2 数据准备

研究区定义:
ROI(Region of Interest)代表研究区域,可以通过矢量文件或手动绘制来定义。本文假设已经定义了一个研究区roi。

MODIS数据集:
MODIS LST数据集选择MOD11A2,其包含地表白天温度LST_Day_1km波段,数据分辨率为1公里。

数据范围:
时间范围:2000年至2023年。
空间范围:ROI覆盖范围内。

3 代码实现

以下代码展示了如何利用GEE平台逐年提取地表温度,并进行数据标准化与导出。

3.1 加载研究区与数据集

// 定义研究区ROI,中心化显示
Map.centerObject(roi);// 加载MODIS地表温度数据
var LST_img = ee.ImageCollection('MODIS/061/MOD11A2').filterBounds(roi)  // 筛选研究区范围.select('LST_Day_1km'); // 选择白天地表温度波段

3.2 数据预处理与标准化

MODIS LST数据以0.02为缩放因子(scale factor),其单位为开尔文(Kelvin)。在使用过程中需要将其转换为摄氏度,并进行归一化处理。

// 数据标准化函数
function norm_img(image) {var minmax = image.reduceRegion({reducer: ee.Reducer.minMax(),geometry: roi,scale: 250,maxPixels: 1e9}).values();return image.unitScale(minmax.get(1), minmax.get(0)); // 归一化处理
}// 逐年获取地表温度
function getLST(year) {var rawLST = LST_img.filter(ee.Filter.calendarRange(year, year, 'year')).filter(ee.Filter.calendarRange(4, 10, 'month')) // 筛选4月至10月.mean().clip(roi) // 取均值并裁剪至研究区.multiply(0.02).subtract(273.15) // 转换为摄氏度.rename('lst'); // 重命名为LSTreturn norm_img(rawLST); // 返回归一化后的数据
}

3.3 逐年批量导出

批量导出功能是利用GEE的Export.image.toDrive接口实现,代码如下:

// 定义研究年份范围
var years = ee.List.sequence(2000, 2023);// 逐年导出地表温度
years.getInfo().forEach(function (year) {var lst = getLST(year);Export.image.toDrive({image: lst.clip(roi), // 裁剪至研究区description: year + '_LST', // 导出描述folder: 'LST_Exports', // 导出文件夹fileNamePrefix: year + '_LST', // 文件名前缀region: roi.geometry().bounds(), // 导出区域scale: 250, // 空间分辨率250米maxPixels: 1e13 // 最大像素限制});
});

3.4 可视化结果

为了方便验证数据质量,可以在地图中叠加可视化图层,展示某一年份的地表温度分布。

// 可视化2000年的LST
var lst2000 = getLST(2000);
Map.addLayer(lst2000, {min: 0, max: 1, palette: ["blue", "green", "yellow", "red"]}, '2000 LST');

4 运行结果

执行代码后,所有年份的LST数据会以GeoTIFF格式保存在Google Drive指定的LST_Exports文件夹中,文件名形如2000_LST.tif。

点击RUN即可下载数据

研究区(湖南省)2000年地表温度LST数据可视化

5 完整代码

// 定义研究区roi,中心化显示
var roi = table;
Map.centerObject(roi);// 加载MODIS地表温度数据
var LST_img = ee.ImageCollection('MODIS/061/MOD11A2').filterBounds(roi)  // 筛选研究区范围.select('LST_Day_1km'); // 选择白天地表温度波段// 数据标准化函数
function norm_img(image) {var minmax = image.reduceRegion({reducer: ee.Reducer.minMax(),geometry: roi,scale: 250,maxPixels: 1e9}).values();return image.unitScale(minmax.get(1), minmax.get(0)); // 归一化处理
}// 逐年获取地表温度
function getLST(year) {var rawLST = LST_img.filter(ee.Filter.calendarRange(year, year, 'year')).filter(ee.Filter.calendarRange(4, 10, 'month')) // 筛选4月至10月.mean().clip(roi) // 取均值并裁剪至研究区.multiply(0.02).subtract(273.15) // 转换为摄氏度.rename('lst'); // 重命名为LSTreturn norm_img(rawLST); // 返回归一化后的数据
}// 定义研究年份范围
var years = ee.List.sequence(2000, 2023);// 逐年导出地表温度
years.getInfo().forEach(function (year) {var lst = getLST(year);Export.image.toDrive({image: lst.clip(roi), // 裁剪至研究区description: year + '_LST', // 导出描述folder: 'LST_Exports', // 导出文件夹fileNamePrefix: year + '_LST', // 文件名前缀region: roi.geometry().bounds(), // 导出区域scale: 250, // 空间分辨率250米maxPixels: 1e13 // 最大像素限制});
});// 可视化2000年的LST
var lst2000 = getLST(2000);
Map.addLayer(lst2000, {min: 0, max: 1, palette: ["blue", "green", "yellow", "red"]}, '2000 LST');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

【CSS】设置滚动条样式

文章目录 基本语法用法案例 基本语法 在CSS中&#xff0c;可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式&#xff0c;但请注意这些伪元素是非标准的&#xff0c;主要用于WebKit内核浏览器&#xff08;如Chrome、Safari&#xff09;。 ::-webkit-scrollbar CSS …

虚拟机使用MQ及介绍

mq官网&#xff1a;https://www.rabbitmq.com 一、虚拟机与 MQ 的结合优势 隔离与安全&#xff1a;虚拟机为 MQ 的运行提供了一个独立的环境&#xff0c;与宿主机以及其他虚拟机相互隔离。这意味着即使 MQ 所在的虚拟机出现故障或遭受安全威胁&#xff0c;也不会直接影响到宿主…

【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!

这里写目录标题 什么是Selenium&#xff1f;Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本脚本执行结果常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo…

单通道串口服务器(三格电子)

一、产品介绍 1.1 功能简介 SG-TCP232-110 是一款用来进行串口数据和网口数据转换的设备。解决普通 串口设备在 Internet 上的联网问题。 设备的串口部分提供一个 232 接口和一个 485 接口&#xff0c;两个接口内部连接&#xff0c;同 时只能使用一个口工作。 设 备 的网 口…

力扣经典题目之912.排序数组(使用希尔排序解决)

今天继续给大家分享一道力扣的做题心得今天这道题目是 912.排序数组 题目链接&#xff1a;912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a;给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题…

socket网络编程-TC/IP方式

网络编程 1.概念&#xff1a;两台设备之间通过网络数据传输。 2.网络通信&#xff1a;将数据通过网络从一台设备传输另外一台设备。 3.java.net包下提供了一系列的类和接口&#xff0c;提供程序员使用&#xff0c;完成网络通信。 TCP和UDP TCP协议&#xff1a; 1.使用TCP协…

XML通过HTTP POST 请求发送到指定的 API 地址,进行数据回传

代码结构说明 这段代码的主要功能是&#xff1a; 从指定文件夹中读取所有 XML 文件。 将每个 XML 文件的内容通过 HTTP POST 请求发送到指定的 API 地址。 处理服务器的响应&#xff0c;并记录每个文件的处理结果。 using System; using System.IO; using System.Net; usin…

鸿蒙中调整应用内文字大小

1、ui Stack() {Row() {ForEach([1, 2, 3, 4], (item: number) > {Text().width(3).height(20).backgroundColor(Color.Black).margin(item 2 ? { left: 8 } : item 3 ? { left: 7 } : { left: 0 })})}.width(97%).justifyContent(FlexAlign.SpaceBetween).padding({ ri…

Docker compose 使用 --force-recreate --no-recreate 控制重启容器时的行为【后续】

前情&#xff1a;上一篇实际是让AI工具帮我总结了一下讨论的内容&#xff0c;这里把讨论的过程贴出来&#xff0c;这个讨论是为解决实际问题 前文https://blog.csdn.net/wgdzg/article/details/145039446 问题说明&#xff1a; 我使用 docker compose 管理我的容器&#xff0…

SAP SD学习笔记27 - 贩卖契约(框架协议)2 - 基本契约 - 金额契约(价值合同)

上一章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约-CSDN博客 本章继续讲SAP中的内容&#xff1a; - 基本契约 - 金额契约…

【面试题】技术场景 7、定位系统瓶颈

系统瓶颈定位方法总述 面试官询问如何快速定位系统瓶颈&#xff0c;旨在考察线上调试经验。主要方法包括&#xff1a; 压测&#xff1a;在项目上线前找出系统瓶颈并修复。监控工具或链路追踪工具&#xff1a;项目上线后用于实时监控或评测找瓶颈。Arthas&#xff08;原阿尔萨…

在Jmeter中跨线程组传递变量(token)--设置全局变量

参考资料&#xff1a; Jmeter跨线程组传递参数(token)_jmeter获取token传递给下一个线程组详解-CSDN博客 最近工作中遇到一个问题&#xff0c;就是如何跨线程组传递变量&#xff0c;比如token,后来找到一些资料解决了该问题&#xff0c;目前有两种方式都可以解决&#xff0c;我…

天天 AI-250110:今日热点-字节豆包Web端反超百度文心一言,DeepSeek也发力了|量子位智库月报

2AGI.NET&#xff1a;天天AI-20250109 人工智能&#xff08;AI&#xff09;和硬件技术继续以惊人的速度发展&#xff0c;不断刷新我们对技术边界的认知。从英伟达的RTX 50系列显卡到清华团队的数学推理突破&#xff0c;再到AI算力的多个利好&#xff0c;这些技术的发展正在推动…

QT 常用控件的常用方法

QRadioButton、QCheckBox 常用函数&#xff1a; text(): 用于获取单选按钮的文本标签。 setText(const QString &text): 用于设置单选按钮的文本标签。 isChecked(): 用于检查单选按钮是否被选中。 setChecked(bool checked): 用于设置单选按钮是否被选中。 setIcon(c…

C++ 枚举类型

【语法解析】 ● C 枚举类型 在C中&#xff0c;枚举&#xff08;enumeration&#xff09;类型是一种简单的数据类型&#xff0c;用于定义在程序中使用的常量。&#xff08;1&#xff09;枚举类型的定义格式&#xff1a;enum <类型名> {<枚举常量表>};&#xff08;2…

Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?

如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中&#xff1f; 在使用 Element UI 的 Table 组件时&#xff0c;如果你想要禁用某一行的选中&#xff08;特别是在多选模式下&#xff09;&#xff0c;可以通过自定义行的 selectable 属性来实现。selectable …

rhcsa练习(3)

1 、创建文件命令练习&#xff1a; &#xff08; 1 &#xff09; 在 / 目录下创建一个临时目录 test &#xff1b; mkdir /test &#xff08; 2 &#xff09;在临时目录 test 下创建五个文件&#xff0c;文件名分别为 passwd &#xff0c; group &#xff0c; bashrc &#x…

uc/os-II 原理及应用(八) 系统裁减以及移植到51单片机上

两个习题 先了解下CPU上函数调用的过程: 一个程序取得函数地址&#xff0c;先保护现场将局部变量及参数压栈&#xff0c;再将调用函数的参数压栈&#xff0c;然后跳转到函数位置&#xff0c;将参数出栈&#xff0c;执行代码&#xff0c;结束后返回到调用位置&#xff0c;再怖复…

高等数学学习笔记 ☞ 洛必达法则与泰勒公式

1. 洛必达法则 1. 型与型未定式&#xff08;洛必达法则&#xff09; &#xff08;1&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; &#xff08;2&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; ①&#xff1a;当时&…