Google Earth Engine谷歌地球引擎GEE批量计算一年中每个指定天数范围内遥感影像平均值的方法

news2024/9/23 13:27:55

  本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,计算长时间序列遥感影像数据在多年中,在每一个指定天数的时间范围内的平均值的方法。

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

  首先,我们来看一下本文需要实现的需求。现在我们希望,计算某个研究区域中,2022年内每一个8天的时间范围内,NDVI数据的平均值。换句话说,我们希望对于2022年的001天到008天内的全部NDVI数据计算平均值,然后再对009天到016天内的全部NDVI数据计算平均值,然后再对017天到024天内的全部NDVI数据计算平均值,依此类推。最后,我们对每一个8天范围内的平均值结果图像加以导出。这个需求和我们之前的Python自动计算Excel数据指定范围内的区间最大值(https://blog.csdn.net/zhebushibiaoshifu/article/details/131996263)有些类似,不过当时的文章中,我们是将遥感影像中某一个像元的多年数据提取到Excel中,且计算的是最大值;而在本文中,我们希望是对整个研究区域内的全部遥感影像加以指定间隔时期内数据的计算,且计算的是平均值

  明确了需求,我们即可开始代码的撰写。本文所用代码如下。

var year = ee.String("2022");
var ndvi = ee.ImageCollection("MODIS/MYD09GA_006_NDVI")
  .filterDate('2022-01-01', '2023-01-01')
  .select(["NDVI"]);
var chinaBoundary = ee.Geometry.Rectangle(70, 14, 137, 52);
var selectedDays = ee.List.sequence(1, 366, 8);

var filterAndClip = function(day) {
  var start = ee.Number(day);
  var end = start.add(7);
  var filtered = ndvi.filter(ee.Filter.calendarRange(start, end, 'day_of_year'))
    .map(function(image) {
      // print(start);
      // print(end);
      // return image.clip(chinaBoundary).reproject('EPSG:4326', null, 500);
    return image.clip(chinaBoundary)
    });
  // Map.addLayer(filtered, {}, 'NDVI');
  var filtered_mean = filtered.reduce(ee.Reducer.mean());
  // Map.addLayer(filtered_mean, {}, "NDVI_Mean");
  // return filtered;
  return filtered_mean;
  // return filtered.reduce(ee.Reducer.mean());
};

var ndvi_china = ee.ImageCollection([]);

for (var i = 0; i < selectedDays.length().getInfo(); i++) {
  var day = selectedDays.get(i);
  var filtered = filterAndClip(day);
  var exportParams = {
    image: filtered,
    description: year.cat(ee.Number(day).format('%03d')).getInfo(),
    folder: "ndvi_8_days_new",
    scale: 500,
    region: chinaBoundary,
    maxPixels: 10000000000000
  };
  Export.image.toDrive(exportParams);
  ndvi_china = ndvi_china.merge(filtered);
}

  首先,定义变量和数据源。其中,year是一个包含字符串值2022Earth Engine字符串对象,后面我们导出遥感影像的时候,需要将其作为导出文件的文件名前缀。ndvi是通过筛选日期和选择NDVI波段来创建的MODIS NDVI影像集合。chinaBoundary是本文中研究区域边界的矩形几何对象。selectedDays是一个包含从1366的数值列表,表示一年中每8天的时间间隔。

  随后,定义一个函数filterAndClip,用于筛选指定时间范围内的NDVI影像集合,并对每个影像进行边界裁剪;最后,它返回裁剪后影像集合的平均值。对于这个函数,首先,函数接受一个参数day,表示时间值。其次,将传入的时间值day转换为Earth Engine数值对象,分别存储在startend变量中;这里的day是一个整数,表示一年中的某个时间。接下来,使用ee.Filter.calendarRange函数对ndvi影像集合进行筛选,根据daystartend的值,筛选出位于指定时间范围内的影像;这里使用'day_of_year'参数表示筛选基于一年中的日期。随后,使用map函数对筛选后的影像集合中的每个影像进行边界裁剪;image.clip(chinaBoundary)将每个影像裁剪为中国边界范围内的部分。裁剪后的影像集合存储在filtered变量中。其次,使用reduce函数和ee.Reducer.mean()对裁剪后的影像集合进行平均值计算;filtered.reduce(ee.Reducer.mean())将每个像素位置的影像值取平均,生成一个表示平均值的影像。最后,函数返回裁剪和平均值计算后的影像集合filtered_mean

  接下来,创建一个空的影像集合ndvi_china,用于存储最后裁剪和筛选后的NDVI影像(但是我这里后面没有用上这个影像集合ndvi_china,之所以有这个是之前别的需求会用到,后来更换需求了但是代码这里没有删除)。

  其次,我们使用循环处理每个时间段。在循环中,我们遍历selectedDays列表中的每个时间值。对于每个时间值,我们调用filterAndClip函数来获取裁剪和筛选后的NDVI影像的平均值。

  然后,我们定义了导出参数exportParams,包括要导出的影像、描述、文件夹、比例尺、区域和最大像素数等。

  最后,我们使用Export.image.toDrive函数将筛选后的影像导出到Google Drive,并将其添加到ndvi_china影像集合中。

  执行上述代码,我们来看一下效果。这里需要注意,为了更好地展示代码的效果,运行时我将代码中如下所示位置的2Map.addLayer()函数取消注释了。

  首先,看一下“Inspector”。如下图所示,每一个NDVI_Mean图像(下图中下方的紫色框内),都是其上方8景图像(下图中上方的紫色框内)的平均值,也就是这8天的NDVI的平均值。不难看出,下图中上方的紫色框内,8景图像就是从当年第001天到第008天的NDVI,那么下图中下方的紫色框内就是从001天到008天的NDVI的平均值。

  其次,看一下“Tasks”。如下图所示,这一年内每隔8天的NDVI平均值结果图像都可以加以导出了。

  至此,大功告成。

欢迎关注:疯狂学习GIS

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

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

相关文章

MySQL BufferPool精讲

缓存的重要性 我们知道&#xff0c;对于使用InnoDB作为存储引擎的表来说&#xff0c;不管是用于存储用户数据的索引&#xff08;包括聚簇索引和二级索引&#xff09;&#xff0c;还是各种系统数据&#xff0c;都是以页的形式存放在表空间中的&#xff0c;而所谓的表空间只不过…

杰发科技AC7840——CAN通信简介(2)

1.时钟频率 2.位时间 3.采样点 4.消息缓冲区 和ST、NXP的邮箱类似&#xff0c;AutoChips用了缓冲区的概念。 5.接收缓冲区 屏蔽掉demo程序的发送&#xff0c;只看接收情况 在回调中接收数据 先判断是不是进了接收中断 接收数据的处理函数 所有buff数据放到Info buff的内容 BUF…

环境中碳循环

含碳的物质有CO2、CO、CH4、糖类、脂肪和蛋白质等&#xff0c;碳循环以CO2为中心&#xff0c;CO2被植物、藻类利用进行光合作用&#xff0c;合成植物性碳&#xff1b;动物摄食植物就将植物性碳转化为动物性碳&#xff1b;动物和人呼吸放出CO2&#xff0c;有机碳化合物被厌氧微生…

AArch64 memory management学习(一)

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网参考文档为准。AArch64 memory management学习一共分为两章&#xff0c;这是第一…

Github 2024-01-08开源项目周报 Top14

根据Github Trendings的统计&#xff0c;本周(2024-01-08统计)共有14个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5TypeScript项目3C项目2Dart项目1QML项目1Go项目1Shell项目1Rust项目1JavaScript项目1C#项目1 免费…

【网络安全】PKI加密

1、PKI概述 名称&#xff1a;Public Key Infrastruction 公钥基础设施 作用&#xff1a;通过加密技术和数字签名保证信息的安全 组成&#xff1a;公钥机密技术、数字证书、CA、RA 2、信息安全三要素 机密性 完整性 身份验证/操作的不可否认性 3、哪些IT领域用到PKI&…

【Golang】go编程语言适合哪些项目开发?

文章目录 **前言****Go 编程语言适合哪些项目开发&#xff1f;****1. 网络编程项目&#xff1a;****2. 大数据处理项目&#xff1a;****3. 云计算项目&#xff1a;****4. Web开发项目&#xff1a;****5. 嵌入式系统项目&#xff1a;****6.API开发**:**1. 并发性能&#xff1a;*…

数据库内核那些事|细说PolarDB优化器查询变换:IN-List变换

导读 数据库的查询优化器是整个系统的"大脑"&#xff0c;一条SQL语句执行是否高效在不同的优化决策下可能会产生几个数量级的性能差异&#xff0c;因此优化器也是数据库系统中最为核心的组件和竞争力之一。阿里云瑶池旗下的云原生数据库PolarDB MySQL版作为领先的云…

prometheus 黑盒监控

黑盒监控 “白盒监控” 是需要把对应的Exporter程序安装到被监控的目标主机上&#xff0c;从而实现对主机各种资源以及状态的数据采集工作 ”黑盒监控“ 是不需要把Exporter程序部署到被监控的目标主机上&#xff0c;比如全球的网络质量的稳定性&#xff0c;通常用ping操作&am…

在 Mac 上轻松安装和配置 JMeter

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要安装 Java&#xff0c;请按…

基于SSM的停车管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

1-03C语言超基础语法

一、概述 为了更好的进行后续的课程&#xff0c;避免出现"老师&#xff0c;我还没学过的东西&#xff0c;你怎么直接用&#xff1f;"诸如此类疑问&#xff0c;本小节就诞生了。 实际上&#xff0c;整个第一个大章节的所有小节都是"C语言基础语法"&#x…

ORA-600 adg无法查询故障

再续前缘 ORA-600[12406]故障解决-CSDN博客 当你点背的时候&#xff0c;看似一个简单的case&#xff0c;总是会迎来反转 上次改完参数没两天&#xff0c;又出现了报错不同&#xff0c;但是现象相似的情况 这次是 ORA-600 [kksgaGetNoAlloc_Int0] 这次出现故障的范围更大&a…

XML技术分析05

一、DOM 使用DOM扫描器程序&#xff1a;DOM扫描器是一种非常通用的程序&#xff0c;它不需知道用户定制的XML标记的确切含义。DOMAPI具有某些能把任何数据存储到树形结构中的接口。扫描器具有一组实现了这些接口的类&#xff0c;可以实例化这些类的对象。 这些接口和类…

CAN协议层详细介绍

CAN物理层协议介绍-CSDN博客 目录 1. CAN的波特率及位同步 2. 位时序分解 3. CAN的报文种类及结构 3.1 报文的种类 3.2 数据帧的结构 3.2.1 仲裁段 3.2.2 RTR位(Remote Transmission Request Bit) 3.2.3 IDE位(Identifier Extension Bit) 3.2.3 SRR位(Substi…

K8S--安装MySQL8(单机)

原文网址&#xff1a;K8S--安装MySQL8&#xff08;单机&#xff09;-CSDN博客 简介 本文介绍K8S部署MySQL8&#xff08;单机&#xff09;的方法。 本文的目标 1.通过PV和PVC&#xff08;hostPath方式&#xff09;存储MySQL的数据 2.通过Deployment、Service部署MySQL8&…

【AI视野·今日NLP 自然语言处理论文速览 第七十期】Thu, 4 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 4 Jan 2024 Totally 29 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Multilingual Instruction Tuning With Just a Pinch of Multilinguality Authors Uri Shaham, Jonathan Herzi…

新手练习项目 5:简易计算器(C++)

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09; 目录 一、效果图二、代码&#xff08;带注释&#xff09;三、说明 一、效果图 二、代码&#xff08;带…

SPON世邦 IP网络对讲广播系统 多处文件上传漏洞复现

0x01 产品简介 SPON世邦IP网络对讲广播系统是一种先进的通信解决方案,旨在提供高效的网络对讲和广播功能。 0x02 漏洞概述 SPON世邦IP网络对讲广播系统 addscenedata.php、uploadjson.php、my_parser.php等接口处存在任意文件上传漏洞,未经身份验证的攻击者可利用此漏洞上…