查看原文
其他

【更新无法自动下载数据问题】rgee能用了!R语言也可以使用Google Earth Engine了!

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

喜大普奔!rgee能用了!R语言也可以使用Google Earth Engine了!

去年的时候曾经写过一个推文,关于rgee,但是由于rgee的不知道是BUG还是啥问题,认证一直不成功,没有办法愉快的使用,今天我收到了来自rgee的作者之一的邮件,告诉我了这个BUG已经有了解决方法,我再次试验了rgee,成功运行!

rgee安装

我使用了R4.0.3版本,建议大家使用最新的R语言版本,R4.0版本我目前已经用了几个月,感觉和3差别不大,以前的一些包也都可以使用,强烈大家更新R4.0最新版本。

rgee安装

安装RGEE环境,使用下面的代码,自动安装,需要偶尔手动输入一下Y或者其它参数,根据提示输入即可:

library(rgee)
ee_install()

代码执行开始,会弹出下面的一些提示:

Y,写入系统环境变量
1重启R语言

RGEE启动

rgee初始化,运行下面的代码开始启动RGEE,注意要翻墙!:

library(rgee)
ee_Initialize()

启动后会弹出一个网页,让你登陆GEE,生成一串启动代码:

开始启动
复制代码粘贴到R里面,贴到上图输入的地方

受网络影响可能会卡一下,我重启了一下,重新运行了启动代码,显示启动成功!

试验代码:

createTimeBand <-function(img) {
  year <- ee$Date(img$get('system:time_start'))$get('year')$subtract(1991L)
  ee$Image(year)$byte()$addBands(img)
}

collection <- ee$
  ImageCollection('NOAA/DMSP-OLS/NIGHTTIME_LIGHTS')$
  select('stable_lights')$
  map(createTimeBand)

col_reduce <- collection$reduce(ee$Reducer$linearFit())
col_reduce <- col_reduce$addBands(
  col_reduce$select('scale'))
ee_print(col_reduce)

Map$setCenter(9.08203, 47.39835, 3)
Map$addLayer(
  eeObject = col_reduce,
  visParams = list(
    bands = c("scale""offset""scale"),
    min = 0,
    max = c(0.18, 20, -0.18)
  ),
  name = "stable lights trend"
)
运行成功!

常见问题

  • ConnectionRefusedError: [WinError 10061] 鐢变簬鐩爣璁$畻鏈虹Н鏋佹嫆缁濓紝鏃犳硶杩炴帴銆
ConnectionRefusedError: [WinError 10061] 鐢变簬鐩爣璁$畻鏈虹Н鏋佹嫆缁濓紝鏃犳硶杩炴帴銆

这个问题最常见,原因嘛,国内用户应该都听说过“翻墙”,出现这个就是翻墙没成功,挂墙头上了,换个靠谱的梯子吧,一定要开启全局翻墙,仅仅浏览器翻出去是没用的。

  • Error in py_call_impl(callable, dotskeywords) : Evaluation error: Unable to access object (object is from previous session and is now invalid).
有rgee的代码,打开Rstudio就报错

当一个R工程中带有rgee代码时,打开就出现上面的报错,这是为啥呢?因为你R语言环境里存了东西,记住,使用rgee的时候,除了代码,什么都不要保存!!!除了代码,什么都不要保存!!!除了代码,什么都不要保存!!!

只要R语言环境中有代码以外的东西,打开rgee工程文件的时候就会报错,所以,记得,使用rgee的时候,除了代码,其它一律不保存!当然了,运算结果你自己保留好,但是R语言环境里的中间过程不能留,否则下次打开会出错。

这种情况下怎么办呢?打扫干净运行环境,重启R就好

打扫干净重启R
  • EEException: Request payload size exceeds the limit: 10485760 bytes.
    • 数据量太大了,需要减小点范围

通过Google Drive下载数据报错

  • Error:Don't know how to coerce an object of classinto a
通过Google Drive下载数据报错
  • 两个原因:
  1. googledrive包过期了,需要更新一下
  2. ee_Initialize(drive = T)启动rgee的时候没有给tidyverse API赋予Google Drive权限
一定要给这个权限,不然rgee没法通过Google Drive自动下载数据

具体做法:

  1. ee_clean_credentials()删除Google Earth Engine认证信息
  2. ee_Initialize(drive = T)重新进行认证,如上图所示,一定要赋予tidyverse API查看、修改、创建、删除所有Google云端硬盘文件权限。

参考文献

  1. https://github.com/r-spatial/rgee
  2. rgee从没入门到放弃
  3. R语言安装部署基础
  4. 【文献阅读】Google Earth Engine:人人可用的行星级地理空间分析平台
  5. https://github.com/r-spatial/rgee/issues/175
  6. https://github.com/r-spatial/rgee/issues/170

点击阅读原文跳转Github rgee主页


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

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