【GEE】优雅地实现年度、季度、月度甚至旬度影像合成(附完整代码)

以下文章来源于GEE学习室 ,作者GEEStudyRoom

光学影像由于受到天气因素(云、雨和雾等)影响,导致单张影像数据存在大量坏死像元。此处,坏死像元指由于受到云遮挡等导致下垫面地物覆盖不能准确被卫星信息捕捉从而不能正常用于实际应用的像素(云识别等研究除外,因为这类研究就是需要有云像素)。坏死像元的存在造成实际应用中数据需求难以得到满足,因此有必要考虑时序影像合成等技术来补充/弥补影像。
时序影像合成,从粗到细,可以分为年合成、半年合成、季度合成、月度合成和半月合成等,在不同学科研究中都有广泛应用,例如半月合成在降雨侵蚀(B因子计算等)中被广泛采用。按照学科和研究需求不同,可以自主选择适合自己研究的合成方式开展研究。
下面就分别以北京主城区为例,使用Landsat-8影像数据集分别实现年合成、半年合成、季度合成、月度合成和半月合成等其中合成方式选择median(大家也可以选择mean、max、min等其他合成方式)。

具体代码:https://code.earthengine.google.com/7e7cb1e0f819ff8bcd5401c59a686a77

var Beijing = ee.Geometry.Polygon([[[116.29730339279362, 39.99599891062294],[116.29730339279362, 39.84222494267003],[116.48681755294987, 39.84222494267003],[116.48681755294987, 39.99599891062294]]], null, false);
var roi = Beijing;
Map.addLayer(roi, {'color':'grey'}, 'studyArea');
Map.centerObject(roi);var year = 2020;// reomove cloud for Landsat-8
function rmL8Cloud(image) { var cloudShadowBitMask = (1 << 3); var cloudsBitMask = (1 << 5); var qa = image.select('pixel_qa'); var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0) .and(qa.bitwiseAnd(cloudsBitMask).eq(0));return image.updateMask(mask).toFloat().divide(10000).copyProperties(image).copyProperties(image, ['system:time_start','system:time_end','system:footprint']);
}var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR').filterBounds(roi).filterDate(ee.Date.fromYMD(year,1,1),ee.Date.fromYMD(year+1,1,1)).map(rmL8Cloud).select(['B2','B3','B4','B5','B6']);// year composite
var l8_year =  l8.median().clip(roi);
print("l8_year",l8_year);// half-year composite
var l8_halfyear = ee.List.sequence(0, 1*11,6).map(function(n) {var start = ee.Date.fromYMD(year,1,1).advance(n, 'month');var end = start.advance(6, 'month');var tmpMedian = l8.filterDate(start, end).median().clip(roi).set("system:time_start", start.millis());return tmpMedian;
}).flatten();
var l8_halfyear = ee.ImageCollection.fromImages(l8_halfyear);
print("l8_halfyear",l8_halfyear);// season composite
var l8_season = ee.List.sequence(0, 1*11,3).map(function(n) {var start = ee.Date.fromYMD(year,1,1).advance(n, 'month');var end = start.advance(3, 'month');var tmpMedian = l8.filterDate(start, end).median().clip(roi).set("system:time_start", start.millis());return tmpMedian;
}).flatten();
var l8_season = ee.ImageCollection.fromImages(l8_season);
print("l8_season",l8_season);// month composite
var l8_month = ee.List.sequence(0, 1*11,1).map(function(n) {var start = ee.Date.fromYMD(year,1,1).advance(n, 'month');var end = start.advance(1, 'month');var tmpMedian = l8.filterDate(start, end).median().clip(roi).set("system:time_start", start.millis());return tmpMedian;
}).flatten();
var l8_month = ee.ImageCollection.fromImages(l8_month);
print("l8_month",l8_month);// l8_halfmonth
var l8_halfmonth = ee.List.sequence(1,12).map(function(item){var start_date = ee.Date.fromYMD(year, item, 1);var mid_date = start_date.advance(15,'day');var end_date = start_date.advance(1,'month');var pre_month_img = l8.filterDate(start_date,mid_date).mean().set('system:time_start',start_date.millis()).set('time',start_date.format('YYYY-MM-dd'));var pro_month_img = l8.filterDate(mid_date,end_date).mean().set('system:time_start',start_date.millis()).set('time',mid_date.format('YYYY-MM-dd'));  return ee.ImageCollection([pre_month_img,pro_month_img]);
});// define iterate function
function accumulate(imageCol, list) {return ee.ImageCollection(list).merge(imageCol);
}
// flatten each element in the l8_halfmonth collection
var l8_halfmonth = l8_halfmonth.iterate(accumulate,ee.ImageCollection([]));
var l8_halfmonth= ee.ImageCollection(l8_halfmonth);
print("l8_halfmonth",l8_halfmonth);// show the image
var visParam = {bands:['B6','B5','B4'],min:0,max:0.3};
Map.addLayer(l8_year, visParam, 'l8_year');

