Google Earth Engine谷歌地球引擎计算多年中某两个时间点之间遥感数据差值的平均值

news2025/1/14 0:56:35

  本文介绍在谷歌地球引擎GEE中,提取、计算某一种遥感影像产品在连续的多年中,2不同时相数据差值多年平均值,并将计算得到的这一景差值的结果图像导出的方法。

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

  首先,我们来看一下本文需要实现的需求。现在我们希望计算某一个地区中,在2013年到2020年的这8年中,第257天与249天的这2个时间节点上,NDVI数据的差值的平均值;换句话说,我们希望在2013年到2020年的这8年中,计算每一年里第257天与249天的NDVI数据的差值(也就是获得了8个差值),然后对这8个差值计算平均值,最终得到一景结果栅格图像。随后,我们还希望将这一景结果图像导出到本地。

  知道了需求,我们即可开始代码的撰写。本文需要用到的代码如下。

var ndvi = ee.ImageCollection("MODIS/MYD09GA_006_NDVI")
  .filterDate('2013-01-01', '2023-01-01')
  .select(["NDVI"]);
  
var filterByDay = function(date) {
  var start = ee.Date(date).advance(249, 'day');
  var end = start.advance(1, 'day');
  return ndvi.filterDate(start, end).mosaic();
};
var filterByDay_2 = function(date) {
  var start = ee.Date(date).advance(257, 'day');
  var end = start.advance(1, 'day');
  return ndvi.filterDate(start, end).mosaic();
};

var images = ee.List.sequence(2013, 2020)
  .map(function(year) {
    var date = ee.Date.fromYMD(year, 1, 1);
    return filterByDay(date);
  });
var images_2 = ee.List.sequence(2013, 2020)
  .map(function(year) {
    var date = ee.Date.fromYMD(year, 1, 1);
    return filterByDay_2(date);
  });

var result = ee.ImageCollection.fromImages(images);
var result_2 = ee.ImageCollection.fromImages(images_2);

// var chinaBoundary = ee.Geometry.Rectangle(73, 8, 136, 54);
var chinaBoundary = ee.Geometry.Rectangle(97, 26, 109, 35);

var ndvi_china = result.map(function(image) {
  return image.clip(chinaBoundary);
});
var ndvi_china_2 = result_2.map(function(image) {
  return image.clip(chinaBoundary);
});

var ndvi_history = ndvi_china.reduce(ee.Reducer.mean());
var ndvi_history_2 = ndvi_china_2.reduce(ee.Reducer.mean());

var ndvi_dif_history = ndvi_history_2.subtract(ndvi_history);

Map.addLayer(ndvi_dif_history, {}, 'NDVI_History');
Map.centerObject(ndvi_dif_history, 2);

var exportParams = {
  image: ndvi_dif_history,
  description: 'ndvi_dif_history',
  scale: 500,
  region: chinaBoundary,
  maxPixels: 10000000000000
};

