Google Earth Engine谷歌地球引擎GEE中ee.ImageCollection格式多张栅格图像数据基本处理操作

本文主要是介绍Google Earth Engine谷歌地球引擎GEE中ee.ImageCollection格式多张栅格图像数据基本处理操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本文主要对GEE中的ee.ImageCollection格式数据图层基本处理操作加以介绍。本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第十一篇,更多GEE文章请参考专栏:GEE学习与应用(https://blog.csdn.net/zhebushibiaoshifu/category_11081040.html)。

  在第二篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/117296956)中,我们通过搜索的方式导入了GEE内置的遥感影像数据与各类矢量数据;而在第九篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119545059)中,我们通过代码的方式获取了Landsat 5 Collection 1 Tier 1的大气表观反射率TOA Reflectance产品。本文依然采用代码方式,获取Landsat 8 Collection 1 Tier 1的初始影像Raw Scenes产品。

  其中,依据第十篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119568274)中提及的ee.Geometry.Point()函数,设置一个点要素,作为后期研究区域的参照点(即获取能覆盖这一点要素的Landsat 8遥感影像);同时依据第二篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/117296956)中提及的遥感影像时间筛选方法,对Landsat 8遥感影像的时间段进行筛选。这里用到了两个之前教学博客中没有介绍的新函数——首先是.filterBounds()函数,作用为获取覆盖点要素point的遥感影像,即对遥感影像进行空间角度的筛选;其次是.sort()函数,作用为对ee.ImageCollection格式数据中的多层遥感影像按照一定规则进行排序。

var point=ee.Geometry.Point(116.36863, 39.961029);
var date_start=ee.Date("2020-05-01");
var date_end=ee.Date("2020-07-01");
var my_landsat=ee.ImageCollection("LANDSAT/LC08/C01/T1").filterBounds(point)
.filterDate(date_start,date_end).sort("CLOUD_COVER",true);
print(my_landsat);

  在这里,"CLOUD_COVER"表示遥感影像的云覆盖量,true表示按照排序指标的升序进行排列——即对于ee.ImageCollection格式数据中多景遥感影像,基于云覆盖量由少至多的顺序进行排列。还有需要强调的一点是,"CLOUD_COVER"并不是遥感影像波段的名称,而属于影像的元数据,或者说是属性。

在这里插入图片描述

  通过print()函数打印在右侧的信息,我们可以看到这个ee.ImageCollection格式数据中包含三个元素(即3 elements),也就是含有三景重叠的遥感影像。

在这里插入图片描述

  我们可以通过.first()函数获取一个ee.ImageCollection格式数据中的第一景影像。在这里,由于前述代码实现了云覆盖量由少至多的顺序进行排列,因此第一景影像也就是云覆盖量最低的那一景影像。

var first_landsat=my_landsat.first();
print(first_landsat);

在这里插入图片描述

  除了本文开头提及的按照一个点要素来筛选遥感影像,我们还可以按照LandsatPathRow分幅进行筛选。

//var point=ee.Geometry.Point(116.36863, 39.961029);
var date_start=ee.Date("2019-07-01");
var date_end=ee.Date("2020-06-01");
var my_landsat=ee.ImageCollection("LANDSAT/LC08/C01/T1")
.filter(ee.Filter.eq("WRS_PATH",123))
.filter(ee.Filter.eq("WRS_ROW",032))
.filterDate(date_start,date_end);
print(my_landsat);

  其中,ee.Filter.eq()函数表示按照某种方式进行筛选,"WRS_PATH"参数表示按照遥感影像属性中的Path分幅作为筛选标准,123表示筛选出Path号为123的遥感影像。

在这里插入图片描述

  筛选完后,我们可以将ee.ImageCollection格式数据中每一个要素的名称(即每一景遥感影像的名称)转为列表格式。

var list=my_landsat.toList(100);
print(list);

  其中,.toList()函数作用是将原有数据(ee.ImageCollection格式数据中每一个要素的名称)转为列表,100表示从ee.ImageCollection格式数据中获取要素名称的最大个数(即最多从ee.ImageCollection格式数据中获取100个要素的名称存入列表),这一参数只要远大于ee.ImageCollection格式数据中的要素个数即可。