代码解析

年合成相对来说简单,只需要使用mean函数就可以。具体代码见31-32行。

2、半年合成比年合成相对复杂一些,但是也不复杂,主要是增加List和Date类别里面有关函数的使用,其中List涉及到sequence使用,主要用于生成列表序列用于表征2个月。具体代码见34-42行。

3、季度合成和半年合成类似,只需要修改月度List里面的生成间隔即可,即将ee.List.sequence(0, 111,6)变成ee.List.sequence(0, 111,3)(Note,map函数里面也需要对应修改)。当然,这里的按季合成只是简单地将1-3月当成了一个季度,更合理的方式可能是按照“春-夏-秋-冬”对应月份合成。具体代码见44-52行。

4、月度合成参考前面的半年合成和季度合成,只是再次修改ee.List.sequence参数就行。具体代码见54-62行。

5、半月合成和之前的合成方式有些许不同,在于一次循环需要得到2张影像。即一个月需要分成上旬和下旬来计算,这样返回值就需要返回两张影像(但是只能有一个返回值)。所以一开始得到的是12个对象,每个对象含有两张影像数据。为了顺利得到24张影像数据,这里还需要巧妙地借助iterate函数,将影像数据都抽出来组成一个24个影像,具体代码见64-85行。这块是重点内容,还请您多多留意~

具体结果图如下所示。
在这里插入图片描述

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

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

相关文章

【Linux系统编程】第八弹---权限管理操作(中)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、修改文件权限的做法(二) 2、文件类型 3、可执行权限 4、创建文件/目录的默认权限 4.1、权限掩码 总结 前面一弹我们学…

git 重命名文件,提交后,此文件的提交记录丢失

零、问题现象&#xff1a; 文件重命名后&#xff0c;提交到 git 仓库&#xff0c;发现重命名操作 变成 删除旧文件&#xff0c;新增一个新文件&#xff0c;原来文件的提交记录丢失&#xff0c;看不到了。 一、正确的重命名提交方法 1.1、 先执行add命令来将修改内容后的文件…

校园论坛圈子,校园跑腿小程序,2024 一款功能强大校园综合服务小程序开源源码

目的 本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统&#xff0c;前台用户使用小程序发布跑腿任何和接跑腿任务&#xff0c;系统基于TP6uni-app框架开发;客户移动端采用uni-app开发&#xff0c;管理后台TH6开发&#xff1b;通过后台管理跑腿的用户、查看跑腿信…

2024年最佳软件测试工具40强清单

什么是测试工具 软件测试工具是指那些支持从计划、需求收集、构建创建、测试执行、缺陷记录到测试分析等各种测试活动的产品。这些工具主要用于检测软件的稳定性、彻底性以及其他性能参数。 市场上有大量的软件测试工具&#xff0c;众多选择使得难以确定最适合你项目的测试工具…

前端css中table表格的属性使用

前端css中table表格的属性使用 一、前言二、常见的表格属性1.边框的样式2.布局和对齐3.间距和填充4.背景和颜色5.字体的样式6.边框的圆角 三、简单的表格&#xff0c;例子11.源码12.源码1效果截图 四、给表格添加动画效果&#xff0c;例子21.源码22.源码2的运行效果 五、结语六…

备考2024年小学生古诗文大会:吃透10道历年真题和知识点(持续)

对上海小学生的小升初和各种评优争章来说&#xff0c;语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛&#xff0c;小学生古诗文大会和汉字小达人通常是必不可少的&#xff0c;因为这两个针对性强&#xff0c;而且具有很强的上海本地特色。 根据往…

基于智能推荐的校园兼职招聘平台

3协同过滤算法简介 目前&#xff0c;推荐算法有很多种&#xff0c;可以应用于日常生活的许多领域&#xff0c;对大量数据进行处理和分析&#xff0c;然后进行分类。它将显示用户可能感兴趣的内容&#xff0c;这是推荐算法的主要功能之一[1]。 协同过滤算法通常包括两类&#…

ARP 攻击神器:ARP Spoof 保姆级教程

一、介绍 arpspoof是一种网络工具&#xff0c;用于进行ARP欺骗攻击。它允许攻击者伪造网络设备的MAC地址&#xff0c;以欺骗其他设备&#xff0c;并截获其通信。arpspoof工具通常用于网络渗透测试和安全评估&#xff0c;以测试网络的安全性和漏洞。 以下是arpspoof工具的一些…

数智亚运,为什么需要智能电子桌牌?

