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

相关文章

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

Smarty模板引擎工作机制(一)

深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。 在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码: <?php$title="深处浅出之Smarty模板引擎工作机制";$content=

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro