安装并加载sf
,然后初始化 Earth Engine R API。
library(magick) library(rgee) library(sf) ee_Initialize()
定义动画帧的区域边界和用于剪辑 NDVI 数据的掩膜。
#这里的语法略有不同 mask <- system.file("shp/arequipa.shp", package = "rgee") %>% st_read(quiet = TRUE) %>% sf_as_ee() region <- mask$geometry()$bounds()
检索 MODIS Terra Vegetation Indices 16-Day Global 1km 数据集ee.ImageCollection
并选择 NDVI 波段。
#选择影像集合波段 col <- ee$ImageCollection('MODIS/006/MOD13A2')$select('NDVI')
按合成日期对图像进行分组
#获取相应的时间属性,按照天和年的标准进行筛选,最后设定一个新的doy时序属性 col <- col$map(function(img) { doy <- ee$Date(img$get('system:time_start'))$getRelative('day', 'year') img$set('doy', doy) }) distinctDOY <- col$filterDate('2013-01-01', '2014-01-01')
定义一个过滤器,用于标识完整集合中的哪些图像与不同 DOY 集合中的 DOY 匹配。
#这个就相当于去两个的交集,也就是用刚才你设定的时间范围,再modis影像中获取这一段时间的影像 filter <- ee$Filter$equals(leftField = 'doy', rightField = 'doy')
定义一个连接;将生成的 FeatureCollection 转换为 ImageCollection。
#存储匹配后的机构所,然后应用 join <- ee$Join$saveAll('doy_matches') joinCol <- ee$ImageCollection(join$apply(distinctDOY, col, filter))
在匹配的 DOY 集合中应用中位数减少。
#获取匹配后的结果然后求中值 comp <- joinCol$map(function(img) { doyCol = ee$ImageCollection$fromImages( img$get('doy_matches') ) doyCol$reduce(ee$Reducer$median()) })
定义 RGB 可视化参数。
#可是化参数设置,这里面和JS完全一样! visParams = list( min = 0.0, max = 9000.0, bands = "NDVI_median", palette = c( 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301' ) )
创建用作动画帧的 RGB 可视化图像。
#创作一个动画函数, rgbVis <- comp$map(function(img) { do.call(img$visualize, visParams) %>% ee$Image$clip(mask) })
定义 GIF 可视化参数。
#设置动画的参数和分辨率和坐标 gifParams <- list( region = region, dimensions = 600, crs = 'EPSG:3857', framesPerSecond = 10 )
获取月份名称
dates_modis_mabbr <- distinctDOY %>% ee_get_date_ic %>% # 获取影像 '[['("time_start") %>% # 选择时间列 lubridate::month() %>% # 获取日期时间的月份部分 '['(month.abb, .) # 月份缩写的子集
使用 ee_utils_gif_* 函数渲染 GIF 动画并添加一些文本。
#animation动画参数设定可以设定标题字号大小动态显示的时间等等 animation <- ee_utils_gif_creator(rgbVis, gifParams, mode = "wb") animation %>% ee_utils_gif_annotate( text = "NDVI: MODIS/006/MOD13A2", size = 15, color = "white", location = "+10+10" ) %>% ee_utils_gif_annotate( text = dates_modis_mabbr, size = 30, location = "+290+350", color = "white", font = "arial", boxcolor = "#000000" ) # -> animation_wtxt # ee_utils_gif_save(animation_wtxt, path = "raster_as_ee.gif")
2月
6月
12月