【更新】rgee: An R package for interacting with Google Earth Engine
rgee: An R package for interacting with Google Earth Engine
分享一个rgee的论文DOI: 10.21105/joss.02272
概况Summary
Google Earth Engine是一个行星尺度的在线遥感数据分析平台。通过网络API即可访问PB级的数据集和海量的计算资源。API提供JavaScript和Python客户端接口。Google提供了一个基于浏览器的JavaScript IDE,能够很方便的进行快速的数据探索和脚本开发,但是它不支持第三方的包,只能基于Google Maps和Google Charts进行可视化。与之对比,Python和Node.js提供了非常方便的第三方库进行开发。我们希望填补R语言和Earth Engine Python API之间的鸿沟,让R语言用户能够很方便的进行开发,能够利用开源、第三方库。
rgee是一个用于R语言的Earth Engine(EE)接口,让用户能够在同一个工作流中充分应用R空间数据处理环境和GEE的遥感大数据分析能力。所有的Earth Engine Python API的类、模型和函数都能够通过reticulate
包来调用。同时rgee也提供了一些新的特性:
新的I/O设计 交互式地图展示 方便的时间序列提取 资源管理接口(asset management interface) 元数据展示
要素Features
增强的I/O接口
rgee提供了一些函数来上传和下载空间对象(表1和表2)。例如,下载矢量(栅格)文件可以使用ee_as_sf
(ee_as_raster
或ee_as_stars
)。在rgee中,每个从服务器下载数据到本地的函数都有使用中介容器(Google Drive或者Google Cloud Storage)或者通过一个REST调用('$getInfo')
直接通过rgee下载数据的限制:
ee$Image
262144像元ee$FeatureCollection
5000个要素
一个实例:
library(tidyverse)
library(rgee)
library(sf)
ee_Initialize()
# Define a Region of interest
roi <- ee$Geometry$Point(-120.06227, 40.64189)$buffer(25000)
# Load TerrADat TerrestrialAIM Dataset
blocks <- ee$FeatureCollection("BLM/AIM/v1/TerrADat/TerrestrialAIM")
subset <- blocks$filterBounds(roi)
# Move an Earth Engine FeatureCollection to their local env
sf_subset <- ee_as_sf(x = subset)
# Create a boxplot with ggplot2
gapPct <- c("_25_50" = "GapPct_25_50","_51_100"="GapPct_51_100",
"101_200" = "GapPct_101_200","200_>" = "GapPct_200_plus")
sf_subset[gapPct] %>%
st_set_geometry(NULL) %>%
as_tibble() %>%
rename(!!gapPct) %>%
pivot_longer(seq_along(gapPct), names_to = "Range") %>%
ggplot(aes(x = Range, y = value, fill = Range)) +
geom_boxplot() +
xlab("") + ylab("% of the plot's soil surface") +
theme_minimal()
地图交互展示
rgee通过Map$addLayer
提供交互式的地图展示,实例如下:
library(rgee)
ee_Initialize()
# Load an ee$Image
image <- ee$Image("LANDSAT/LC08/C01/T1/LC08_044034_20140318")
# Centers the map view
Map$centerObject(image)
# Display the ee$Image
Map$addLayer(
eeObject = image,
visParams = list(bands = c("B4", "B3", "B2"), max = 10000),
name = "SF"
)
时间序列提取
rgee可以基于ee$Geometry
、ee$Feature
、ee$FeatureCollection
和sf
对象从ee$Image
或ee$ImageCollection
对象中提取值。示例如下:
library(ggplot2)
library(tidyr)
library(dplyr)
library(rgee)
library(sf)
ee_Initialize()
# Filter the terraclimate dataset by dates, reproject
# and select only the band "pr".
terraclimate <- ee$ImageCollection("IDAHO_EPSCOR/TERRACLIMATE")$
filterDate("2001-01-01", "2002-01-01")$
map(function(x) x$reproject("EPSG:4326")$select("pr"))
# Define a geometry
nc <- st_read(system.file("shape/nc.shp", package = "sf"))
# Extract the average areal rainfall
ee_nc_rain <- ee_extract(terraclimate, nc, sf = FALSE)
colnames(ee_nc_rain) <- sprintf("%02d", 1:12)
ee_nc_rain$name <- nc$NAME
# Create a data frame in a tidy format and display rainfall values
ee_nc_rain %>%
pivot_longer(-name, names_to = "month", values_to = "pr") %>%
ggplot(aes(x = month, y = pr, group = name, color = pr)) +
geom_line(alpha = 0.4) +
xlab("Month") +
ylab("Precipitation (mm)") +
theme_minimal()
#原始的代码可能会报错,对应替换一下代码,可能是GEE上面数据更新了,对应的代码里面要改一些内容:
# Extract the average areal rainfall
ee_nc_rain <- ee_extract(terraclimate, nc, sf = FALSE)
colnames(ee_nc_rain)[15:26] <- sprintf("%02d", 1:12)
ee_nc_rain$name <- nc$NAME
# Create a data frame in a tidy format and display rainfall values
ee_nc_rain[, 15:27] %>%
pivot_longer(-name, names_to = "month", values_to = "pr") %>%
ggplot(aes(x = month, y = pr, group = name, color = pr)) +
geom_line(alpha = 0.4) +
xlab("Month") +
ylab("Precipitation (mm)") +
theme_minimal()
资源管理接口(asset management interface)
rgee提供了EE data module的接口(ee$data$*
),这个接口让用户可以创建和删除文件夹、管理数据资源、管理取消GEE任务等等。下面是一个将Landsat8影像复制到个人EE asset的实例:
library(rgee)
ee_Initialize()
server_path <- "LANDSAT/LC08/C01/T1/"
user_asset_path <- ee_get_assethome()
ee_manage_copy(
path_asset = paste0(server_path,"/LC08_044034_20140318"),
final_path = paste0(user_asset_path,"/LC08_044034_20140318")
)
元数据展示
ee_print
可以展示或存储所有的EE空间对象元数据。使用ee_print
用户可以了解影像或者要素的波段、空间参考、数据类型、属性等等各种信息。
library(rgee)
ee_Initialize()
l8 <- ee$Image("LANDSAT/LC08/C01/T1/LC08_044034_20140318")
ee_print(l8)
如何获取rgee
rgee是开源软件,在Github上面可以自由获取https://r-spatial.github.io/rgee/
更多资料请查看rgee专辑