RでGoogle Earth Engineを操作できるようにする
変更履歴・概要
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
日本語での説明は以下のサイトがあります。
なお,データを見るだけなら,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