🔭

RでGoogle Earth Engineを操作できるようにする

2024/02/01に公開
変更履歴・概要

2024/3/28 更新

rgeeライブラリを1.1.5から1.1.7に更新したので,対応するearthengine-apiのバージョンを0.1.323から0.1.370に変更。

宙畑の衛星データ分析におススメの言語は?言語別の特徴まとめとElixir紹介へのリンクを追加。

2024/2/1 初版

2023年6~9月に行った環境構築作業のメモを整理したものです。一部足りないところや分かりにくいところがあるかもしれません。また,それぞれの環境によって違いがあるかもしれませんが,ご容赦ください。

できるようになること

RからGoogle Earth Engine(GEE)を操作できる環境を構築します。

Google Earth Engine(GEE)って何?

Googleから提供される,地球観測衛星が取得した大量のデータを,クラウド上で(研究・教育・非営利目的であれば)無料で解析・利用できるサービスです。

https://earthengine.google.com/

https://developers.google.com/earth-engine

2023年10月にはGEEに関する書籍もでています。

Cloud-Based Remote Sensing with Google Earth Engine

日本語での説明は以下のサイトがあります。

Hiroki MiZUOCHIさんのページ

宙畑のページ

片木仁さん・奈良原顕郎さんのページ

sindicumさんのページ

なお,データを見るだけなら,Earth Engine Explorerで可能です。使い方は,Google Earth Engine の概要を参考にしてください。

ほかにも,RESTEC(一般財団法人リモート・センシング技術センター)が作成しているVEGAでも,LandsatシリーズやSentinelシリーズなどの衛星データを見ることができます。

Rで操作するためには

GoogleからはJavaScriptとPythonがサポートされています。Rから操作するには,rgeeライブラリを利用します。rgeeライブラリはPython経由でGEEにアクセスすることを可能にしたライブラリです。

https://cran.r-project.org/web/packages/rgee/index.html

https://github.com/r-spatial/rgee

https://qiita.com/iwasaki_kenichi/items/b4db19204cf4343e82ce

なお,宙畑に衛星データ分析に用いられる言語について説明記事がありました。Rについても言及があるので,参考にしてください。

衛星データ分析におススメの言語は?言語別の特徴まとめとElixir紹介

rgeeライブラリのインストール

Rへはrgeeライブラリは以下によりインストールできます。

install.packages('rgee')

ついでに,rgeeExtraライブラリもインストールしておきます。

https://github.com/r-earthengine/rgeeExtra

remotes::install_github("r-earthengine/rgeeExtra")

ただし,rgeeライブラリを利用するには以下の条件を満たす必要があります。

  • GEEへのGoogleアカウント登録
  • Python環境の構築

GEEへのアカウント登録

GEEを利用するにはGoogleアカウントが必要ですので,まずは用意してください。

GEEへのアカウント登録は,sindicumさんのGoogle Earth EngineとPythonで始める衛星データ利用入門第2章に説明があるので参考にしてください。概要としては,GEEのWebページにアクセスし,右上のGet Startedをクリックして,画面の指示にしたがってCloud Projectを作成します。

成功したらEarth Engine Code Editorが立ち上がります。JavaScriptで操作するための画面で,普段は使いませんので,詳しい説明は省略します。

Python 環境の構築

最初に書いたとおりrgeeライブラリは(reticulateライブラリを利用して)PythonのEarth Engine APIからアクセスします。そのため,GEEにアクセスできるPython環境を用意する必要があります。

rgeeライブラリの説明では,Pythonの操作経験がない場合には以下で構築することが推奨されています。

rgee::ee_install(py_env = "rgee")

ここでは,(既にcondaをインストールしてあったので)独自にPython環境を構築し,Rから操作できるようにします。インストールはGEEの以下の説明を参考にしました。

https://developers.google.com/earth-engine/guides/python_install

https://developers.google.com/earth-engine/guides/python_install-conda

まず,condaをインストールします。私の環境はAnacondaで構築していますが,Minicondaでもいいと思います。インストール方法は他のサイトでたくさん紹介されているので,そちらを参考にしてください。

