GEE调用Sentinel-2 MSI L2A数据集 示例代码解析笔记

news/发布时间2024/5/16 11:58:33

代码来源:https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED#description

讲解一下GEE示例

/*** Function to mask clouds using the Sentinel-2 QA band* @param {ee.Image} image Sentinel-2 image* @return {ee.Image} cloud masked Sentinel-2 image*/
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}var dataset = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED').filterDate('2020-01-01', '2020-01-30')// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10)).map(maskS2clouds);var visualization = {min: 0.0,max: 0.3,bands: ['B4', 'B3', 'B2'],
};Map.setCenter(83.277, 17.7009, 12);Map.addLayer(dataset.mean(), visualization, 'RGB');

QA60是Sentinel-2影像中的一种质量控制波段,用于记录每个像素点的质量信息。具体来说,QA60波段记录了每个像素的60个质量控制位,每个位代表了一个特定的质量标志,如云、阴影、雪等。其中,第10位是云,第11位是卷云。

因此这段代码前半部分构造了一个 maskS2clouds() 的函数,根据对应位的数值构造掩膜。

var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));

这段代码表示,如果这个像素没受 影响,也没受 卷云 影响,那么就为这个像素构造掩膜

 return image.updateMask(mask).divide(10000);

image.updateMask() 这个函数将image中所有mask值为1的像素保留,然后又将每个像素的DN值归一化 (Sentinel-2 的DN值范围:0-10000)

后续代码就是将对应时间内,云量少于20%的影像进行掩膜处理,并平均的覆盖地图上的每一个位置。

如果想看不进行掩膜去云处理的图像进行对比,可以运行以下代码:

/*** Function to mask clouds using the Sentinel-2 QA band* @param {ee.Image} image Sentinel-2 image* @return {ee.Image} cloud masked Sentinel-2 image*/
function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}var dataset = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED').filterDate('2020-01-01', '2020-01-30')// Pre-filter to get less cloudy granules..filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',10)) //可以把“10”改大一点,更明显
//                  .map(maskS2clouds);var visualization = {min: 0,max: 10000,bands: ['B4', 'B3', 'B2'],
};Map.setCenter(83.277, 17.7009, 12);Map.addLayer(dataset.mean(), visualization, 'RGB');

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

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

相关文章

顺序栈--代码题

数据结构 顺序栈代码题设计一个进制转换程序,使用顺序栈设计一个把十进制转化为十六进制的接口,实现当键盘输入一个非负的十进制时,可以在终端输出对应的十六进制数。 /***************************************************************************************** file n…

嵌入式笔记4.1 GPIO 功能复用

目录一、了解 MCU(GPIO)具有的所有复用功能通过查看 MCU 的数据手册可以知道 MCU 的所有引脚的功能:例 STM32L431:例 stm32f103:复用、重映射、多路复用(多功能引脚)GPIO复用(AF - Alternate Function)重映射(Remapping)多路复用(Multi-function)常见引脚功能一览…

图文结合手把手教你创建SpringCloud项目

前言 什么是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务注册、服务发现、网关、路由、链路追踪等。Spring Cloud 并不是重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了…

关于双向循环列表的插入、删除、遍历

目录 双向循环链表公式初始化双向循环链表 构建双向循环链表结构体 // 双向循环链表节点定义 typedef struct double_loop_node { char data[DATA_LEN]; // 数据域,存储数据长度 struct double_loop_node *next; …

博客园主题美化

博客园主题美化 参考链接 https://www.cnblogs.com/zlzgzlz/p/17656741.html

Redis 面试知识点

1、Redis缓存数据库一致性采用最终一致性,而不是采用强一致性,强一致性会导致系统吞吐量变差;采用双删除的策略,第二次删除,采用延迟删除;推荐采用,先操作数据库,直接删除缓存的方式;删除失败的情况,采用异步方式,重试操作;读取binlog异步删除,使用开源框架canal,…