在这里插入图片描述

  可以通过.length()函数获取列表数据的长度;这一长度也就是ee.ImageCollection格式数据中要素的个数。

var list_size=list.length();
print("The size of list is:",list_size);

在这里插入图片描述

  此外,还可以对ee.ImageCollection格式数据执行.size()函数,同样可以获取其要素个数。

var image_count=my_landsat.size();
print("The size of image is:",image_count);

在这里插入图片描述

  我们还可以对ee.ImageCollection格式数据的元数据(属性)进行获取。

print(my_landsat);

  首先,打印一下ee.ImageCollection格式数据,可以看到其properties中包含了很多属性信息;接下来我们就以date_range为例进行操作。date_range表示ee.ImageCollection格式数据中,遥感影像成像的起止时间。

在这里插入图片描述

  利用.get()函数就可以获取ee.ImageCollection格式数据的具体某一项属性。

var date_range=my_landsat.get("date_range");
print(date_range);

  打印出的起止时间格式如下图所示。这种用一长串数字来表示时间的格式为Unix Epoch,即Unix时间戳,其表示从1970年01月01 日00:00:00(GMT)开始以来的秒数;这里还需要注意,在JavaScript中,Unix Epoch的单位是毫秒,若要换为秒需要进行换算。

在这里插入图片描述

  我们还可以将起止时间转换为列表的形式。

var date_range_list=ee.List(date_range);
print(date_range_list);

  执行代码,可以看到是否转换为列表对于起止时间的显示而言并没有很大区别。

在这里插入图片描述

  Unix Epoch这种时间表示方法看起来不方便,我们可以将其转换为我们熟知的日期表示格式。

var date_range_ymd=ee.DateRange(date_range_list.get(0),date_range_list.get(1));
print("Date range is:",date_range_ymd);

  其中,ee.DateRange()就是一个可以起到转换时间格式作用的函数;同时,分别用.get()函数获取起止时间的第一个和第二个元素;第九篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/119545059)已经介绍过,列表元素初始下标为0,因此分别用01来获取列表中的第一个和第二个元素。

  起止时间转换后,我们可以看到2013年04月到2021年08月这个范围并不是前面我们用.filterDate(date_start,date_end)语句筛选后的日期,而是Landsat 8卫星发射并投入使用后到目前的时间;因此我们可以知道,ee.ImageCollection格式数据中properties内的date_range属性指的是整个初始数据集Landsat 8 Collection 1 Tier 1的初始影像Raw Scenes产品)的起止时间,而不是经过筛选后(包括经过成像时间筛选与空间筛选后)得到的剩下几景遥感影像的起止时间。

在这里插入图片描述

  还可以利用.aggregate_stats()函数统计ee.ImageCollection格式数据某一项属性的信息,其统计得到的信息包括ee.ImageCollection格式数据中,全部遥感影像的某一项属性值的极值、总和、平均值、标准差等。

var statistics=my_landsat.aggregate_stats("SUN_ELEVATION");
print(statistics);

在这里插入图片描述

  此外,可以将.sort()函数与.first()函数一起执行,从而获取排序后,排在第一位的那一景遥感影像。

var least_cloud=my_landsat.sort("CLOUD_COVER",true).first();
print(least_cloud);

  这里需要注意,执行上述代码后得到的是一景遥感影像(即ee.Image格式的数据)。

在这里插入图片描述

  同时,.sort()函数排序后,我们还可以获取排序前几位的遥感影像。

var recent_image=my_landsat.sort("system:time_start",false).limit(10);
print(recent_image);

  其中,利用.limit()函数获取有限的遥感影像,10表示获取10景,即获取成像时间离目前最近的10景遥感影像。因此,执行这一代码后获取的是多景遥感影像,即ee.ImageCollection格式的数据。

在这里插入图片描述

欢迎关注公众号/CSDN/知乎/微博:疯狂学习GIS

这篇关于Google Earth Engine谷歌地球引擎GEE中ee.ImageCollection格式多张栅格图像数据基本处理操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393504

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi