Google Earth Engine谷歌地球引擎计算遥感影像在每个8天间隔内的多年平均值

本文主要是介绍Google Earth Engine谷歌地球引擎计算遥感影像在每个8天间隔内的多年平均值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,求取多年时间中,遥感影像在每18天时间间隔内的多年平均值的方法。

  本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第24篇,更多GEE文章请参考专栏:GEE学习与应用(https://blog.csdn.net/zhebushibiaoshifu/category_11081040.html)。

  首先,来明确一下本文的需求。我们现在希望,计算Landsat 7Landsat 82个遥感影像,在指定的研究区域中,于2014年至2020年里,从每1年的第1天开始,到每1年的最后1天结束,其中每18时间间隔内的平均值。换句话说,我们希望计算研究区域中,2014年至2020年这7年中,每1年的第001天至008天这8天内,所有遥感影像的平均值(相当于先对每1年的这8天内的遥感影像求平均,然后再对这7年里的7个结果进一步做平均;随后,计算这7年中,每1年的第009天至016天这8天内,所有遥感影像的平均值;再计算这7年中,每1年的第017天至024天这8天内,所有遥感影像的平均值,以此类推。

  因为这个需求涉及到大量的遥感影像,如果我们在本地操作的话需要下载大量的遥感影像数据,较为不便。因此,这里就介绍一下在GEE中实现这一需求的方法。本文所需代码如下。

var selectedDays = ee.List.sequence(1, 366, 8);
var roi = ee.Geometry.Rectangle(101, 31, 103.5, 33.5);var landsat_7 = ee.ImageCollection("LANDSAT/LE07/C02/T1_L2")
.filterDate("2014-01-01", "2021-01-01")
.select(["SR_B1", "SR_B2", "SR_B3", "SR_B4"])
.map(function(image) {return image.clip(roi).rename(["B1", "B2", "B3", "B4"]);
});
var landsat_8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
.filterDate('2014-01-01', '2021-01-01')
.select(["SR_B2", "SR_B3", "SR_B4", "SR_B5"])
.map(function(image) {return image.clip(roi).rename(["B1", "B2", "B3", "B4"]);
});
var landsat = landsat_7.merge(landsat_8);
// Map.addLayer(landsat, {}, "Landsat 7 and 8");var filterAndClip = function(day) {var start = ee.Number(day);var end = start.add(7);var filtered = landsat.filter(ee.Filter.calendarRange(start, end, 'day_of_year'));// Map.addLayer(filtered, {}, 'Landsat');var filtered_mean = filtered.mean();// Map.addLayer(filtered_mean, {}, "Landsat Mean");// print(filtered_mean);return filtered_mean;
};for (var i = 0; i < selectedDays.length().getInfo(); i++) {var day = selectedDays.get(i);var filtered = filterAndClip(day);var exportParams = {image: filtered,description: ee.Number(day).format('%03d').getInfo(),folder: "landsat_ref_8_days",scale: 30,region: roi,maxPixels: 10000000000000};Export.image.toDrive(exportParams);
}

  其中,我们创建了一个名为selectedDays的变量,它是一个包含了从1366的列表,步长为8;这表示选择了每年的第1917天等等,作为处理的开始日期。接下来,我们创建了一个名为roi的变量,它表示感兴趣区域的范围。

  随后,我们创建了两个变量landsat_7landsat_8,分别表示LANDSAT 7LANDSAT 8的图像集合;通过filterDate方法来筛选指定日期范围内的图像,并使用select方法选择特定的波段,且使用map方法对每个图像进行剪裁与重命名。这里之所以需要重命名,是因为接下来我们将使用merge方法将2个图像集合合并为1个;而merge方法需要保证待合并的2ImageCollection具有相同的波段名称。

  接下来,创建了一个名为filterAndClip的函数,用于对Landsat影像进行过滤和剪裁,并返回过滤后图像的平均值。这个函数具体的功能如下——首先,其接受一个参数day,表示处理的日期;随后,创建一个名为start的变量,使用ee.Numberday转换为数字类型;同时创建一个名为end的变量,使用start.add(7)计算start加上7的结果,表示8天的时间段。接下来,使用calendarRange方法对landsat数据集进行过滤,根据startend的日期范围,筛选出满足条件的影像;这里使用'day_of_year'表示按照1年中的天数进行筛选;创建一个名为filtered的变量,将过滤后的影像集合赋值给它。接下来,通过.mean()方法计算过滤后影像集合的平均值,创建一个名为filtered_mean的变量来存储结果。最后,返回filtered_mean,即过滤后影像集合的平均值。

  接下来,使用for循环遍历selectedDays列表中的每1个日期;在循环内部,使用filterAndClip函数对指定日期的影像进行过滤和剪裁,得到过滤后的影像的平均值。同时,创建一个exportParams对象,其中包含导出图像所需的参数,包括图像、描述、保存位置、像元分辨率、区域范围和最大像素数等。最后,使用Export.image.toDrive方法将图像导出到Google Drive

  其中,我们可以将上述代码中所有Map.addLayer()函数取消注释,并通过Inspector方法对地图数据加以查看。

  首先对于Landsat 7 and 8这个图层(也就是第1.addLayer()函数),可以看到其为研究区域中的所有Landsat遥感影像,如下图所示。

  其次对于Landsat这个图层(也就是第2.addLayer()函数),可以看到其为研究区域中,各年中所有落入当前8天时间间隔内的Landsat遥感影像;如下图所示,这里就是每1年中处于001天至008天的遥感影像。

  而如下图所示,这里就是每1年中处于073天至081天的遥感影像。

  其次对于Landsat Mean这个图层(也就是第3.addLayer()函数),可以看到其为研究区域中,7年里当前8天时间间隔内的所有Landsat遥感影像的平均值;具体如上图与上上图所示。

  执行上述代码,我们将在Tasks栏看到自动生成的遥感影像导出任务,其中各任务导出的遥感影像就以其所代表8天时间间隔的开始日期为名称;如下图所示。

  由于要导出的遥感影像文件比较多,即任务比较多;我们可以在GEE网页中,按下F12按钮,选择“Console”,并将下方的代码复制到下图下方的紫色框内。

  要复制的就是以下代码。

runTasks = function() {const evt = new MouseEvent('click', {bubbles: true, cancelable: true, ctrlKey: true})$$('.run-button' ,$$('ee-task-pane')[0].shadowRoot).forEach(function(e) {e.dispatchEvent(evt)})
}
runTasks()

  复制完毕后,按下回车键,即可批量提交任务,无需手动提交了。

  待任务都处理完毕后,我们进入Google Drive即可在指定文件夹下看到刚刚导出的结果图像。

  至此,大功告成。

欢迎关注:疯狂学习GIS

这篇关于Google Earth Engine谷歌地球引擎计算遥感影像在每个8天间隔内的多年平均值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.