GEE实践应用|热岛效应(一)地表温度计算

2024-03-29 00:44

本文主要是介绍GEE实践应用|热岛效应(一)地表温度计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.学习目标

2.理论介绍

3.从MODIS获得地表温度

 4.从Landsat卫星获得地表温度


1.学习目标

①了解如何使用GEE计算地表温度

2.理论介绍

        城市化涉及用建筑物、道路和停车场等建筑结构取代自然景观。这种土地覆盖的改变也改变了土地表面的特性。这些变化的范围从表面反射和吸收的辐射量到热量如何从表面消散(例如,为城市发展而去除植被会减少蒸发冷却)。这些地表特性的变化可以改变当地的天气和气候。由于城市化而引起的当地气候变化被研究最多的是城市热岛(UHI)效应。城市热岛效应是指一个城市比其周围环境或同等的未城市化地表温度更高的现象,我们对城市热岛效应的了解已有近 200 年的历史 。

        传统上,城市热岛指数被定义为气象站测量的城市与城外一些农村参考点之间的气温差异。这种方法的一个问题是,城市的不同部分可能有不同的气温,因此很难捕获整个城市的城市热岛。使用热带中的卫星观测使我们能够获得另一种温度测量方法:the radiometric skin temperature,通常称为陆地温度表面温度(LST)。我们可以使用LST来计算地表UHI(SUHI)强度,包括它在城市内如何在像素尺度上变化。这里需要强调的是,卫星观测到的UHI值和使用空气计算出的UHI值温度测量结果可能会有很大差异。

3.从MODIS获得地表温度

        地表温度可以从 MODIS Terra 和 Aqua 卫星产品等衍生产品中提取,也可以直接根据热波段中的卫星测量结果进行估算。我们将使用中国重庆市作为感兴趣区域来探索这两种选择(图 1)。我们将从 MODIS LST开始。

        我们首先加载重庆市的边界矢量数据,使用的代码如下,加载结果如图1所示:


// Load feature collection of chongqing from user assets.
var region = ee.FeatureCollection(table);
// Get dissolved feature collection using an error margin of 50 meters.
var region = region.union(50);
// Set map center and zoom level (Zoom level varies from 1to 20).
//Map.setCenter(region, 12);
// Add layer to map.
Map.addLayer(region, {}, 'chongqing boundary');

图1|重庆的边界 

        接下来,我们加载 MODIS MYD11A2 版本 6 产品,该产品提供来自 Aqua 卫星的八天 LST 合成数据。这对应于大约下午 1:30 的穿越赤道时间,白天和夜间凌晨1:30。相比之下,Terra 平台上的 MODIS 传感器(MOD11A2 版本 6)的通过时间约为当地时间上午10:30 和晚上10:30。 


// Load MODIS image collection from the Earth Engine datacatalog.
var modisLst = ee.ImageCollection('MODIS/006/MYD11A2');
// Select the band of interest (in this case: Daytime LST).
var landSurfTemperature = modisLst.select('LST_Day_1km');

        我们仅想关注夏季 SUHI,因此我们将使用一年中的日期过滤器组合每年6月1日(第152天)到8月31 日(第243天)的图像来创建LST的五年夏季合成:


// Create a summer filter.
var sumFilter = ee.Filter.dayOfYear(152, 243);
// Filter the date range of interest using a date filter.
var lstDateInt = landSurfTemperature
.filterDate('2014-01-01', '2019-01-01').filter(sumFilter);
// Take pixel-wise mean of all the images in thecollection.
var lstMean = lstDateInt.mean();

        现在,我们将此图像转换为以摄氏度为单位的 LST,并遮盖所有水像素(水的高比热容会影响 LST,我们关注于陆地像素)。对于水掩模,我们使用全球地表水数据集,为了转换像素值,我们使用数据提供者提供的波段的缩放因子,然后减去 273.15 以从开尔文转换为摄氏度,比例因子可以在Earth Engine 数据摘要页面中找到(图2)。

 图2 数据总结中的比例因子

        最后,我们使用城市边界裁剪图像并将图层添加到地图中,如图3所示。 

// Multiply each pixel by scaling factor to get the LST values.
var lstFinal = lstMean.multiply(0.02);
// Generate a water mask.
var water = ee.Image('JRC/GSW1_0/GlobalSurfaceWater').select('occurrence');
var notWater = water.mask().not();
// Clip data to region of interest, convert to degree Celsius, and mask water pixels.
var lstNewHaven = lstFinal.clip(region).subtract(273.15)
.updateMask(notWater);
// Add layer to map.
Map.addLayer(lstNewHaven, {
palette: ['blue', 'white', 'red'],
min: 25,
max: 38
},
'LST_MODIS');