Export.image.toDrive(exportParams);

  上述代码的具体含义如下。

  首先,加载MODIS/MYD09GA_006_NDVI产品,也就是MODISNDVI产品;随后,使用.filterDate()方法筛选出日期范围为2013-01-012023-01-01的图像(本文只需要计算2013年到2020年的这8年数据,所以这里的截止时间设置为2020-12-31之后的任意时间均可),并使用.select(["NDVI"])方法仅选择NDVI波段。

  随后,var filterByDay = function(date) { ... };var filterByDay_2 = function(date) { ... };这两个函数分别定义了2个不同天数(第257天与249天)的不同的筛选方式。filterByDay函数通过将日期向后推移249天来获取每年的第249天的NDVI图像,而filterByDay_2函数通过将日期向后推移257天来获取每年的第257天的NDVI图像。

  其次,var images = ee.List.sequence(2013, 2020).map(function(year) { ... });等两个部分使用ee.List.sequence() 函数生成从2013年到2020年的年份序列,随后通过.map()方法对每个年份应用相应的函数。images变量包含了每年的第249天的的NDVI图像,而images_2变量包含了每年的第257天的NDVI图像。这个函数和前面的函数相结合,就可以提取出从2013年到2020年中每一年的第257天与249天的数据。

  接下来,var result = ee.ImageCollection.fromImages(images);等两行代码将imagesimages_2转换为ee.ImageCollection对象,以便进行后续的图像处理;var ndvi_china = result.map(function(image) { ... });等两个部分使用.map()方法对resultresult_2中的每个图像应用函数,即将图像裁剪为我们需要的边界范围内的区域。

  随后,var ndvi_history = ndvi_china.reduce(ee.Reducer.mean());等两行代码对ndvi_chinandvi_china_2中的图像集合应用ee.Reducer.mean()函数进行降维,计算每个像素点在时间范围内的平均的NDVI图像值,也就是获得了2013年到2020年的这8年中,第257天与249天的这2个时间节点上,NDVI数据各自的平均值。随后的这行代码,就是计算ndvi_history_2ndvi_history之间的差异,相当于就是获得了NDVI数据平均值的差值

  接下来的两行代码,则将ndvi_dif_history图像添加到地图中,并将地图中心设置为该视图的范围。

  最后,var exportParams = { ... };Export.image.toDrive(exportParams);这两段代码为设置导出参数,并使用Export.image.toDrive()ndvi_dif_history图像导出到Google Drive中。之后,我们就可以到Google Drive中下载这一景导出的数据了。

  执行上述代码,如下图所示。首先可以在下方的地图中看到我们计算得到的结果图像,其次可以在右侧看到Tasks中生成的任务。

  在上图中,点击右侧的“Run”,如下图所示。在其中配置好相关的信息,即可开始结果文件的下载。

  随后,就可以在Google Drive中指定的位置看到我们的结果图像文件了;如下图所示。之后,我们就可以将这一景栅格图像文件下载到本地了。

  至此,大功告成。

欢迎关注:疯狂学习GIS

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

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

相关文章

机器学习-回归问题(Regression)

前言 与KNN分类任务预测的输出为离散型不同. 在机器学习中,回归任务是用于预测连续数值型变量的任务。回归任务在很多领域都有着广泛的应用. 回归问题求解 在一个回归问题中,很显然模型选择和好坏会直接关系到将来预测结果的接近程度,举个…

RPG项目01_新输入输出

基于“RPG项目01_脚本代码”,本次修改unity的新输入输出系统。本次修改unity需要重启,如果一直跟着做教学项目,请先保存项目,再继续修改unity为新输入输出系统。 向下翻, 向下翻, 选择both加入新输入输出系…

疫苗接种(链表练习)

很明显&#xff0c;数组也可以做&#xff0c;但是我想练习链表 这道题我上交的时候&#xff0c;同一份代码&#xff0c;三个编译器&#xff0c;三个成绩&#xff0c;有点搞心态 代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<stdlib.h&…

html动漫网页设计分享 紫罗兰永恒花园网页作业成品带视频,注册登录,表格,表单

html5静态网页设计要是用HTML DIVCSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点&#xff0c;学生网页作业源码可以…

重新认识Word——样式

重新认识Word Word样式给所有一级标题加上一级标题样式修改标题一样式&#xff0c;符合要求 正文样式标题前的小黑点导航窗格样式的相互复制Word一键转PPT 话说回来&#xff0c;一个程序员平时可能还看不起office全家桶的软件&#xff0c;但是&#xff0c;在实际的生活运用中&a…

Elk-filebeat

前言 Elk&#xff1a;filebeat搜集日志工具和logstash相同 Filebeat是一个轻量级的日志收集工具&#xff0c;所使用的资源比logstash部署和启动时使用的资源更小 Filebeat可以运行在非Java环境&#xff0c;他可以代理logstash在非Java环境上收集日志 Filebeat无法实现数据的…

设计基于STM32的温度传感器实时数据采集和显示系统

温度传感器作为常见的传感器之一&#xff0c;被广泛应用于各种领域&#xff0c;如工业自动化、家电控制等。为了实时监测和控制温度&#xff0c;设计一个基于STM32的温度传感器实时数据采集和显示系统是很有必要的。本文将详细介绍如何设计这样一个系统&#xff0c;并提供相应的…

[蓝桥杯 2020 省 AB1] 解码

做题前思路&#xff1a; 1.因为是多组输入&#xff0c;又包含字符于是我们可以先定义一个char类型数组arr 2.定义数组的长度&#xff1a;题目说简写&#xff08;字母加数字&#xff09;长度不超过100&#xff0c;但原来的长度可能超过100&#xff0c;加上小明不会将连续超过9…

英飞凌(Infineon)TC397链接文件解析

