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

基于 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');

相关文章:

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

目录 1 地表温度(LST) 2 数据准备 3 代码实现 3.1 加载研究区与数据集 3.2 数据预处理与标准化 3.3 逐年批量导出 3.4 可视化结果 4 运行结果 5 完整代码 1 地表温度(LST) 在遥感领域,地表温度(L…...

ISP图像调优流程

第一步:亮度调试 AE:ae目标值,ae权重表,ae曝光策略,ae收敛速度 .ae容忍值 ae权重表:中央区域权重,均值权重等。感兴趣的区域往AE目标亮度靠近 ae目标亮度: AE 目标亮度是随着增益升高而降低的。 AE 目标亮度的调整主要是看图像的过曝区大小是否达到要求(如对比机)…...

SpringBoot多数据源架构实现

文章目录 1. 环境准备2. 创建Spring Boot项目3. 添加依赖4. 配置多数据源5. 配置MyBatis-Plus6. 使用多数据源7. 创建Mapper接口8. 实体类定义9. 测试多数据源10. 注意事项10.1 事务导致多数据源失效问题解决方案: 10.2 ClickHouse的事务支持10.3 数据源切换的性能开…...

VAxios

VAxios(或v-axios)是一个基于Axios的Vue插件,旨在让开发者在Vue项目中更方便、快捷地引入和使用Axios。以下是对VAxios的详细介绍: 一、功能与特性 VAxios作为Axios的Vue封装插件,继承了Axios的众多特性,…...

macOS安装nvm

新建一个文件夹,使用git将nvm给clone下来 git clone https://github.com/nvm-sh/nvm.git 使用vim编辑~/.bash_profile文件(没有就新建)添加以下代码 export NVM_DIR"$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] &&…...

每日算法Day14【删除二叉搜索树中的节点、修剪二叉搜索树、将有序数组转换为二叉搜索树、把二叉搜索树转换为累加树】

450.删除二叉搜索树中的节点 算法链接: 450. 删除二叉搜索树中的节点 - 力扣(LeetCode) 类型: 二叉树 难度: 中等 思路:两层判断,第一层判断节点与key大小,如果节点删除则判断其左右子节点情况;如果只有一…...

【数据分析(一)】初探 Numpy

目录 前言1. 一维 array 的生成2. 一维 array 的基本操作2.1. 查看属性2.2. 花式索引2.3. 条件筛查2.4. 数据统计 3. n 维 array 的生成4. n 维 array 的基本操作4.1. 查看属性4.2. 查询和切片4.3. 花式索引4.4. 矩阵 前言 Numpy是Python的常用开源数值计算扩展库,用…...

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码,并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中,之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…...

深度解析如何使用Linux中的git操作

1.如何理解版本控制 →Git&&gitee||github 多版本控制面对善变的甲方 版本控制是一种用于管理文件或代码变更的系统,帮助团队或个人追踪项目的历史记录,并支持多方协作开发。它在软件开发和文档管理中尤为重要,但也适用于其他需要追…...

青龙面板脚本开发指南:高效自动化任务的实现

青龙面板脚本开发指南:高效自动化任务的实现 青龙面板(Qinglong Panel)是一款强大的任务管理平台,支持多种语言的脚本开发和执行。通过在青龙面板中编写和管理脚本,用户可以轻松实现自动化任务,提高工作效…...

视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp

文章链接:https://arxiv.org/pdf/2412.19761 项目链接:https://genprop.github.io 亮点直击 定义了一个新的生成视频传播问题,目标是利用 I2V 模型的生成能力,将视频第一帧的各种变化传播到整个视频中。 精心设计了模型 GenProp&…...

ue5动画重定向,一键重定向。ue4小白人替换成ue5

这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错,只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…...

C++ 枚举类型

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

通过Apache、Nginx限制直接访问public下的静态文件

一、Apache 在public目录下的.htaccess文件中添加如下规则&#xff0c;来拒绝除了指定文件类型之外的所有请求 <FilesMatch "\.(?!(jpg|jpeg|png|gif|css|js|ico)$)[^.]$">Order Allow,DenyDeny from all </FilesMatch> 上述配置表示仅允许访问.jpg …...

Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡

将 ProxySQL 配合 Spring Boot 使用&#xff0c;主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样&#xff0c;你可以利用 ProxySQL 自动将写操作路由到主库&#xff0c;而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…...

ubuntu20下编译linux1.0 (part1)

author: hjjdebug date: 2025年 01月 09日 星期四 15:56:15 CST description: ubuntu20下编译linux1.0 (part1) 该博客记录了新gcc编译旧代码可能碰到的问题和解决办法, 可留作参考 操作环境: ubuntu20 $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 $ as --vers…...

【AI日记】25.01.10

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;国家为什么会失败阅读原因&#xff1a;2024 年诺贝尔经济学奖得主的力作未删减版&#xff1a;https://book.dou…...

04_Redis数据类型-String字符串

1.Redis数据类型介绍 Redis是一种Key-Value类型缓存型数据库,Redis为了存储不同类型的数据,Value支持多种数据类型,Redis为我们提供了常用的9种数据类型。包括5种基本类型:String(字符串)、Hash(哈希)、List(列表),Set(集合)及zset(Sorted Set有序集合);和4种…...

mysql之基本select语句 运算符 排序分页

1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…...

springboot整合admin

1. 添加依赖 首先&#xff0c;在你的admin服务端pom.xml文件中添加Spring Boot Admin的依赖&#xff1a; <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.5.4<…...

springboot整合gateway

1. 添加依赖 首先&#xff0c;在你的pom.xml文件中添加Spring Cloud Gateway的依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 如果…...

iOS实际开发中使用Alamofire实现多文件上传(以个人相册为例)

引言 在移动应用中&#xff0c;图片上传是一个常见的功能&#xff0c;尤其是在个人中心或社交平台场景中&#xff0c;用户经常需要上传图片到服务器&#xff0c;用以展示个人风采或记录美好瞬间。然而&#xff0c;实现多图片上传的过程中&#xff0c;如何设计高效的上传逻辑并…...

PyCharm 的安装与使用(Window)

1 PyCharm 简介 PyCharm 是一款由 JetBrains 公司开发的专门用于 Python 语言开发的集成开发环境&#xff08;IDE&#xff09;。以下是其相关介绍&#xff1a; 1.1 特点与功能 智能代码编辑&#xff1a;提供高度智能化的代码编辑器&#xff0c;支持语法高亮、自动补全、代码重…...

媒体资源生产转码过程

音视频基础 1. 音频基础原理 1.1 声音的基本概念 声波: 声音是通过空气或其他介质传播的机械波。声波的特性包括频率&#xff08;Hz&#xff09;、振幅&#xff08;dB&#xff09;和波形。采样率 (Sampling Rate): 每秒对声音信号进行采样的次数&#xff0c;单位为赫兹&…...

WPF控件Grid的布局和C1FlexGrid的多选应用

使用 Grid.Column和Grid.Row布局&#xff0c;将多个C1FlexGrid布局其中&#xff0c;使用各种事件来达到所需效果&#xff0c;点击复选框可以加载数据到列表&#xff0c;移除列表的数据&#xff0c;自动取消复选框等 移除复选框的要注意&#xff01;&#xff01;&#xff01;&am…...

Postman配置环境变量

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman是一套比较方便的接口测试工具&#xff0c;但我们在使用过程中&#xff0c;可能会出现创建了API请求&#xff0c;但API的URL会随着服务器IP地址的变化而改…...

import语句详解

在 Java 中&#xff0c;import 语句用于引入其他包中的类、接口或静态成员&#xff0c;以便在当前源文件中直接使用它们&#xff0c;而不需要写完整的类名&#xff08;包括包名&#xff09;。以下是 import 语句的详细解释和使用方法&#xff1a; 一、import语句的基本概念 定…...

数据结构与算法之二叉树: LeetCode 199. 二叉树的右视图 (Ts版)

二叉树的右视图 https://leetcode.cn/problems/binary-tree-right-side-view/ 描述 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1 输入&#xff1a;root [1,2,3,nu…...

CentOS7修改Docker默认存储路径

当你使用Docker时&#xff0c;Docker的默认配置是将镜像、容器和卷存储在系统/var/lib/docker/目录下&#xff0c;如果docker镜像安装的太多会导致磁盘不够&#xff0c;你可以尝试以下方法来释放空间&#xff1a; 清理无用的镜像和容器&#xff1a;使用docker命令删除不再使用…...

宝塔面板使用 GoAccess Web 日志分析教程

宝塔面板是一个简单方便的服务器运维面板,但其网站统计功能是收费的。而 GoAccess 是一个用 C 编写的免费开源 Web日志分析器,本文将介绍如何在宝塔面板中开启 GoAccess Web 日志分析功能。 内容索引 下载安装 GoAccess在宝塔面板中添加日志切割的计划任务将 Web 日志输出到…...

【FPGA】时序约束与分析

设计约束 设计约束所处环节&#xff1a; 约束输入 分析实现结果 设计优化 设计约束分类&#xff1a; 物理约束&#xff1a;I/O接口约束&#xff08;例如引脚分配、电平标准设定等物理属性的约束&#xff09;、布局约束、布线约束以及配置约束 时序约束&#xff1a;设计FP…...

c++入门之 命名空间与输入输出

1、命名空间 1.1使用命名空间的原因 先看一个例子&#xff1a; #include <iostream>int round 0;int main() {printf("%d", round);return 0; }请问&#xff0c;这个程序能跑起来吗&#xff1f; 答案是否定的 原因是&#xff0c;当我们想创建一个全局变量 …...

【zotero】解决无法参考文献交叉跳转、相关参考文献插件推荐

无法跳转 参考大佬文章的方法&#xff1a; https://blog.csdn.net/air__Heaven/article/details/137470687 但是有可能有时候又跳不了了&#xff0c;可以多多执行一下 zotero-citation插件 github地址 &#xff1a; https://github.com/MuiseDestiny/zotero-citation cl ht…...

《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》

在人工智能领域&#xff0c;深度学习模型的训练与推理通常需要强大的计算资源和大量的数据支持。而鸿蒙系统的分布式框架为解决这一问题提供了新的思路和方法&#xff0c;使得深度学习模型能够在多个设备之间实现高效的训练与推理。 鸿蒙分布式框架概述 鸿蒙系统是一款面向万…...

不同方式获取音频时长 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

用python实现烟花代码,完整代码拿走不谢

有时候用python实现一些有趣的代码&#xff0c;既有趣&#xff0c;又能提升知识 使用Python实现动态烟花代码 效果如下&#xff1a; 不废话&#xff0c;直接上代码&#xff1a; import pygame from random import randint, uniform, choice import mathvector pygame.math…...

[OPEN SQL] 限定选择行数

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 指定查询多少行数据&#xff0c;我们可以使用语法UP TO n ROWS来实现对数据前n项的查询 语法格式 SELECT * FROM <dbtab> UP TO n ROWS 参数说明 db…...

【入门级】计算机网络学习

网络安全&#xff1a;前端开发者必知&#xff1a;Web安全威胁——XSS与CSRF攻击及其防范-CSDN博客 三次握手四次挥手&#xff1a;前端网络—三次握手四次挥手_前端三次握手-CSDN博客 http协议和https协议的区别&#xff1a;前端网络—http协议和https协议的区别-CSDN博客 网…...

Redis 安装与 Spring Boot 集成指南

安装 Redis 和将其与 Spring Boot 应用集成是构建高效缓存解决方案的常见步骤。以下是详细的指南&#xff0c;帮助你在本地环境中安装 Redis&#xff0c;并在 Spring Boot 项目中配置和使用它。 1. 安装 Redis Windows 环境 Redis 官方并不直接支持 Windows&#xff0c;但你…...

基于 Python 和 OpenCV 的人脸识别上课考勤管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【c/c++】 windows下调用putty

windows和linux系统存在差异&#xff0c;同样的数据在两边的终端行为都不一样&#xff0c;就很头疼。 例如&#xff1a;换行符&#xff0c;win下是\r\n 而linux下是\n 又或者win下使用vi 好在找到了解决方案 1、通过第三方程序GoTTY&#xff08;支持windows和Linux&#x…...

JVM常见面试题

1.内存泄漏与内存溢出的区别 内存泄漏是指不再使用的对象无法得到及时的回收,持续占用内存空间,从而导致系统内存逐渐减少,系统性能下降,最终可能引发内存溢出内存溢出是指程序在运行时需要分配内存,但 JVM 没有足够的内存可以分配(超出可用内存大小),最终导致内存分配…...

手机租赁系统开发解决方案与市场趋势分析

内容概要 手机租赁系统开发正如一场技术与商业的双重舞会&#xff0c;双方时而相互辉映&#xff0c;时而却也是一场较量。在这片快速变幻的市场中&#xff0c;了解当前的技术实现与挑战尤为重要。例如&#xff0c;系统架构的选择、数据安全性以及用户体验设计都可能成为企业发…...

基于Qt的OFD阅读器开发原理与实践

摘要 本文详细探讨了基于Qt开发OFD阅读器的原理与实践。通过解析OFD文件格式、构建文档结构、实现页面渲染、处理用户交互以及进行性能优化&#xff0c;本文展示了如何使用Qt框架开发一个功能强大、性能优异的OFD阅读器。文章还提供了示例代码和未来发展方向&#xff0c;为开发…...

Redis实现高效的负载均衡算法

1. Redis存储设计 我们需要在 Redis 中存储以下信息&#xff1a; 配置列表&#xff08;List<Config>&#xff09;&#xff1a;存储所有配置项。总权重&#xff1a;存储所有配置的总权重。当前轮询状态&#xff1a;存储当前的轮询状态&#xff08;如当前随机值或索引&am…...

spring依赖注入

一、 注入方式 1. 构造器注入 构造器注入通过构造方法来注入依赖的对象。当Spring容器创建Bean时&#xff0c;会通过构造器来传递依赖对象。这种方式是最推荐的方式&#xff0c;因为它可以确保依赖对象在创建时已经完全注入。 示例&#xff1a; Component public class Car…...

流浪猫流浪狗领养PHP网站源码

源码介绍 流浪猫流浪狗领养PHP网站源码&#xff0c;适合做猫狗宠物类的发信息发布。当然其他信息发布也是可以的。 导入数据库&#xff0c;修改数据库配置/application/database.php 设置TP伪静态&#xff0c;设置运行目录&#xff0c; 后台&#xff1a;/abcd.php/dashboard?…...

ffmpeg 编译遇到的坑

makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加&#xff1a; --disable-htmlpages...

灵活运用事务回滚,快捷处理多张数据表格

各位编程宝子们&#xff08;尤其是对MySQL了解不多的宝子们&#xff09;在使用关系表处理时&#xff0c;有时候会希望简单一次性解决多张表的数据处理&#xff0c;但又有时候无从下手。其实有时候掌握数据的事务和回滚便可以简单解决这些事情&#xff0c;接下来我将以一个学生信…...

MyBatis 性能优化

1. 引言 1.1 什么是 MyBatis&#xff1f; MyBatis 是一款流行的 Java 持久层框架&#xff0c;能够将 Java 对象与 SQL 数据库映射起来。与传统的 JDBC 不同&#xff0c;MyBatis 提供了灵活的 SQL 映射功能&#xff0c;使开发者可以专注于业务逻辑&#xff0c;而无需编写冗长的…...