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

相关文章

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.

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

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

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

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A