GEE必须会教程—时间都去哪了(Date参数类型)

时间和空间是世界存在的两种基本属性,大部分的数据都有特有的通道存储时间信息,用户需要通过获取数据存储的信息,来判断数据的可用性,以及数据在时间上发生的变化。在遥感上,空间数据集合中,时间信息显得更加重要,研究人员需要通过时间信息判断地物类型发生的变化,在时间序列上展开分析。时间都去哪了?是大家要面对的共性问题,今天我们探讨一下,GEE平台上的日期参数类型。

一、Date参数类型

日期作为GEE的参数类型,共包括两种,一种指的是特定的日期,一种指的是日期的范围。先看到Date参数类型。

1.定义日期

老样子,凡是先定义,GEE上定义一个日期有多种方法,且看:

//定义日期
var date1 = ee.Date("2023-01-01");
print("date1:",date1);
var date2 = ee.Date.parse("YYYYDDD","2023010");
print("date2:",date2);
//var date2 = ee.Date.fromYMD(2020,01,01);

一种是直接采用ee.Date方法定义直接定义日期,方便快捷。一种是利用parse方法,通过指定格式和对应的日期进行创建,//后面给出了第三种方法,采用fromYMD格式,进行日期的格式化创建。

有没有小伙伴想知道GEE上最早的时间定义的是什么时候,要知道这个,我们不烦耍点小聪明,用24*60*60*1000(h*min*se*mi),这个算式表示的含义是距初始时间一天的时间算式表达方式。

//判断GEE上最开始的时间加一天的日期是
var Date = ee.Date(24*60*60*1000);
print("Date",Date);
var InitialDate = ee.Date("1970-01-01");
print("IDate",InitialDate);

此时我们会发现一个神奇的现象:

从打印的结果可以看出,时间是1970-01-02,此时我们反推一天,是不是能够得到GEE平台上定义的初始时间就是1970-01-01呢?小编写了个代码验证了一下,欸!发现它的value值等于0,说明1970-01-01是初始时间,这是一个神圣的日子,大家要记住。

2.获取时间单位的占比

如果想知道当前日期在一年中的占比,可以这样:

//获取时间单位的比例
var time = ee.Date("2020-03-02");
var fraction = time.getFraction("year");
print(time,fraction,(31+29+2)/366);

此处使用getFraction方法,获取了该时间在一年中所占的比例,即年份的小数部分,打印时我们手算了一下(2024年是闰年记得哈),对比一下输出结果:

可以看出,手算和机算之间还是有差别的,这里的结果不一样是因用前者方法返回的是一个精确的小数值,而手动计算的结果,可能存在四舍五入或者精度损失的情况。因此,两者的值可能会有微小的差异。

3.获取前一天或者是后一天的数据

接下来要分享的方法对于时间序列很重要,有时候写循环,需要让时间能够自动实现递增或者是递减,也即依据当前日期获得前一天或者是后一天的日期。

//获取后一天或者是前一天,单位可以是year,month,week,day,hour,minute,second
var date3 = ee.Date("2024-01-01");
var nextDate = date3.advance(1,"month");
var preDate = date3.advance(-1,"day");
print("nextDate:",nextDate);
print("preDate:",preDate);

要实现上述目标,我们要用到advance方法,该方法两个参数中,前者是数字,代表日期的递增步长,后者的字符串代表时间单位,可以是年月日小时分钟等多种单位,具体应用何种单位要依据各位小可爱的实际研究情境确定。这个一定要记住,以后我们在时间序列分析过程中会经常看到它。

4.获取日期间隔

知道两个日期,怎么得到两个日期之间的间隔?

//日期间隔,单位可以是year,month,week,day,hour,minute,second
var date4 = ee.Date("2024-02-01");
var date5 = ee.Date("2024-02-22");
var gap1 = date5.difference(date4,"day");
var gap2 = date5.difference(date4,"hour");
var gap3 = date5.difference(date4,"week");
print("gap1:",gap1);
print("gap2:",gap2);
print("gap3:",gap3);

间隔采用difference命令,该方法可以指定要计算间隔的时间单位,此处小编以天、小时和周来举例子,且看代码的运行结果:

