GEE必须会教程—影像集合的操作方法

news2024/9/28 7:24:50

影像集合(Image Collection),说白了就是把一堆影像打包在一起形成的集合,我们可以用用前文讲过的矢量集合的方法来理解(http://t.csdnimg.cn/bRJOT),学习影像集合的过程中,同样需要掌握影像集合数据的定义、属性信息的访问、过滤筛选、以及区域统计等等。

接下来我们一个一个进行讲解

A.固定影像输出个数与获取影像大小

由于数据集合中往往存在数以千计的单张影像,在进行分析时,我们不一定能够用上所有的影像,因此限制影像的输出就显得必要,它可以减小云端内存的存储量。提升计算效率,我们在这里用上limit进行限制。

var L8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA");
var Col1 = L8.limit(10);
print(Col1);
print(Col1.size());

此处我们使用Landsat8的大气层顶反射率数据集合进行案例示范,该数据包含多张影像,我们使用limit方法,重新建立了新的影像集合,改集合包含10张影像,因此结果输出的时候size的大小自然就是10啦。

B.过滤筛选

影像集合的过滤筛选主要包括时间过滤、属性过滤和空间过滤,我们来举个例子吧

//时间过滤
var L9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var Col2 = L9.filterDate("2023-01-01","2023-01-02");
print(Col2);
//空间过滤
var roi = ee.Geometry.Polygon([[[-74.13240375034862,-48.93016861528302],
                                [-70.52888812534862,-47.61403250654011],
                                [-72.81404437534862,-46.29428986987951],
                                [-74.13240375034862,-48.93016861528302]]]);
Map.addLayer(roi,{"color":"red"},"roi");
var Col3 = L9.filterBounds(roi);
print(Col3);
//属性过滤
var Col4 = L9.filterMetadata("CLOUD_COVER","equals",10);
print(Col4);
//三种过滤的综合
var Col5 = L9.filterDate("2023-01-01","2023-01-30")
              .filterBounds(roi)
              .filterMetadata("CLOUD_COVER","less_than",20);
print(Col5);
var trueColor432Vis = {
  min: 0.0,
  max: 0.4,
  bands:["B4","B3","B2"]
};
Map.addLayer(Col5.first(), trueColor432Vis, 'True Color (432)');

上面的代码展示了在影像集合数据中进行过滤的操作,主要用到的过滤操作方法有filterDate(时间)、filterBounds(空间)、filterMetadata(属性)。其中以属性过滤的方法参数较多,此处小编想筛选云层覆盖分数为10的L9影像。最终得到的结果如下:

C.遍历循环

影像集合与矢量集合一样,当我们需要对每一张影像进行同一个操作时,为了方便,就要用到循环了。举个例子,我们现在在亚马逊流域划定一块区域,期望利用L9数据计算经过该区域的每一张影像的NDVI均值,并将结果添加到原图像中。

//遍历循环
//研究区域定义
var roi1 = ee.Geometry.Polygon([[[-57.48322729874109,-3.181066228738518],
                                 [-54.59382300186609,-3.181066228738518],
                                 [-54.59382300186609,-1.4357253044917677],
                                 [-57.48322729874109,-1.4357253044917677],
                                 [-57.48322729874109,-3.181066228738518]]]);
Map.addLayer(roi1,{"color":"orange"},"roi1");
Map.centerObject(roi1,6);
//影像数据筛选
var Col6 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA")
                                .filterDate("2023-06-01","2023-06-30")
                                .filterBounds(roi1)
                                .filterMetadata("CLOUD_COVER","less_than",20);
print(Col6,"Col6");
Map.addLayer(Col6.first(),trueColor432Vis,"Col6");
//计算NDVI添加波段
var Col6NDVI = Col6.map(function(image){
  var ndvi = image.normalizedDifference(["B5","B4"]);
  return image.addBands(ndvi.rename("NDVI"));
}).select("NDVI");
print(Col6NDVI,"Col6NDVI");
//统计研究区域每一张影像NDVI均值
var Col6NDVIMean = Col6NDVI.map(function(image){
  var mean = image.reduceRegion({
    reducer:ee.Reducer.mean(),
    geometry:roi1,
    scale:250,
  });
  var ndvi = ee.Number(mean.get("NDVI"));
  image = image.set("ndvi",ndvi);
  return image;
});
print("Col6NDVIMean",Col6NDVIMean);

遍历循环我们常常用到map方法,该方法一定要掌握,我们在前面多次强调。map方法主要结构为:

collection.map(function(element{order1,order2,return element})

上面的代码中,我们在两个地方用到了map方法,第一部分采用map遍历每一张影像,计算其NDVI,并且添加波段重命名为NDVI,考考大家,结尾为什么要使用select方法?这是因为原L9单景影像波段数量较多,select类似与复制粘贴的含义,通过select方法,挑选出自己想要的波段,再生成新的影像,这样输出的影像结果就只会保留我们选择的波段。因此,这里我们生成的影像只保留NDVI波段。第二部分我们采用map方法统计经过研究区域影像的NDVI均值,由于进行统计计算时,reduceRegion最后返回的是字典对象,因此我们需要使用get讲NDVI均值提取出来,再设置其为影像的属性。我们来看看,最后的结果是不是这样的:

除了map方法,遍历循环还有什么方法?相信大家在学习矢量集合的时候还接触过iterate方法,小编在当时的文章里花了较大的篇幅进行讲解,要是友友们对这个方法感兴趣,可以回看小编此前写的文章,在此就不花笔墨啦。

D.统计方法

接着上文的例子,我们涉及到了影像的区域统计。今天最后一部分时间,把视角切入到区域统计计算的讨论。在GEE中,针对于ImageCollection,主要有两种方法开展统计,第一种是应用于多波段的高光谱数据,第二种是针对于属性信息的统计。

D1—多波段数据的统计

多波段数据的统计常常使用reduce方法,这个方法一共有两个参数,第一个参数是reducer,代表你是想统计什么?均值、最大值、最小值、中值?这里的统计,是针对于同一个像素展开的,最后得到的结果就是所有像素在某一种统计方法下合成的单景影像。第二个参数是parallelScale,用来应对缩放内存溢出的状况。

//reduce统计
//导入研究区域
var roi2 = ee.Geometry.Polygon([[[32.12760898702021,-14.957509026064299],
                                [36.10465976827021,-14.957509026064299],
                                [36.10465976827021,-9.353667321411514],
                                [32.12760898702021,-9.353667321411514],
                                [32.12760898702021,-14.957509026064299]]]);
Map.centerObject(roi2,6);
//数据预处理
var Landsat9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA")
                        .filterDate("2023-01-31","2023-12-31")
                        .filterBounds(roi2);//筛选
var Landsat9maskcloud = Landsat9.map(ee.Algorithms.Landsat.simpleCloudScore)
                                .map(function(image){
                                var mask = image.select("cloud").lte(20);
                                return image.updateMask(mask);
                                });//去云
//计算NDVI
var Landsat9NDVI = Landsat9maskcloud.map(function(image){
                             var ndvi = image.normalizedDifference(["B5","B4"]);
                             return image.addBands(ndvi.rename("NDVI"));
}).select("NDVI");
//可视化参数设置
var palettes = require('users/gena/packages:palettes');
var visParams = {
  min:-0.2,
  max:0.8,
  palette:palettes.colorbrewer.RdYlGn[10]
};
//区域统计
var image = Landsat9NDVI.reduce(ee.Reducer.mean());
//图层显示
Map.addLayer(image,visParams,"NDVIimage");
Map.addLayer(roi2,{"color":"orange"},"roi2");
print("Image",image)

此处小编选择了非洲的某著名湖泊作为研究区域,目标是统计该湖泊周边的区域NDVI均值。主要的过程包括研究区域的定义,数据的预处理,这里要复习一下去云哦(http://t.csdnimg.cn/sJxuj),接着计算NDVI,并且进行区域的NDVI数值的统计。关于Lnadsat大段的代码,其实还有简化的空间,所有的map都是可以一气呵成的,如此就可以不用定义那么多的中间变量了。

var Landsat9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA")
                    .filterDate("2023-01-31","2023-12-31")
                    .filterBounds(roi2)
                    .map(ee.Algorithms.Landsat.simpleCloudScore)
                       .map(function(image){
                           var mask = image.select("cloud").lte(20);
                           return image.updateMask(mask);
                         }).map(function(image){
                         var ndvi = image.normalizedDifference(["B5","B4"]);
                         return image.addBands(ndvi.rename("NDVI"));
                    }).select("NDVI");

华丽欣赏在地图上最终得到的结果:

D2—属性信息统计

//reduceColumns统计
//研究区域定义
var roi3 = ee.Geometry.Polygon([[[127.93463885872399,41.91358883254171],
                                 [128.22577655403649,41.91358883254171],
                                 [128.22577655403649,42.06771501827376],
                                 [127.93463885872399,42.06771501827376],
                                 [127.93463885872399,41.91358883254171]]]);
Map.centerObject(roi3,6);
//数据预处理
var Landsat9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA")
                        .filterDate("2023-01-31","2023-12-31")
                        .filterBounds(roi3)
                          .map(ee.Algorithms.Landsat.simpleCloudScore)
                                .map(function(image){
                                var mask = image.select("cloud").lte(10);
                                return image.updateMask(mask);
                                });
print("Landsat9",Landsat9);
//属性信息统计
var index = Landsat9.reduceColumns(ee.Reducer.toList(),["system:index"]);
print("index",index);
var index1 = index.get("list");
print("index1",index1);

属性信息的统计即统计某一个影像集合的属性信息。此处小编想找出覆盖2023年长白山天池云量小于10%的所有影像的索引号,使用reduceColumns方法,在计算上选择toList的形式,意图将索引号以列表的形式进行存储,采用get方法提取处列表,这样便能够单独得到一张表格,里头存储了符合目标要求的所有影像索引号。且看结果:

好啦,以上就是小编想分享的关于GEE中影像集合数据的所有内容,至此,GEE上常用的数据类型小编基本上都和大家一起学习完了,从数字开始到现在,想必现在看到GEE就可以好好相处!

后续小编对GEE的解读将从案例展开,和大家继续学习哦!

大家加油!更多内容欢迎扫码关注小编的公众号“梧桐凉月”,我是梧桐君,地理路上并不孤单,咱们下期再会!

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

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

相关文章

【DL经典回顾】激活函数大汇总(八)(Maxout Softmin附代码和详细公式)

激活函数大汇总(八)(Maxout & Softmin附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不…

strcat的模拟实现

一:strcat函数的定义: strcat函数功能的解释: 将源字符串追加(连接)到目的字符串的后面 strcat函数要点: 源字符串必须以 \0 结束。 目标空间必须有足够的大,能容纳下源字符串的内容。 目…

使用STM32+ESP8266(ESP-01S)+点灯科技(手机端Blinker)实现远程控制智能家居

硬件准备:STM32单片机、ESP8266(ESP-01S)、CH340C下载烧录器 软件准备:STM32CubeMX、Keil uVision5、Arduino IDE、 点灯科技(手机端APP Blinker)点灯科技 (diandeng.tech)点击进入 值得注意的是&#x…

NO9 蓝桥杯单片机之串口通信的使用

1 基本概念 简单来说,串口通信是一种按位(bit)传输数据的通信方式。 其他一些知识就直接贴图吧(单工,半双工这些学过通信的同学应该都知道,可以上网查询一下具体概念。) 来源还是:…

【CSP试题回顾】201709-3-JSON查询

CSP-201709-3-JSON查询 解题思路 1. 初始化数据结构 map<string, string> strContent: 存储字符串类型属性的内容。键是属性名&#xff08;可能包含通过点.连接的多级属性名&#xff09;&#xff0c;值是属性的字符串值。vector<string> keyVec: 存储当前正在处…

酒店客房管理系统设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本酒店客房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

SpringBoot+vue3打造企业级一体化SaaS系统

SpringBootvue3打造企业级一体化SaaS系统 简介&#xff1a;    全面提升前后端技术水平&#xff0c;独立完成全栈项目开发能力&#xff0c;快速进击全栈工程师&#xff0c;最终在面试中脱颖而出。整合后端主流技术&#xff08;Spring Boot、物理数据库隔离、加载动态权限、多…

网络基础 - 预备知识(协议、网络协议、网络传输流程、地址管理)

文章目录 1. 认识 协议2. 了解 网络协议2.1 引入 协议分层2.2 OSI 七层模型 与 TCP/IP 四层模型 3. 网络传输 流程&#xff01;&#xff01;&#xff01;3.1 网络传输流程图3.2 关于报头3.3 实例解释 传输过程&#xff08;封装与解包&#xff09; 4. 网络中的地址管理4.1 认识 …

力扣串题:字符串中的第二大数字

此题的精妙之处在于char类型到int类型的转化&#xff0c;需要运算来解决 int secondHighest(char * s) {int max1-1;int max2-1;int szstrlen(s);int i 0 ;for(i0;i<sz;i){if(s[i]>0&&s[i]<9){if((s[i]-0)>max1){max2max1;max1s[i]-0;}else if((s[i]-0)&l…

Linux I2C调试分享

I2C简介 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种多主机、两线制、串行计算机总线&#xff0c;用于连接低速外围设备到处理器或微控制器。这种通信协议由Philips Semiconductor&#xff08;现在的NXP Semiconductors&#xff09;在1980年代初期开发。 I2C…

英语四六级有线调频听力广播-厦门华厦学院有线调频听力广播系统建设深度解析

英语四六级有线调频听力广播-厦门华厦学院有线调频听力广播系统建设深度解析 由北京海特伟业任洪卓发布于2024年3月14日 随着社会的快速发展和国际交流的日益频繁&#xff0c;英语已成为我们日常生活中不可或缺的一部分。作为衡量大学生英语水平的重要标准之一&#xff0c;大学…

javaweb数据传参类型(2)

前言 友友们好呀&#xff0c;今天来分享一下对于各种数据类型传参的问题&#xff0c;今天陪伴我们的云海 目录 前言 数组集合传参 补充 日期参数 补充 Json格式数据传参 补充 路径参数 补充 今日分享 ​​​​​​​数组集合传参 类似于我们之前进行的简单的参数传递…

深度学习模型部署(五)onnx模型以及相应工具

ONNX概念 onnx不仅仅一种模型参数存储的格式&#xff0c;还是一套完整的用于描述计算函数的编程语言&#xff0c;它的作用就是定义计算图&#xff0c;他本身无法进行。 这个概念和Verilog有点像&#xff0c;一个是硬件描述语言&#xff0c;一个是模型描述语言。 onnx模型或者说…

Learn OpenGL 10 Assimp+网格+模型

Assimp 一个非常流行的模型导入库是Assimp&#xff0c;它是Open Asset Import Library&#xff08;开放的资产导入库&#xff09;的缩写。Assimp能够导入很多种不同的模型文件格式&#xff08;并也能够导出部分的格式&#xff09;&#xff0c;它会将所有的模型数据加载至Assim…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

经典数组和指针笔试题解析——C语言

【本节内容】 1. 数组和指针笔试题解析 2. 指针运算笔试题解析 1. 数组和指针笔试题解析 1.1 一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%zd\n", sizeof(a));printf("%zd\n", sizeof(a 0));printf("%zd\n&qu…

【金三银四】掌趣科技24.3.7 H项目 服务端开发笔试题

考试题型&#xff1a; 不定项选择题 10 道 &#xff0c; 填空题 10 道 &#xff0c; 问答题 2 道 &#xff0c; 编程题 4 道 目录 不定项选择题 10 道填空题 10 道问答题 2 道编程题 4 道 不定项选择题 10 道 在TCP协议中&#xff0c;发送方的窗口大小是由两个关键因素共同决定…

三个表联合查询的场景分析-场景1:a表关联了b表和c表

本场景对应情景如下&#xff1a; 三个数据表&#xff0c;一个表的两个字段分别关联了另外两个表各自的id数据&#xff0c;可能包含多个id&#xff08;两个1对多关联&#xff09;。 目录 数据表准备 需求1、查询c表的列表数据&#xff0c;要求获得关联的b表中的name&#xf…

工业界真实的推荐系统(小红书)-涨指标的方法:召回、排序、多样性、特殊人群、利用交互行为

课程特点&#xff1a;系统、清晰、实用&#xff0c;原理和落地经验兼具 b站&#xff1a;https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义&#xff1a;https://github.com/wangsh…

CSDN 编辑器设置图片缩放和居中

CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 ![图片描述](图片路径)CSDN 的 Markdown 编辑器中插入图片&#xff0c;默认都是左对齐&#xff0c;需要设置居中对齐的话&#xff0c;…