查看原文
其他

【更新】rgee: An R package for interacting with Google Earth Engine

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

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_sfee_as_rasteree_as_stars)。在rgee中,每个从服务器下载数据到本地的函数都有使用中介容器(Google Drive或者Google Cloud Storage)或者通过一个REST调用('$getInfo')

直接通过rgee下载数据的限制:

  • ee$Image262144像元
  • ee$FeatureCollection5000个要素
rgee提供的数据上传和下载函数

一个实例:

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"
)
Landsat8标准假彩色合成

时间序列提取

rgee可以基于ee$Geometryee$Featureee$FeatureCollectionsf对象从ee$Imageee$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()
2011年北开罗莱纳降水

资源管理接口(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)
Landsat8元数据信息

如何获取rgee

rgee是开源软件,在Github上面可以自由获取https://r-spatial.github.io/rgee/

更多资料请查看rgee专辑


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

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