图3|中国重庆白天 MODIS Aqua LST 的五年夏季合成图。红色像素显示较高的 LST 值,蓝色像素显示较低的值 

 4.从Landsat卫星获得地表温度

        使用 MODIS LST 相对简单,因为数据已经由 NASA 团队处理。我们还可以从Landsat获取LST,它的原始分辨率(根据卫星的不同,在60m到~120 m之间)比1kmMODIS像素要精细得多。然而,我们需要根据热波段中的测量结果自行推导出LST,这通常还涉及对表面发射率的一些估算。

        物体的表面发射率 (ε) 是指与相同温度下的黑体相比,物体发射热辐射的效率,范围可以从 0(对于完美反射体)到1(对于完美吸收体和发射体)。由于卫星捕获的热辐射是 LST 和 ε 的函数,因此您需要准确地规定或估计ε以获得正确的 LST。让我们考虑一种使用 Landsat8数据的简单方法。

        我们将首先加载陆地卫星数据、云筛选,然后过滤到感兴趣的时间和区域。继续在同一脚本中添加以下代码:

// Function to filter out cloudy pixels.
function cloudMask(cloudyScene) {
// Add a cloud score band to the image.
var scored =ee.Algorithms.Landsat.simpleCloudScore(cloudyScene);
// Create an image mask from the cloud score band and specify threshold.
var mask = scored.select(['cloud']).lte(10);
// Apply the mask to the original image and return the masked image.
return cloudyScene.updateMask(mask);
}
// Load the collection, apply coud mask, and filter to date and region of interest.
var col = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
.filterBounds(region)
.filterDate('2014-01-01', '2019-01-01')
.filter(sumFilter)
.map(cloudMask);
print('Landsat collection', col);

        创建中值合成作为进一步减少云影响的简单方法后,我们遮盖水像素并选择亮度温度波段。

// Generate median composite.
var image = col.median();
// Select thermal band 10 (with brightness temperature).
var thermal = image.select('B10')
.clip(region)
.updateMask(notWater);
Map.addLayer(thermal, {
min: 295,
max: 310,
palette: ['blue', 'white', 'red']
},
'Landsat_BT');

        亮度温度(图 4)是相当于从大气层顶部逸出的红外辐射的温度,假设地球是一个黑体。它与LST不同,LST 需要考虑大气吸收和再发射以及地表的发射率。导出像素级发射率的一种方法是作为像素植被比例的函数。为此,我们首先根据 Landsat 表面反射率数据计算归一化植被指数 (NDVI)(见图 5)。


// Calculate Normalized Difference Vegetation Index (NDVI)
// from Landsat surface reflectance.
var ndvi = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(region)
.filterDate('2014-01-01', '2019-01-01')
.filter(sumFilter)
.median()
.normalizedDifference(['SR_B5',
'SR_B4']).rename('NDVI')
.clip(region)
.updateMask(notWater);
Map.addLayer(ndvi, {
min: 0,
max: 1,
palette: ['blue', 'white', 'green']
},
'ndvi');

 图4|重庆市五年夏季陆地卫星亮温合成中值,红色像素显示较高的值,蓝色像素显示较低的值

图5|重庆市上空5年夏季Landsat NDVI合成中值,白色像素显示较高的 NDVI 值,蓝色像素显示较低的值 

        为了将每个像素的 NDVI 映射到植被像素的实际部分(植被覆盖率),我们接下来使用基于每个像素的 NDVI 值范围的关系。

// Find the minimum and maximum of NDVI. Combine the reducers
// for efficiency (single pass over the data).
var minMax = ndvi.reduceRegion({
reducer: ee.Reducer.min().combine({
reducer2: ee.Reducer.max(),
sharedInputs: true
}),
geometry: region,
scale: 30,
maxPixels: 1e9
});
print('minMax', minMax);
var min = ee.Number(minMax.get('NDVI_min'));
var max = ee.Number(minMax.get('NDVI_max'));// Calculate fractional vegetation.
var fv = ndvi.subtract(min).divide(max.subtract(min)).rename('FV');
Map.addLayer(fv, {
min: 0,
max: 1,
palette: ['blue', 'white', 'green']
}, 'fv');

        现在,我们使用基于植被覆盖率的发射率经验模型。

// Emissivity calculations.
var a = ee.Number(0.004);
var b = ee.Number(0.986);
var em =
fv.multiply(a).add(b).rename('EMM').updateMask(notWater);
Map.addLayer(em, {
min: 0.98,
max: 0.99,
palette: ['blue', 'white', 'green']
},
'EMM');

        如图 6 所示,与植被上方相比,建筑结构上方的发射率较低,这是预期的。请注意,估计发射率的不同模型会导致 LST 值以及 SUHI 强度存在一些差异。

        然后,我们将该发射率与亮度温度结合起来,使用简单的单通道算法计算每个像素的 LST,这是辐射传输方程的线性近似。

 图6|重庆的地表发射率,基于植被比例。绿色像素显示较高的值,白色像素显示较低的值

// Calculate LST from emissivity and brightness temperature.
var lstLandsat = thermal.expression(
'(Tb/(1 + (0.001145* (Tb / 1.438))*log(Ep)))-273.15', {
'Tb': thermal.select('B10'),
'Ep': em.select('EMM')
}).updateMask(notWater);
Map.addLayer(lstLandsat, {
min: 25,
max: 35,
palette: ['blue', 'white', 'red'],
},
'LST_Landsat');

图7|重庆市上空陆地卫星得出的地表温度的五年夏季中值合成图。红色像素显示较高的 LST 值,蓝色像素显示较低的值

这篇关于GEE实践应用|热岛效应(一)地表温度计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857152

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java