时间序列处理相关函数及案例

常用函数

日期对象

ee.Date.fromYMD()

ee.Date.fromYMD是Google Earth Engine中的一个方法,用于根据给定的年份(Year)、月份(Month)和日期(Day)创建一个日期对象(Date)。它的语法是:

ee.Date.fromYMD(year, month, day)

其中,year是一个整数,表示年份;month是一个整数,表示月份(1代表一月,2代表二月,依此类推);day也是一个整数,表示日期。这个方法会返回一个表示指定日期的ee.Date对象。

例如,如果要创建一个表示2023年5月15日的日期对象,可以这样写:

var date = ee.Date.fromYMD(2023, 5, 15);

这将返回一个ee.Date对象,表示2023年5月15日。

ee.List.sequence()

ee.List.sequence是Google Earth Engine中的一个函数,用于创建一个数字序列的列表。它的语法是:

ee.List.sequence(start, end, step)

其中,start是序列的起始值,end是序列的结束值,step是序列的步长(可选,默认为1)。该函数返回一个包含指定数字范围内所有数字的列表。

例如,如果要创建一个从1到10的数字序列,可以这样写:

var sequence = ee.List.sequence(1, 10);

如果想要指定步长,比如每隔2个数取一个值,可以这样写:

var sequence = ee.List.sequence(1, 10, 2);

这将返回一个列表,包含数字1、3、5、7、9。
在这里插入图片描述

序列影像处理

ee.ImageCollection.fromImages()

ee.ImageCollection.fromImages是Google Earth Engine中的一个方法,用于从一组图像对象创建图像集合。它的语法是:

ee.ImageCollection.fromImages(images)

其中,images是一个包含图像对象的数组。该方法将这些图像对象转换为一个图像集合,并返回该图像集合。

例如,如果有一组图像对象image1、image2、image3,可以这样将它们转换为一个图像集合:

var imageCollection = ee.ImageCollection.fromImages([image1, image2, image3]);

这将返回一个包含这三个图像的图像集合。

ee.Filter.calendarRange()

ee.Filter.calendarRange是Google Earth Engine中的一个过滤器,用于过滤图像集合中满足指定日期范围的图像。它的语法是:

ee.Filter.calendarRange(start, end, field)

其中,start是日期范围的起始日期,end是日期范围的结束日期,field是表示日期的字段。field可以是以下值之一:‘year’、‘month’、‘day’、‘hour’、‘minute’、‘second’。该方法将返回一个过滤器对象,用于筛选满足指定日期范围的图像。

例如,如果要筛选出某个图像集合中2019年1月1日至2019年12月31日之间的图像,可以这样写:

var startDate = ee.Date.fromYMD(2019, 1, 1);
var endDate = ee.Date.fromYMD(2019, 12, 31);

var filter = ee.Filter.calendarRange(startDate, endDate, 'year');

这将返回一个过滤器对象,用于筛选出2019年的图像。

.set()

.set是Google Earth Engine中用于设置图像、特征或图像集合的属性的方法。它允许您为对象添加或更新属性。

在上下文中,.set(‘year’, year)和.set(‘system:time_start’, ee.Date.fromYMD(year, 1, 1))分别用于为生成的年度降水图像设置属性。第一个 .set 用于设置年份属性,而第二个 .set 用于设置起始时间属性。

例如:

var image = ee.Image(0); // 创建一个图像对象
image = image.set('year', 2022); // 设置图像的年份属性为2022
image = image.set('system:time_start', ee.Date.fromYMD(2022, 1, 1)); // 设置图像的起始时间属性为2022年1月1日

在这个例子中,我们创建了一个值为0的图像对象,然后使用 .set 方法为该图像对象设置了两个属性,分别是年份属性(‘year’)和起始时间属性(‘system:time_start’)。

案例:统计年均降水量

var chirps = ee.ImageCollection("UCSB-CHG/CHIRPS/DAILY");
// 设置开始和结束的年份
var startyear = 1990;
var endyear = 2020;
 
// 时间格式
var startdate = ee.Date.fromYMD(startyear, 1, 1);
var enddate = ee.Date.fromYMD(endyear + 1, 1, 1);
 
// 制作时序
var years = ee.List.sequence(startyear, endyear);
print(years)
 
 
//获取矢量边界,这里改动边界就好了,也就是要上传你自己的矢量边界,或者直接在地图上画
var countries = ee.FeatureCollection('projects/a-flyllf0313/assets/tianshui');
 
 
// 将其转化为geometry
var SriLanka = countries.geometry();
 
//影像的处理和过滤,这里需要选择加入你要用的影像数据
var annualPrecip = ee.ImageCollection.fromImages(
  years.map(function (year) {
    var annual = chirps
        .filter(ee.Filter.calendarRange(year, year, 'year'))
        .sum();
    return annual
        .set('year', year)
        .set('system:time_start', ee.Date.fromYMD(year, 1, 1));
}));

 //设置计算的区域降水的统计和参数设置
var title = {
  title: 'Annual precipitation',
  hAxis: {title: 'Time'},
  vAxis: {title: 'Precipitation (mm)'},
};
 
var chart = ui.Chart.image.seriesByRegion({
  imageCollection: annualPrecip,
  regions: SriLanka,
  reducer: ee.Reducer.mean(),
  band: 'precipitation',
  scale: 2500,
  xProperty: 'system:time_start',
  seriesProperty: 'SITE'
}).setOptions(title)
  .setChartType('ColumnChart');
 
//打印chart
print(chart);
 
var annualMean = annualPrecip.mean().clip(SriLanka);
 
var pViz = {
  min: 400,
  max: 800,
  palette: '000000, 0000FF, FDFF92, FF2700, FF00E7'
};
 
Map.centerObject(countries, 5);
Map.addLayer(annualMean, pViz, 'mean yearly P');

这段代码首先加载了名为“UCSB-CHG/CHIRPS/DAILY”的降水数据集,然后设置了开始年份和结束年份,以及时间格式。接着,通过 ee.List.sequence 方法创建了一个从1990年到2020年的年份序列。

接下来,代码获取了一个矢量边界,并将其转换为几何对象,以指定感兴趣区域。然后,使用 ee.ImageCollection.fromImages 方法按年份遍历降水数据集,并对每年的数据进行累加,得到年度总降水量图像集合。

随后,代码设置了用于生成降水量图表的参数,并使用 ui.Chart.image.seriesByRegion 方法生成了该图表。图表展示了感兴趣区域内年度降水量的变化趋势。

最后,代码计算了年均降水量,并将其裁剪到感兴趣区域,并将结果添加到地图中进行可视化。

整个过程旨在分析感兴趣区域内年度降水量的变化趋势,并提供相应的可视化结果。

在这里插入图片描述
在这里插入图片描述

图像集合变量的使用

annualPrecip是创建的一个图像集合变量(ImageCollection)
在这里插入图片描述
由ee.ImageCollection.fromImages()创建,使用在下方的创建图表需要用到的imageCollection参数中

var chart = ui.Chart.image.seriesByRegion({
  imageCollection: annualPrecip,
  regions: SriLanka,
  reducer: ee.Reducer.mean(),
  band: 'precipitation',
  scale: 2500,
  xProperty: 'system:time_start',
  seriesProperty: 'SITE'
}).setOptions(title)
  .setChartType('ColumnChart');

另外,还可以在后面跟.mean()来对图像集合变量进行统计

var annualMean = annualPrecip.mean().clip(SriLanka);
  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵波波107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值