按天来看,两个日期之间相差21天,按小时来看,21*24=504h,按周来算,21/7 = 3。

5.计算逝去时间

如果想知道想现日期相对于当年以某个特定的时间单位逝去的时间,应该如何做?

//计算当前日期为一年中的第几天(指定格式,相对于这一年的开始)
var date6 = ee.Date("2024-02-02");
var day1 = date6.getRelative("day","year");
var day2 = date6.getRelative("day","month");
var month = date6.getRelative("month","year");
print("day1:",day1,"day2:",day2,"month:",month);

要实现上述目标,我们需要用到GEE的getRelative,此处小编以一年当中的第几天,一月当中的第一天,一年当中的第几月为例子,得到下列结果:

2024年2月2日相对于2024年1月1日是32天,从月份来看,2月2日相对于2月1日是过了一天,2024年2月相对与2024年1月时间过去一个月,因此结果如上,你理解了嘛?

6.按照指定格式获取日期时间

有时我们只想知道一年,或者某月等的时间,那么只需要想如下:

//按照指定格式获取日期
var date7 = ee.Date("2024-02-20");
var Day = date7.format("dddd");
var Month = date7.format("MM");
print("Day:",Day,"Month:",Month);

利用format方法,并添上合适的日期格式,小编这里设置的是用4为数字表示天(dddd),用两位数字表示月份(MM),注意单位是其英文的缩写,即可得到想要的结果。

7.获取指定日期的年月日等时间信息

这个就像去字典里面取属性一般,使用get方法即可:

//获取日期的年月日等信息
var date8 = ee.Date.parse("yyyy-mm-dd HH:mm:ss","2024-02-22 17:22:48");
print("Year:",date8.get("year"));
print("Month:",date8.get("month"));
print("Week:",date8.get("week"));
print("Day:",date8.get("day"));
print("Hour:",date8.get("hour"));
print("Minute:",date8.get("minute"));
print("Second:",date8.get("second"));

通过上述代码,能够得到每一个时间单位存储的时间信息:

二、DateRange参数类型

聊完了Date类型,我们还要接触一下时间范围DateRange的基操。

1.定义时间范围:

//时间段的定义
var range1 = ee.DateRange("2020-01-01");
var range2 = ee.DateRange("2020-01-01","2020-02-01");
print(range1,range2);

定义日期的时间范围,采用ee.DateRange即可,小编此处举了两个例子,运行的结果如下:

如果只是给定了一个日期,能实现时间范围的定义嘛?当然,如上导出的结果所示,此时GEE会自动创建一个时间范围,二者之间相差一个毫秒。第二个时间范围不用过多解释,就是形成了一个正常的时间范围。

2.创建无限时间范围

小编想创建一个时间范围,从起始时间开始延申至无限,可以包含任意的时间段,能做到吗?用unbounded方法,一键生成无限时间段:

//创建无限时间段
var range3 = ee.DateRange("1990-01-01","2024-02-01");
var unbound = ee.DateRange.unbounded();
var test = unbound.contains(range3);
print("range3:",range3,"test:",test);

此处unbound变量存储是定义的无限时间段,信不信它能够包含定义的长时间范围range3,且看结果吧!!见证奇迹的时候到了!

测试结果是true,小编没骗你吧,是无限的时间段。

3.时间段合并

给定任意的两个时间段可以进行合并嘛?

//时间段的合并
var range4 = ee.DateRange("2020-01-01","2020-02-01");
var range5 = ee.DateRange("2020-04-01","2020-06-01");
var union = range4.union(range5);
print("Union",union);

时间的合并采用的是union方法,该方法能够联合两个时间范围,无论两个时间段是首尾相连,彼此有交叉还是相互独立(本例),union会选择时间段的最小日期和最大日期进行合并,组成一个更宽的时间段,本代码结果如下:

4.求时间段交集

如果把刚刚的合并看成是求时间段之间的并集,那么问题来了,给定两个时间段,我们应该怎么样得到两个时间段之间的交集呢?

