其他
【rgee学习笔记】创建MODIS NDVI时间动画
【rgee学习笔记】创建NDVI动画
前面的推文中讲了如何在R语言中启动Google Earth Engine,下面来一个简单的NDVI动画,对rgee进行实验。
启动rgee等运行环境
加载本文中用到的包,并初始化rgee环境
library(magick)
library(rgee)
library(sf)
ee_Initialize() #gee初始化
注意!每次都要启动GEE,GEE就好像一台汽车,一定要打着火才能走!ee_Initialize()
函数就是这个点火开关,启动起来之后才能正常运行。
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")
参考文献
https://r-spatial.github.io/rgee/ 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/. 喜大普奔!rgee能用了!R语言也可以使用Google Earth Engine了!