本篇文章首先介绍了链接文件在整个代码编译过程中所起到的作用&#xff0c;然后根据TC397芯片对应的链接文件涉及的链接命令&#xff0c;参照官网的示例给出了常见的使用方法&#xff0c;最后分为MEMORY与SECTIONS两个部分以脚本命令走读的形式解析了TC397芯片的链接文件&#…

5_企业架构LNMP高可用负载均衡服务器

企业架构LNMP高可用负载均衡服务器之Nginx 学习目标和内容 1、能够描述负载均衡的作用 2、能够了解负载均衡常见实现方式 3、能够使用Nginx实现负载均衡 4、能够描述Nginx的常见负载均衡算法 一、背景描述及其方案设计 1、业务背景描述 时间&#xff1a;2011.6.-2013.9 发布产…

谈一谈内存对齐

文章目录 一&#xff0c;什么是内存对齐&#xff1f;二&#xff0c;为什么要有内存对齐&#xff1f;三&#xff0c;内存对齐规则&#xff1f; 一&#xff0c;什么是内存对齐&#xff1f; 现代计算机中的内存空间都是按字节划分的&#xff0c;理论上似乎我们对任何类型变量的访…

【iOS控件】—— UIPickerView的使用

【iOS控件】—— UIPickerView的使用 一. 简述UIPickerView1. 什么是UIPickerView2. UIPickerView遵守的协议 二. 测试Demo三. 总结 一. 简述UIPickerView 先看一下UIPickerView的效果图&#xff1a; 1. 什么是UIPickerView UIPickerView是iOS平台上的一个用户界面元素&am…

力扣 --- 最长公共前缀

题目描述&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"…

Windows安装MySQL8.2

Windows安装MySQL8.2 三种安装模式 默认自定义完整 本案例选择自定义 选择安装目录 勾选 Run MySQL Configurator 配置MYSQL 默认为开发者模式 在 Config Type 下拉列表中选择数据中心 设置 root 账号密码

【算法】前后缀分解题单⭐

文章目录 题单来源题目列表42. 接雨水238. 除自身以外数组的乘积2256. 最小平均差2483. 商店的最少代价代码1——前后缀数组代码2—— O ( 1 ) O(1) O(1)空间&#x1f402; 2420. 找到所有好下标2167. 移除所有载有违禁货物车厢所需的最少时间代码1——前后缀分解代码2——简洁…

题目:神奇的进制

解题思路&#xff1a; 用电脑自带的计算器&#xff0c;切换到程序员模式。里面有进制转换功能。 由题目&#xff0c;要求严格递增且都为字母&#xff0c;还要大于2023&#xff0c;则数字16进制为ABC。

wvp gb28181 pro 平台国标级连功能说明

国标28181不同平台之间支持两种连接方式&#xff0c;平级和上下级&#xff0c;WVP目前支持向上级级联。 测试环境 测试平台上级&#xff1a;192.168.10.209&#xff08;Alam centos8&#xff09; 测试平台下级&#xff1a;192.168.10.206&#xff08;ky10_x86&#xff09; 下级…

安装错误_ImportError: cannot import name ‘XXX‘循环引用 绕晕TT(deepsolo)

这里写目录标题 error: Couldnt find a setup script in /tmp/easy_install-lfpvj6p4/scikit_image-0.22.0.tar.gzpip install -v -e . 和 python setup.py develop功能一样吗AttributeError: module ‘PIL.Image’ has no attribute ‘LINEAR’ImportError: cannot import nam…

计算机网络 | 物理层下 传输媒介、信道复用技术,带宽接入技术

文章目录 3. 物理层下面的传输媒介3.1 导引型传输媒介3.2 非导引型传输媒介 4 信道复用技术5 数字传输系统5.1 旧的数字系统5.2 新数字系统 6 带宽接入技术6.1 DSL&#xff08;数字用户线&#xff09;6.2HFC 光纤同轴混合网6.2.1 接入 6.3 FTTx技术 3. 物理层下面的传输媒介 传…

Pandas进阶:拼接 concat 使用方法

1.处理索引和轴 假设我们有2个关于考试成绩的数据集。 df1 pd.DataFrame&#xff08;{ name&#xff1a;[A&#xff0c;B&#xff0c;C&#xff0c;D]&#xff0c;math&#xff1a;[60,89,82,70]&#xff0c;physics&#xff1a;[66&#xff0c; 95,83,66]&#xff0c;chemi…