All Projects → r-spatial → Rgee

r-spatial / Rgee

Licence: other
Google Earth Engine for R

Programming Languages

r
7636 projects

Projects that are alternatives of or similar to Rgee

Intro to spatial analysis
Intro to spatial analysis in R
Stars: ✭ 28 (-90.21%)
Mutual labels:  spatial-analysis
routing-py
🌎 Python library to access all public routing, isochrones and matrix APIs in a consistent manner.
Stars: ✭ 106 (-62.94%)
Mutual labels:  spatial-analysis
st-hadoop
ST-Hadoop is an open-source MapReduce extension of Hadoop designed specially to analyze your spatio-temporal data efficiently
Stars: ✭ 17 (-94.06%)
Mutual labels:  spatial-analysis
sdmTMB
🌎 An R package for spatial and spatiotemporal GLMMs with TMB
Stars: ✭ 92 (-67.83%)
Mutual labels:  spatial-analysis
public-transit-tools
Tools for working with GTFS public transit data in ArcGIS
Stars: ✭ 126 (-55.94%)
Mutual labels:  spatial-analysis
ST-DBSCAN
Implementation of ST-DBSCAN algorithm based on Birant 2007
Stars: ✭ 25 (-91.26%)
Mutual labels:  spatial-analysis
squidpy
Spatial Single Cell Analysis in Python
Stars: ✭ 235 (-17.83%)
Mutual labels:  spatial-analysis
Osmnx
OSMnx: Python for street networks. Retrieve, model, analyze, and visualize street networks and other spatial data from OpenStreetMap.
Stars: ✭ 3,357 (+1073.78%)
Mutual labels:  spatial-analysis
pyinterpolate
Package with spatial analysis and spatial prediction tools
Stars: ✭ 88 (-69.23%)
Mutual labels:  spatial-analysis
newerhoods
A Data Clinic project that aggregates NYC Open Data at the tract-level and uses Machine Learning techniques to re-imagine neighborhood boundaries.
Stars: ✭ 36 (-87.41%)
Mutual labels:  spatial-analysis
sabre
sabre: Spatial Association Between REgionalizations
Stars: ✭ 34 (-88.11%)
Mutual labels:  spatial-analysis
r-geo-course
An introductory course on using R for geographic data visualisation and analysis (in Russian).
Stars: ✭ 18 (-93.71%)
Mutual labels:  spatial-analysis
kuwala
Kuwala is the no-code data platform for BI analysts and engineers enabling you to build powerful analytics workflows. We are set out to bring state-of-the-art data engineering tools you love, such as Airbyte, dbt, or Great Expectations together in one intuitive interface built with React Flow. In addition we provide third-party data into data sc…
Stars: ✭ 474 (+65.73%)
Mutual labels:  spatial-analysis
san
Spatial Modelling for Data Scientists
Stars: ✭ 63 (-77.97%)
Mutual labels:  spatial-analysis
shadow-accrual-maps
Accumulated shadow data computed for New York City
Stars: ✭ 15 (-94.76%)
Mutual labels:  spatial-analysis
Crop-Yield-Prediction-Using-Satellite-Imagery
No description or website provided.
Stars: ✭ 44 (-84.62%)
Mutual labels:  spatial-analysis
MERINGUE
characterizing spatial gene expression heterogeneity in spatially resolved single-cell transcriptomics data with nonuniform cellular densities
Stars: ✭ 33 (-88.46%)
Mutual labels:  spatial-analysis
Geometry
Boost.Geometry - Generic Geometry Library | Requires C++14 since Boost 1.75
Stars: ✭ 282 (-1.4%)
Mutual labels:  spatial-analysis
Geopython
Notebooks and libraries for spatial/geo Python explorations
Stars: ✭ 268 (-6.29%)
Mutual labels:  spatial-analysis
rsMove
Remote Sensing for Movement Ecology
Stars: ✭ 25 (-91.26%)
Mutual labels:  spatial-analysis


Markdownify Markdownify
Google Earth Engine for R

An R binding package for calling Google Earth Engine API from within R. Several functions have been implemented to make simple the connection with the R spatial ecosystem.

Open in Colab R build status Project Status: Active – The project has reached a stable, usable
state and is being actively
developed. codecov License lifecycle status CRAN
status DOI

Installation  • Hello World  • How does rgee work?  • Guides  • Contributing  • Citation  • Credits

What is Google Earth Engine?

Google Earth Engine is a cloud-based platform that allows users to have an easy access to a petabyte-scale archive of remote sensing data and run geospatial analysis on Google's infrastructure. Currently, Google offers support only for Python and JavaScript. rgee will fill the gap starting to provide support to R!. Below you will find the comparison between the syntax of rgee and the two Google-supported client libraries.

