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

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

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

相关文章

[机器学习-01]一文了解|机器学习简介、工具选择和Python包基础应用

目录 前言 正文 01-机器学习简介 &#xff08;1&#xff09;诞生过程 &#xff08;2&#xff09;人工智能、机器学习和深度学习之间的关系 &#xff08;3&#xff09;机器学习核心 02-机器学习工具 &#xff08;1&#xff09;Anaconda简介 &#xff08;2&#xff09;Jupyte…

【千帆平台】使用AppBuilder零代码创建应用,Excel表格数据转为Markdown格式文本

欢迎来到《小5讲堂》 这是《千帆平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言创建应用应用名称应用描述应用头像角色指令组件能力开场白推…

springcloud报错:Failed to start bean‘webServerStartStop‘

如果你正在使用nacos进行服务注册&#xff0c;然后报一下错误&#xff1a; 那就说明的nacos没有打开&#xff0c;所以找到你的下载nacos的文件夹 好了&#xff0c;错误完美解决~

Leetcode—387. 字符串中的第一个唯一字符【简单】

2024每日刷题&#xff08;127&#xff09; Leetcode—387. 字符串中的第一个唯一字符 实现代码 class Solution { public:int firstUniqChar(string s) {int count[26] {0};for(char c: s) {count[c - a];}for(int i 0; i < s.length(); i) {if(count[s[i] - a] 1) {re…

射频无源器件之耦合器

一. 耦合器的作用 在射频电路中,射频耦合器将一路微波功率按比例分成几路,用于检测或监测信号,如功率测量和波检测,还可改变信号的幅度、相位等特性,以满足不同的通信需求。根据输入与耦合端的功率差,常被分为5dB、6dB、10dB等耦合器。射频耦合器的类型主要包括定向耦合…

OSPF Stub区域

原理概述 OSPF 协议定义了多种区域&#xff08; Area &#xff09;类型&#xff0c;其中比较常见的有 Stub 区域和 Totally Stub 区域。区域的类型决定了在这个区域当中所存在的 LSA 的类型。 Stub 区域不允许 Type-4和 Type-5 LSA 进入&#xff0c;该区域会通过 Type-3 LSA…

BFS专题——FloodFill算法:200.岛屿数量

文章目录 题目描述算法原理代码实现CJava 题目描述 题目链接&#xff1a;200.岛屿数量 PS:注意题目中每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。也就是说斜角是不算了&#xff0c; 例如示例二&#xff0c;是三个岛屿。 算法原理 这道题目是 DFS&#xff0…

实战BACnet/IP标准通信网关在楼宇自动化中的应用

智慧楼宇建设实现不同设备间的互联互通是一项巨大挑战&#xff0c;尤其是在那些历史悠久的建筑中&#xff0c;新旧系统并存的情况尤为普遍。某大型商业综合体就面临着这样的困境&#xff1a;老旧的暖通空调系统采用Modbus RTU协议&#xff0c;而新部署的能源管理系统却要求BACn…

502页 | 2024年人工智能指数报告-英文版(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 【2024年人工智能指数报告】 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT解决方案&…

学习软考----数据库系统工程师22

关系运算 基本的关系代数运算 拓展的关系运算 除&#xff1a;需要S连接中属性为C和D的两个元组都与R连接一样&#xff0c;且在R连接中对应的另外的元素完全一致 总结

Java17的崛起——newrelic的2024 年 Java 生态系统状

newrelic 2024 年 Java 生态系统状况 原文PDF&#xff1a;点我下载 生产中最常用的 Java 版本 Oracle 每六个月发布一次新的 Java 版本&#xff08;通常是在 3 月和 9 月&#xff09;&#xff0c;每个版本都包含一些新功能和错误修复。每两年&#xff0c;Oracle 都会推出一…

一篇教程搞定Windows系统中的Docker应用安装

文章目录 1. 引言2. “Docker -> WSL -> Windows”的依赖逻辑3. 安装方法3.1 安装WSL3.2 安装Docker Desktop 4. 是否安装成功&#xff1f;初始化一个容器试试。FAQ 1. 引言 Docker是一个用于创建、管理和编排容器的应用。容器是运行在操作系统上的一个应用&#xff0c;…

【Git】Git学习-15:分支简介和基本操作

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 git bran…

鸿蒙开发接口Ability框架:【@ohos.ability.particleAbility (particleAbility模块)】

particleAbility模块 particleAbility模块提供了Service类型Ability的能力&#xff0c;包括启动、停止指定的particleAbility&#xff0c;获取dataAbilityHelper&#xff0c;连接、断开当前Ability与指定ServiceAbility等。 说明&#xff1a; 本模块首批接口从API version 7开…

深度学习笔记_10YOLOv8系列自定义数据集实验

1、mydaya.yaml 配置方法 # 这里分别指向你训练、验证、测试的文件地址&#xff0c;只需要指向图片的文件夹即可。但是要注意图片和labels名称要对应 # 训练集、测试集、验证机文件路径&#xff0c;可以是分类好的TXT文件&#xff0c;也可以直接是图片文件夹路径 train: # t…

ue引擎游戏开发笔记(35)——为射击添加轨道,并显示落点

1.需求分析&#xff1a; 我们只添加了开枪特效&#xff0c;事实上并没有实际的效果产生例如弹痕&#xff0c;落点等等。所以逐步实现射击的完整化&#xff0c;先从实现落点开始。 2.操作实现&#xff1a; 1.思路&#xff1a;可以这样理解&#xff0c;每次射击的过程是一次由摄…

百度文库最新AI旋转验证码

上个月发现百度文库最新出了一个验证码&#xff0c;是AI生成的。内容每次可能都不一样&#xff0c;所以给识别造成 了很大困难。传统的比对放松完全失效。 一、介绍 这个是最近才出的最新验证码&#xff0c;内容主要以工厂、建筑、山峰、机器人、汽车、盆栽植物等为主。如下图…

【linux】进程概念|task_struct|getpid|getppid

目录 ​编辑 1.进程的概念 进程的基本概念 进程与程序的主要区别 进程的特征 进程的状态 描述进程—PCB task_struct中的内容 查看进程 1.创建一个进程&#xff0c;运行以下代码 通过系统调用获取进程标示符 getpid()以及getppid() 1.进程的概念 进程的基本概念…

洛谷 P3391:文艺平衡树 ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列。 其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是 5 4 3 2 1&#xff0c;翻转区间…

深度学习常用优化算法笔记介绍,各种梯度下降法详细介绍

优化算法 mini-batch梯度下降法 当一个数据集其数据量非常大的时候&#xff0c;比如上百万上千万的数据集&#xff0c;如果采用普通的梯度下降法&#xff0c;那么运算速度会非常慢&#xff0c;因为如果使用梯度下降法在每一次迭代的时候&#xff0c;都需要将这整个上百万的数…