近日&#xff0c;杭州亚运会博物馆正式对公众开放&#xff0c;深度还原了杭州从申请办、筹办至举办亚运会的各个精彩历程。馆内有“亚运与杭州”、“亚运与亚洲”“亚运与未来”三大板块展示区&#xff0c;展示了大量亚运会使用过的实物&#xff0c;还有当时引人注目的数字科技…

遥测终端赋能水库泄洪监测预警,筑牢度汛安全防线!

4月10日&#xff0c;水利部召开水库安全度汛视频会议。会议要求着力强化水库防洪“四预”措施&#xff0c;加快构建雨水情监测预报“三道防线”&#xff0c;完善预警信息发布机制&#xff0c;推进数字孪生水利工程建设&#xff0c;为科学调度指挥决策提供支持。强调坚决牢牢守住…

大模型应用RAG系列(1)初识RAG

题外话 之前我们在讲大模型的应用方向和架构时&#xff0c;有提到RAG、Agent、Fine-Tune。在作者写大模型专题的文章时&#xff0c;也是边学习&#xff0c;边梳理&#xff0c;边总结。在这个过程中&#xff0c;大模型在各个方向都不断地快速发展&#xff0c;对应的paper、理论…

25计算机考研院校数据分析 | 上海交通大学

上海交通大学电子信息与电气工程学院成立于2001年12月&#xff0c;其前身可湖源至百年前的电机专科&#xff0c;具有中国电气工程师“摇篮”之美称。50年代根据学科发展需要分为电工与计算机科学系(三系)和电子工程系(四系)。1985年&#xff0c;三系和四系合并&#xff0c;成立…

机器学习之sklearn基础教程

ChatGPT Scikit-learn (简称sklearn) 是一个非常受欢迎的Python机器学习库。它包含了从数据预处理到训练模型的各种工具。下面是一个关于如何使用sklearn进行机器学习的基础教程。 1. 安装和导入sklearn库 首先&#xff0c;你需要安装sklearn库&#xff08;如果你还没有安装的…

嬴图| ISO/IEC-GQL国际图语言标准发布,图技术开启新纪元

GQL作为继SQL之后的第二个数据库查询语言国际标准&#xff0c;近日正式发布。这标志着图技术开启新纪元——图时代即将到来&#xff01; 同时&#xff0c;这也预示着将有越来越多的组织采用“图”来解决各种复杂问题&#xff0c;更意味着SQL系统与负载将逐渐转向GQL&#xff0…

Fork for Mac v2.42 激活版 Git客户端

Fork for Mac是一款运行在Mac平台上的Git客户端&#xff0c;Fork Mac版具备基本的取、推、提交、修改、创建和删除分支和标签、创建和删除远程备份等功能&#xff0c;还有实用的差异查看器&#xff0c;你可以通过清晰的视图快速发现源代码中的更改。 Fork for Mac v2.42 激活版…

Java八股文4-Linux篇

Linux篇 Linux中常见命令&#xff1a;Linux常见命令 1.free命令-查看内存状态 free命令用于显示内存状态&#xff0c;它可以提供关于系统内存使用情况的详细信息。这个命令会显示出内存的使用情况&#xff0c;包括实体内存、虚拟的交换文件内存、共享内存区段&#xff0c;以及…

【网盘源码】百度云盘手动cookie获取,添加到扫码系统管理平台。

一.获取cookie步骤 1.谷歌浏览器选择开发者模式。 2.选择网路&#xff0c;过滤接口main 3.选择request head&#xff0c;cookie列表里面可查看二.添加到管理平台。 1.登录管理平台&#xff0c;输入账户和密码 2.选择账户设置&#xff0c;添加cookie。 4.复制卡密链接&#xff…

k8s calico vxlan式详解

之前的文章讲了k8s ipip模式的使用以及流量路径&#xff0c;本篇文章主要是来讲解一下vxlan 模式下pod 流量是如何通信的。 一、ipip模式转vxlan 修改calico backend参数 将calico_backend参数由bird设置为vxlan,因为vxlan部署不使用bgp 修改calico controllers的configmap…

【GitHub】2FA认证(双重身份验证)

GitHub 2FA认证&#xff08;双重身份验证&#xff09; 写在最前面一、使用 TOTP 应用程序配置双2FA&#xff08;双因素身份验证&#xff09;1. 介绍2. github3. 认证 官网介绍小结 & 补充 &#xff1a;权限不足or验证码错误问题 &#x1f308;你好呀&#xff01;我是 是Yu欸…

统一SQL 支持Oracle CHAR和VARCHAR2 (size BYTE|CHAR)转换

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库&#xff1a;Oracle 目标数据库&#xff1a;Postgresql&#xff0c;TDSQL-MySQL&#xff0c;达梦8&#xff0c;LightDB-Oracle 操作目标 在Oracle中的CHAR和VARCHAR2数据类型&…