JS (Code Editor) Python R
var db = 'CGIAR/SRTM90_V4'
var image = ee.Image(db)
print(image.bandNames())
#> 'elevation'
import ee
ee.Initialize()
db = 'CGIAR/SRTM90_V4'
image = ee.Image(db)
image.bandNames().getInfo()
#> [u'elevation']
library(rgee)
ee_Initialize()
db <- 'CGIAR/SRTM90_V4'
image <- ee$Image(db)
image$bandNames()$getInfo()
#> [1] "elevation"

Quite similar, isn't it?. However, there are additional smaller changes should consider when using Google Earth Engine with R. Please check the consideration section before you start coding!

Installation

Install from CRAN with:

install.packages("rgee")

Install the development versions from github with

library(remotes)
install_github("r-spatial/rgee")

Additionally, rgee depends on the Python packages: numpy and ee. To install them, users can follow any of these three methods:

  1. Use ee_install (Highly recommend for users with no experience with Python environments)
rgee::ee_install()
  1. Use ee_install_set_pyenv (Recommend for users with experience with Python environments)
rgee::ee_install_set_pyenv(
  py_path = "/home/csaybar/.virtualenvs/rgee/bin/python", # Change it for your own Python PATH
  py_env = "rgee" # Change it for your own Python ENV
)

Take into account that the Python PATH you set must have installed the Earth Engine Python API and numpy. The use of miniconda/anaconda is mandatory for Windows users, Linux and MacOS users could also use virtualenv. See reticulate documentation for more details.

Other option, only possible for MacOS and Linux, is just set the Python PATH:

rgee::ee_install_set_pyenv(
  py_path = "/usr/bin/python3", 
  py_env = NULL
)

However, rgee::ee_install_upgrade and reticulate::py_install will not work until you set a Python ENV.

  1. Use the Python PATH setting support that offer Rstudio v.1.4 >. See this tutorial.

After install Python dependencies (and Restart R!!), you might use the function below for checking the status of rgee.

ee_check() # Check non-R dependencies

Sync rgee with other Python packages

Integrate rgee with geemap.

library(reticulate)
library(rgee)

# 1. Initialize the Python Environment  
ee_Initialize()

# 2. Install geemap in the same Python ENV that use rgee
py_install("geemap")
gm <- import("geemap")

Upgrade the earthengine-api

library(rgee)
ee_Initialize()
ee_install_upgrade()

Package Conventions

  • All rgee functions have the prefix ee_. Auto-completion is your friend :).
  • Full access to the Earth Engine API with the prefix ee$....
  • Authenticate and Initialize the Earth Engine R API with ee_Initialize. It is necessary once by session!.
  • rgee is "pipe-friendly", we re-exports %>%, but rgee does not require its use.

Hello World

1. Compute the trend of night-time lights (JS version)

Authenticate and Initialize the Earth Engine R API.

library(rgee)
ee_Initialize()

Adds a band containing image date as years since 1991.

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

Map the time band creation helper over the night-time lights collection.

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

Compute a linear fit over the series of values at each pixel, visualizing the y-intercept in green, and positive/negative slopes as red/blue.

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

Create a interactive visualization!

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"
)

rgee_01

2. Extract precipitation values

Install and load tidyverse and sf R package, after that, initialize the Earth Engine R API.

library(tidyverse)
library(rgee)
library(sf)

ee_Initialize()

Read the nc shapefile.

nc <- st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

Map each image from 2001 to extract the monthly precipitation (Pr) from the Terraclimate dataset

terraclimate <- ee$ImageCollection("IDAHO_EPSCOR/TERRACLIMATE") %>% 
  ee$ImageCollection$filterDate("2001-01-01", "2002-01-01") %>% 
  ee$ImageCollection$map(function(x) x$select("pr")) %>% # Select only precipitation bands
  ee$ImageCollection$toBands() %>% # from imagecollection to image
  ee$Image$rename(sprintf("%02d",1:12)) # rename the bands of an image

Extract monthly precipitation values from the Terraclimate ImageCollection through ee_extract. ee_extract works similar to raster::extract, you just need to define: the ImageCollection object (x), the geometry (y), and a function to summarize the values (fun).

ee_nc_rain <- ee_extract(x = terraclimate, y = nc["NAME"], sf = FALSE)

Use ggplot2 to generate a beautiful static plot!

ee_nc_rain %>%
  pivot_longer(-NAME, names_to = "month", values_to = "pr") %>%
  mutate(month, month=gsub("X", "", month)) %>% 
  ggplot(aes(x = month, y = pr, group = NAME, color = pr)) +
  geom_line(alpha = 0.4) +
  xlab("Month") +
  ylab("Precipitation (mm)") +
  theme_minimal()