//时间段的相交
var range6 = ee.DateRange("2020-01-01","2020-04-01");
var range7 = ee.DateRange("2019-12-01","2020-05-27");
var intersection = range6.intersection(range7);
print("Intersection",intersect);

借助intersection方法,我们能够很方便得到两个时间段之间的交集,结果如下:

5.判断时间段的相交与包含与否

在进行上述的求交集等的操作时,我们要判断时间段之间是否存在相交关系,或者是包含关系,更希望得到一个肯定或者否定的答案,我们可以这样做:

//时间段的相交与包含与否
var range9 = ee.DateRange("2022-04-01","2022-08-01");
var range10  = ee.DateRange("2022-01-01","2022-06-01");
var intersect = range9.intersects(range10);
var contain = range9.contains(range10);
print("Is Intersect:",intersect,"Is contasin:",contain);

相交关系用intersects,注意区别于前面的intersection方法,包含关系用contains。结果如下:

6.时间段的内容判断

给定一个错误的时间段,如何设置检查点?

//时间段的内容判断
var range11 = ee.DateRange("2022-01-01","2012-01-01");
var isempty = range11.isEmpty();
var isunbounded = range11.isUnbounded();
print("isempty:",isempty,"isunbounded",isunbounded);

上面,小编给出了一个错误的时间范围,使用isEmpty方法,如果返回值为true,代表时间范围为空值,或使用isUnbounded,如果返回值为true,代表无限段时间范围内包含小编定义的时间段,反之。本代码得到的结果如下:

7.时间段首末日期的获取

最后一个方法水一下,什么意思自己理解hhh

//获取时间段的初始和结尾时间
var range8 = ee.DateRange("2021-06-01","2021-08-01");
var start = range8.start();
var end = range8.end();

关于GEE平台上拥有的参数类型—时间的学习分享到这里就结束了,希望对大家入门GEE有帮助!

本篇文章代码链接分享:

https://code.earthengine.google.com/8ebb59711931dec387985b1565d7ab39icon-default.png?t=N7T8https://code.earthengine.google.com/8ebb59711931dec387985b1565d7ab39

GEE学习之路不易,大家加油!更多内容,欢迎关注小编的后续分享!

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

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

相关文章

django配置视图并与模版进行数据交互

目录 安装django 创建一个django项目 项目结构 创建视图层views.py 写入视图函数 创建对应视图的路由 创建模版层 配置项目中的模版路径 创建模版html文件 启动项目 浏览器访问结果 安装django pip install django 创建一个django项目 这里最好用命令行完成&#xf…

SQL注入之DNSLog外带注入

一、认识: 什么是dnslog呢? DNS就是域名解析服务,把一个域名转换成对应的IP地址,转换完成之后,DNS服务器就会有一个日志记录本次转换的时间、域名、域名对应的ip、请求方的一些信息,这个日志就叫DNSLog。…

汉诺塔问题—java详解(附源码)

来源及应用 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍…

【Nacos】构建云原生应用的动态服务发现、配置管理和服务管理平台【企业级生产环境集群搭建应用】

基础描述 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和…

猫头虎分享已解决Bug || Spring Error: Request method ‘POST‘ not supported

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

海思3559 yolov5 wk模型部署笔记

文章目录 安装3559工具链编译opencv编译项目总结 安装3559工具链 将3559工具链copy到虚拟机上,并解压得到安装包 解压: tar -zxvf aarch64-himix100-linux.tgz解压后会得到安装包文件夹: 安装工具链: sudo ./aarch64-himix100…

Unity2023.1.19没有PBR Graph?

Unity2023.1.19没有PBR Graph? 关于Unity2023.1.19没有PBR graph的说法,我没看见管方给出的答案,百度则提到了Unity2020版之后Shader Graph的“全新更新”,之前也没太注意版本的区别,以后项目尽量都留心一下。 之前文章说过,孪生智慧项目推荐使用URP渲染管线,以上的截…

Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)

上篇文章介绍了openpose,本篇文章介绍下线稿约束,关于线稿约束有好几个处理器都属于此类型,但是有一些区别。 包含: 1、Canny(硬边缘):识别线条比较多比较细,一般用于更大程度得还原照片 2、ML…

