查看原文
其他

【rgee学习笔记】创建MODIS NDVI时间动画

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-05-17

【rgee学习笔记】创建NDVI动画

前面的推文中讲了如何在R语言中启动Google Earth Engine,下面来一个简单的NDVI动画,对rgee进行实验。

启动rgee等运行环境

加载本文中用到的包,并初始化rgee环境

library(magick)
library(rgee)
library(sf)

ee_Initialize()  #gee初始化

注意!每次都要启动GEE,GEE就好像一台汽车,一定要打着火才能走!ee_Initialize()函数就是这个点火开关,启动起来之后才能正常运行。

GEE启动成功

NDVI动画制作

定义范围

使用sf_as_ee()创建一个ee.Geometry

  • ee.Geometry是GEE的一中几何矢量数据类型
mask <- system.file("shp/arequipa.shp", package = "rgee") %>% 
  st_read(quiet = TRUE) %>% 
  sf_as_ee()
region <- mask$geometry()$bounds()

这样就完成了数据范围的定义,region变量存储的就是范围信息

NDVI数据检索与计算

使用ee.ImageCollection检索数据,本次实验使用了 MODIS Terra Vegetation Indices 16-Day Global 1km 数据集,并使用了NDVI波段。

col <- ee$ImageCollection('MODIS/006/MOD13A2')$select('NDVI')
  • 按日期检索数据并合并为一个数据集
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')
  • 将distinctDOY中一年的数据从总的数据集中筛选出来
filter <- ee$Filter$equals(leftField = 'doy', rightField = 'doy')
  • 将FeatureCollection转为ImageCollection
join <- ee$Join$saveAll('doy_matches')
joinCol <- ee$ImageCollection(join$apply(distinctDOY, col, filter))
  • 对影像数据集求均值
comp <- joinCol$map(function(img) {
  doyCol = ee$ImageCollection$fromImages(
    img$get('doy_matches')
  )
  doyCol$reduce(ee$Reducer$median())
})

NDVI可视化

  • 定义RGB色彩参数
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 %>% # Get Image Collection dates
  '[['("time_start") %>% # Select time_start column
  lubridate::month() %>% # Get the month component of the datetime
  '['(month.abb, .) # subset around month abbreviations
  • 使用ee_utils_gif_*函数作为动图出图方法,渲染出图
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")
运行结果

参考文献

  1. https://r-spatial.github.io/rgee/
  2. C Aybar, Q Wu, L Bautista, R Yali and A Barja (2020) rgee: An R package for interacting with Google Earth Engine Journal of Open Source Software URL https://github.com/r-spatial/rgee/.
  3. 喜大普奔!rgee能用了!R语言也可以使用Google Earth Engine了!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存