3. Create an NDVI-animation (JS version)

Install and load sf, after that, initialize the Earth Engine R API.

library(magick)
library(rgee)
library(sf)

ee_Initialize()

Define the regional bounds of animation frames and a mask to clip the NDVI data by.

mask <- system.file("shp/arequipa.shp", package = "rgee") %>% 
  st_read(quiet = TRUE) %>% 
  sf_as_ee()
region <- mask$geometry()$bounds()

Retrieve the MODIS Terra Vegetation Indices 16-Day Global 1km dataset as an ee.ImageCollection and select the NDVI band.

col <- ee$ImageCollection('MODIS/006/MOD13A2')$select('NDVI')

Group images by composite date

col <- col$map(function(img) {
  doy <- ee$Date(img$get('system:time_start'))$getRelative('day', 'year')
  img$set('doy', doy)
})
distinctDOY <- col$filterDate('2013-01-01', '2014-01-01')

Define a filter that identifies which images from the complete collection match the DOY from the distinct DOY collection.

filter <- ee$Filter$equals(leftField = 'doy', rightField = 'doy')

Define a join; convert the resulting FeatureCollection to an ImageCollection.

join <- ee$Join$saveAll('doy_matches')
joinCol <- ee$ImageCollection(join$apply(distinctDOY, col, filter))

Apply median reduction among matching DOY collections.

comp <- joinCol$map(function(img) {
  doyCol = ee$ImageCollection$fromImages(
    img$get('doy_matches')
  )
  doyCol$reduce(ee$Reducer$median())
})

Define RGB visualization parameters.

visParams = list(
  min = 0.0,
  max = 9000.0,
  bands = "NDVI_median",
  palette = c(
    'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
    '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
    '012E01', '011D01', '011301'
  )
)

Create RGB visualization images for use as animation frames.

rgbVis <- comp$map(function(img) {
  do.call(img$visualize, visParams) %>% 
    ee$Image$clip(mask)
})

Define GIF visualization parameters.

gifParams <- list(
  region = region,
  dimensions = 600,
  crs = 'EPSG:3857',
  framesPerSecond = 10
)

Use ee_utils_gif_* functions to render the GIF animation and add some texts.

animation <- ee_utils_gif_creator(rgbVis, gifParams, mode = "wb")
animation %>% 
  ee_utils_gif_annotate(
    text = "NDVI: MODIS/006/MOD13A2",
    size = 15, color = "white",
    location = "+10+10"
  ) %>% 
  ee_utils_gif_annotate(
    text = dates_modis_mabbr, 
    size = 30, 
    location = "+290+350",
    color = "white", 
    font = "arial",
    boxcolor = "#000000"
  ) # -> animation_wtxt

# ee_utils_gif_save(animation_wtxt, path = "raster_as_ee.gif")

How does rgee work?

rgee is not a native Earth Engine API like the Javascript or Python client, to do this would be extremely hard, especially considering that the API is in active development. So, how is it possible to run Earth Engine using R? the answer is reticulate. reticulate is an R package designed to allow a seamless interoperability between R and Python. When an Earth Engine request is created in R, reticulate will transform this piece into Python. Once the Python code is obtained, the Earth Engine Python API transform the request to a JSON format. Finally, the request is received by the Google Earth Engine Platform thanks to a Web REST API. The response will follow the same path.

workflow

Quick Start User's Guide for rgee

Created by: - EN and POR: Andres Luiz Lima Costa https://bit.ly/3p1DFm9 - SPA: Antony Barja Ingaruca https://barja8.github.io/

Code of Conduct

Please note that the rgee project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Contributing Guide

👍 Thanks for taking the time to contribute! 🎉👍 Please review our Contributing Guide.

Share the love

Think rgee is useful? Let others discover it, by telling them in person via Twitter or a blog post.

Using rgee for a paper you are writing? Consider citing it

citation("rgee")
To cite rgee in publications use:
  
  C Aybar, Q Wu, L Bautista, R Yali and A Barja (2020) rgee: An R
  package for interacting with Google Earth Engine Journal of Open
  Source Software URL https://github.com/r-spatial/rgee/.

A BibTeX entry for LaTeX users is

@Article{,
  title = {rgee: An R package for interacting with Google Earth Engine},
  author = {Cesar Aybar and Quisheng Wu and Lesly Bautista and Roy Yali and Antony Barja},
  journal = {Journal of Open Source Software},
  year = {2020},
}

Credits

We want to offer a special thanks 🙌 👏 to Justin Braaten for his wise and helpful comments in the whole development of rgee. As well, we would like to mention the following third-party R/Python packages for contributing indirectly to the improvement of rgee:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].