Spring Security 认证授权安全框架

Spring Security概述 1.什么是Spring Security? Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任…

指针笔试题(C语言进阶)

目录 前言 1、案例一 1.1 答案 1.2 解析 2、案例二 2.1 答案 2.2 解析 3、案例三 3.1 答案 3.2 解析 4、案例四 4.1 答案 4.2 解析 5、案例五 5.1 答案 5.2 解析 总结 前言 “纸上得来终觉浅,绝知此事要躬行”。本篇通过对指针实际案例的分析&…

Google重磅开源!Gemma 2B/7B小模型登场,6万亿Tokens喂饱,聊天编程两不误,LLaMA也黯然失色?

Google又有大动作! 近日,他们发布了Gemma 2B和7B两个开源AI模型,与大型封闭模型不同,它们更适合小型任务,如聊天和文本摘要。 这两个模型在训练过程中使用了6万亿个Tokens的数据,包括网页文档、代码和数学…

收单外包机构备案2023年回顾和2024年展望

孟凡富 本文原标题为聚合支付深度复盘与展望,首发于《支付百科》公众号! 收单外包服务机构在我国支付收单市场中占据着举足轻重的地位,其规模在政策引导和市场需求驱动下不断扩大。同时,随着行业自律管理体系的持续发展和完善&a…

文献速递:GAN医学影像合成--用生成对抗网络生成 3D TOF-MRA 体积和分割标签

文献速递:GAN医学影像合成–用生成对抗网络生成 3D TOF-MRA 体积和分割标签 01 文献速递介绍 深度学习算法在自然图像分析中的成功近年来已被应用于医学成像领域。深度学习方法已被用于自动化各种耗时的手动任务,如医学图像的分割和分类(G…

顶刊中很出彩的二元变量图

导师希望你发顶刊, 但你的图纸差点意思, 那么,你不妨试试这个, 二元变量图, 在顶刊中都很出彩哦! 本次,我们来以“降水量”和“NDVI”两个数据为例,绘制二元变量分析图,表达“降水量”和“NDVI”之间的关系。 什么是二元变量图 首先还是先解释下“二元变量图”。顾…

扫盲贴:Svg动画和Canvas动画有什么区别

hello,我是贝格前端工场,网页中动画的实现有N种方式,比如css动画,js动画,svg动画,canvas动画等等,每一种动画都有对应的场景,本问重点介绍一下svg和canvas动画的异同点,欢…

大工程 从0到1 数据治理 数仓篇(sample database classicmodels _No.7)

大工程 从0到1 数据治理 之数仓篇 我这里还是sample database classicmodels为案列,可以下载,我看 网上还没有类似的 案列,那就 从 0-1开始吧! 提示:写完文章后,目录可以自动生成,如何生成可参…

TRS 2024 论文阅读 | 基于点云处理和点Transformer网络的人体活动连续识别

无线感知/雷达成像部分最新工作<持续更新>: 链接地址 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学…

提高代码质量的 10 条编码原则

提高代码质量的 10 条编码原则 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 今天来聊聊提高代码质量的 10 条编码原则。 软件开发需要良好的系统设计和编码标准。我们在下图中列出了 10 条良好的编码原则。 01 遵循代码规范 我们…

Studio One破解版和正版的区别 Studio One购买是永久的吗

在过去的很长一段时间里&#xff0c;很多小伙伴想要使用一款软件时&#xff0c;可能第一时间就去网上寻找破解版的资源&#xff0c; 白嫖的资源固然很香&#xff0c;但随着法制的健全和人们版权意识的增强&#xff0c;现在破解版的资源是越来越少了。同时破解版的资源也会伴随着…

大数据计算技术秘史(上篇)

在之前的文章《2024 年&#xff0c;一个大数据从业者决定……》《存储技术背后的那些事儿》中&#xff0c;我们粗略地回顾了大数据领域的存储技术。在解决了「数据怎么存」之后&#xff0c;下一步就是解决「数据怎么用」的问题。 其实在大数据技术兴起之前&#xff0c;对于用户…