次に,GEE用の仮想環境を構築します。condaのコマンドで以下のとおり入力していきます。最後のeemontは必須ではありませんが,rgeeExtraライブラリをインストールすると利用可能なeeExtraの読み込みが,EEextra_PYTHON_PACKAGE$を介さずに利用できます(https://eemont.readthedocs.io/en/latest/guide/eemontR.html)。

conda create -n r_gee python=3.8.16
conda activate r_gee
conda install -c conda-forge earthengine-api==0.1.323 # rgee1.1.7の検証が0.1.323のため。
conda install numpy # earthengine-apiにはnumpyが必要
conda install -c conda-forge eemont #ついでにインストール

GEEへのアクセス認証を行うため,r_gee仮想環境で以下のコマンドを入力し,求められるとおりに操作していってください。

earthengine authenticate

Python環境を構築できたかは,r_gee仮想環境でPythonを起動して以下のとおり試してみてください。なお,プロジェクト名にはGEEへのアカウント登録で入力したproject-IDを入力します(https://developers.google.com/earth-engine/guides/access)。

import ee
ee.Initialize(project='プロジェクト名') 
print(ee.Image("NASA/NASADEM_HGT/001").get("title").getInfo())

rgeeライブラリでの環境構築

次に,以下でrgeeライブラリの環境を構築します。なお,RStudio(V1.4以上)のPythonパスの設定でも可能だったようです。

rgee::ee_install_set_pyenv(
  py_path = "C:/Users/####/anaconda3/envs/r_gee", # Change it for your own Python PATH
  py_env = "r_gee" # Change it for your own Python ENV
)

GEEを始めるには,ee_Initialize(project = 'プロジェクト名')とします。なお,データ保存用にGoogle Driveを利用するにはee_Initialize(project = 'プロジェクト名', drive=T)とします(最初にはtokenの設定が必要ですが,特に意識しなくても,表示される画面に従えば設定ができるようです)。

インストール後には以下で環境を確認できます。

rgee::ee_check_python()
rgee::ee_check_python_packages()
rgee::ee_check_credentials()

試してみよう

Earth Engine JavaScript API Documentationをもとに,サンフランシスコ湾周辺のLandsat8による撮影画像を表示させてみましょう。

library(rgee)
library(leaflet) # attributionの挿入に必要
ee_Initialize(project = 'プロジェクト名')
# Load an image.
landsat <- ee$Image("LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318")
# Define the visualization parameters.
vizParams <- list(
  bands = c("B5", "B4", "B3"),
  min = 0,
  max = 0.5,
  gamma = c(0.95, 1.1, 1)
)
# Center the map and display the image.
Map$setCenter(lon = -122.1899, lat = 37.5010, zoom = 10) # San Francisco Bay
Map$addLayer(landsat, vizParams, "false color composite") %>%
  addTiles(urlTemplate = "", attribution = '| Landsat-8 image courtesy of the U.S. Geological Survey')


Session info
sessionInfo()
## R version 4.3.3 (2024-02-29 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Japanese_Japan.utf8  LC_CTYPE=Japanese_Japan.utf8    LC_MONETARY=Japanese_Japan.utf8
## [4] LC_NUMERIC=C                    LC_TIME=Japanese_Japan.utf8    
## 
## time zone: Etc/GMT-9
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] here_1.0.1     fs_1.6.3       rmarkdown_2.25 leaflet_2.2.1  rgee_1.1.7    
## 
## loaded via a namespace (and not attached):
##  [1] xfun_0.42               raster_3.6-26           htmlwidgets_1.6.4       remotes_2.4.2.1        
##  [5] websocket_1.4.1         processx_3.8.3          lattice_0.22-5          leaflet.providers_2.0.0
##  [9] vctrs_0.6.5             tools_4.3.3             crosstalk_1.2.1         ps_1.7.6               
## [13] generics_0.1.3          parallel_4.3.3          rgl_1.2.8               tibble_3.2.1           
## [17] proxy_0.4-27            fansi_1.0.6             highr_0.10              pkgconfig_2.0.3        
## [21] Matrix_1.6-5            KernSmooth_2.23-22      webshot_0.5.5           lifecycle_1.0.4        
## [25] compiler_4.3.3          stringr_1.5.1           progress_1.2.3          chromote_0.2.0         
## [29] terra_1.7-71            codetools_0.2-19        leafsync_0.1.0          htmltools_0.5.7        
## [33] class_7.3-22            yaml_2.3.8              Rttf2pt1_1.3.12         later_1.3.2            
## [37] jquerylib_0.1.4         pillar_1.9.0            crayon_1.5.2            extrafontdb_1.0        
## [41] ellipsis_0.3.2          classInt_0.4-10         magick_2.8.3            iterators_1.0.14       
## [45] foreach_1.5.2           webshot2_0.1.1          tidyselect_1.2.0        digest_0.6.34          
## [49] stringi_1.8.3           dplyr_1.1.4             sf_1.0-15               extrafont_0.19         
## [53] rprojroot_2.0.4         fastmap_1.1.1           grid_4.3.3              cli_3.6.1              
## [57] magrittr_2.0.3          base64enc_0.1-3         utf8_1.2.4              leafem_0.2.3           
## [61] e1071_1.7-14            withr_3.0.0             promises_1.2.1          prettyunits_1.2.0      
## [65] sp_2.1-3                lubridate_1.9.3         timechange_0.3.0        rayshader_0.37.3       
## [69] reticulate_1.35.0       png_0.1-8               hms_1.1.3               evaluate_0.23          
## [73] knitr_1.45              doParallel_1.0.17       rlang_1.1.3             Rcpp_1.0.12            
## [77] glue_1.7.0              DBI_1.2.2               rstudioapi_0.15.0       jsonlite_1.8.8         
## [81] R6_2.5.1                units_0.8-5

Discussion