A curated list of open technology projects to sustain a stable climate, energy supply, biodiversity and natural resources.

rsi

Code for Retriving STAC Information, addressing Repeated Spatial Infelicities and interfacing with Rsome Spectral Indices.
https://github.com/permian-global-research/rsi

Category: Natural Resources
Sub Category: Soil and Land

Last synced: about 8 hours ago
JSON representation

Repository metadata

Code for Retrieving STAC Information, addressing Repeated Spatial Infelicities and interfacing with Rsome Spectral Indices

README.Rmd

          ---
output: github_document
---



```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)
library(tibble)
```

# rsi rsi website


[![R-CMD-check](https://github.com/Permian-Global-Research/rsi/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/Permian-Global-Research/rsi/actions/workflows/R-CMD-check.yaml)
[![Codecov test coverage](https://codecov.io/gh/Permian-Global-Research/rsi/branch/main/graph/badge.svg)](https://app.codecov.io/gh/Permian-Global-Research/rsi?branch=main)
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/license/apache-2-0)
[![Lifecycle: maturing](https://img.shields.io/badge/lifecycle-maturing-blue.svg)](https://lifecycle.r-lib.org/articles/stages.html#maturing)
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
[![CRAN status](https://www.r-pkg.org/badges/version/rsi)](https://CRAN.R-project.org/package=rsi)
[![DOI](https://zenodo.org/badge/682237263.svg)](https://zenodo.org/doi/10.5281/zenodo.10926857)
[![Status at rOpenSci Software Peer Review](https://badges.ropensci.org/636_status.svg)](https://github.com/ropensci/software-review/issues/636)


The goal of rsi is to address several **r**epeated **s**patial **i**nfelicities, by providing utility functions that save you typing and help avoid **r**epetitive **s**tress **i**njuries. Specifically, rsi provides:

+ An interface to the **R**some -- excuse me, [_Awesome_ Spectral Indices project](https://github.com/awesome-spectral-indices/awesome-spectral-indices), providing the list of indices directly in R as a friendly tibble,
+ A method for efficiently _calculating_ those awesome spectral indices using local rasters, enabling **r**apid **s**pectral **i**nference,
+ A method for downloading STAC data -- excuse me, **r**etriving **S**TAC **i**nformation -- from any STAC server, with additional helpers for downloading Landsat, Sentinel-1, and Sentinel-2 data from free and public STAC servers providing **r**apid **s**atellite **i**magery, 
+ A **r**aster **s**tack **i**ntegration method for combining multiple rasters containing distinct data sets into a single raster stack.

The functions in rsi are designed around letting you use the tools you're familiar with to process raster data using compute that you control -- whether that means grabbing imagery with your laptop to add some context to a map, or grabbing tranches of data to a virtual server hosted near your data provider for lightning fast downloads. The outputs from rsi functions are standard objects -- usually the file paths of raster files saved to your hard drive -- meaning it's easy to incorporate rsi into broader spatial data processing workflows.

## Installation

You can install rsi via:

``` r
install.packages("rsi")
```

You can install the development version of rsi from [GitHub](https://github.com/Permian-Global-Research/rsi) using [pak](https://pak.r-lib.org/):

``` r
# install.packages("pak")
pak::pak("Permian-Global-Research/rsi")
```

## Example

The `spectral_indices()` function provides a tibble with data from the [Awesome Spectral Indices project](https://github.com/awesome-spectral-indices/awesome-spectral-indices):

```{r}
library(rsi)

spectral_indices()
```

The first time `spectral_indices()` is called it will download the most up-to-date version of the spectral indices JSON file, and then write the resulting table to a cache file in `tools::R_user_dir("rsi")`. After that, `spectral_indices()` will only download a new file if the cache is older than 1 day, or if the `update_cache` argument is `TRUE`, in order to provide the most up-to-date data as quickly as possible. If offline, `spectral_indices()` will always fall back to the cache or, if no cache file exists, a (possibly out-of-date) data file included in rsi itself.

Separately, the `get_stac_data()` function provides a generic interface for downloading composite images from any accessible STAC catalog. For instance, we could download a cloud-masked composite of Landsat's visible layers using `get_stac_data()` and a few helper functions from rsi:

```{r}
aoi <- sf::st_point(c(-74.912131, 44.080410))
aoi <- sf::st_set_crs(sf::st_sfc(aoi), 4326)
aoi <- sf::st_buffer(sf::st_transform(aoi, 5070), 1000)

landsat_image <- get_stac_data(
  aoi,
  start_date = "2022-06-01",
  end_date = "2022-06-30",
  pixel_x_size = 30,
  pixel_y_size = 30,
  asset_names = c("red", "blue", "green"),
  stac_source = "https://planetarycomputer.microsoft.com/api/stac/v1/",
  collection = "landsat-c2-l2",
  mask_band = "qa_pixel",
  mask_function = landsat_mask_function,
  output_filename = tempfile(fileext = ".tif"),
  item_filter_function = landsat_platform_filter,
  platforms = c("landsat-9", "landsat-8")
)

terra::plot(terra::rast(landsat_image))
```

For common data sets, rsi also provides helper functions which
provide most of these arguments for you. For instance, that `get_stac_data()`
call could be as simple as:

```{r}
landsat_image <- get_landsat_imagery(
  aoi,
  start_date = "2022-06-01",
  end_date = "2022-08-30",
  output_filename = tempfile(fileext = ".tif")
)
terra::plot(terra::rast(landsat_image))
```

Note that we've been plotting each band individually so far by calling `terra::plot()`. We could also use `terra::plotRGB()` (after `terra::stretch()`ing the band values) to see what this mosaic of images would look like to the human eye:

```{r}
landsat_image |>
  terra::rast(lyrs = c("R", "G", "B")) |>
  terra::stretch() |>
  terra::plotRGB()
```

By default, these functions download data from Microsoft's Planetary Computer
API, using a number of configuration options set in `rsi_band_mapping` objects
provided by the package. You can see these default configuration options by 
printing the band mapping objects, and can adjust them through arguments
to any `get_*` function in the package.

```{r}
landsat_band_mapping$planetary_computer_v1
```

We can put these pieces together and calculate as many spectral indices as we can based on our downloaded Landsat imagery. The `calculate_indices()` function, well, calculates indices, using subsets of our `spectral_indices()` data frame:

```{r} 
available_indices <- filter_bands(
  bands = names(terra::rast(landsat_image))
)

indices <- calculate_indices(
  landsat_image,
  available_indices,
  output_filename = tempfile(fileext = ".tif")
)

# Plot the first handful of spatial indices
terra::plot(terra::rast(indices))
```

And last but not least, rsi includes a utility for efficiently combining rasters containing different data about the same location into a [VRT](https://gdal.org/en/latest/drivers/raster/vrt.html), which allows programs like GDAL to treat these separate data sources as a single file. For instance, we can combine our Landsat imagery with the derived indices:

```{r}
raster_stack <- stack_rasters(
  c(landsat_image, indices),
  tempfile(fileext = ".vrt")
)

# The first few panels are now Landsat measurements, not indices:
terra::plot(terra::rast(raster_stack))
```

This can be extremely useful as a way to create predictor bricks and other multi-band rasters from various data sources.

## Contributing

We love contributions! See our [contribution guide](https://github.com/Permian-Global-Research/rsi/blob/main/.github/CONTRIBUTING.md) for pointers on how to make your contribution as easy to accept as possible -- in particular, consider [opening an issue](https://github.com/Permian-Global-Research/rsi/issues/new/choose) with a [minimal reprex](https://www.tidyverse.org/help/#reprex) to make sure that we understand what your changes are meant to do.

## License

Copyright 2023 Permian Global Research, Limited.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 

You may obtain a copy of the License at:

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

        

Citation (CITATION.cff)

# -----------------------------------------------------------
# CITATION file created with {cffr} R package, v0.5.0
# See also: https://docs.ropensci.org/cffr/
# -----------------------------------------------------------
 
cff-version: 1.2.0
message: 'To cite package "rsi" in publications use:'
type: software
license: Apache-2.0
title: 'rsi: Efficiently Retrieve and Process Satellite Imagery'
version: 0.2.0.9000
doi: 10.5281/zenodo.10926857
abstract: Downloads spatial data from spatiotemporal asset catalogs ('STAC'), computes
  standard spectral indices from the Awesome Spectral Indices project (Montero et
  al. (2023) <doi:10.1038/s41597-023-02096-0>) against raster data, and glues the
  outputs together into predictor bricks. Methods focus on interoperability with the
  broader spatial ecosystem; function arguments and outputs use classes from 'sf'
  and 'terra', and data downloading functions support complex 'CQL2' queries using
  'rstac'.
authors:
- family-names: Mahoney
  given-names: Michael
  email: [email protected]
  orcid: https://orcid.org/0000-0003-2402-304X
preferred-citation:
  type: generic
  title: 'rsi: Efficiently Retrieve and Process Satellite Imagery'
  authors:
  - family-names: Mahoney
    given-names: Michael
    email: [email protected]
    orcid: https://orcid.org/0000-0003-2402-304X
  url: https://permian-global-research.github.io/rsi/
  doi: 10.5281/zenodo.10926857
  version: 0.2.0.9000
repository: https://CRAN.R-project.org/package=rsi
repository-code: https://github.com/Permian-Global-Research/rsi
url: https://permian-global-research.github.io/rsi/
contact:
- family-names: Mahoney
  given-names: Michael
  email: [email protected]
  orcid: https://orcid.org/0000-0003-2402-304X
references:
- type: software
  title: 'R: A Language and Environment for Statistical Computing'
  notes: Depends
  url: https://www.R-project.org/
  authors:
  - name: R Core Team
  location:
    name: Vienna, Austria
  year: '2024'
  institution:
    name: R Foundation for Statistical Computing
  version: '>= 4.0'
- type: software
  title: future.apply
  abstract: 'future.apply: Apply Function to Elements in Parallel using Futures'
  notes: Imports
  url: https://future.apply.futureverse.org
  repository: https://CRAN.R-project.org/package=future.apply
  authors:
  - family-names: Bengtsson
    given-names: Henrik
    email: [email protected]
    orcid: https://orcid.org/0000-0002-7579-5165
  year: '2024'
- type: software
  title: glue
  abstract: 'glue: Interpreted String Literals'
  notes: Imports
  url: https://glue.tidyverse.org/
  repository: https://CRAN.R-project.org/package=glue
  authors:
  - family-names: Hester
    given-names: Jim
    orcid: https://orcid.org/0000-0002-2739-7082
  - family-names: Bryan
    given-names: Jennifer
    email: [email protected]
    orcid: https://orcid.org/0000-0002-6983-2759
  year: '2024'
- type: software
  title: httr
  abstract: 'httr: Tools for Working with URLs and HTTP'
  notes: Imports
  url: https://httr.r-lib.org/
  repository: https://CRAN.R-project.org/package=httr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  year: '2024'
- type: software
  title: jsonlite
  abstract: 'jsonlite: A Simple and Robust JSON Parser and Generator for R'
  notes: Imports
  url: https://jeroen.r-universe.dev/jsonlite
  repository: https://CRAN.R-project.org/package=jsonlite
  authors:
  - family-names: Ooms
    given-names: Jeroen
    email: [email protected]
    orcid: https://orcid.org/0000-0002-4035-0289
  year: '2024'
- type: software
  title: lifecycle
  abstract: 'lifecycle: Manage the Life Cycle of your Package Functions'
  notes: Imports
  url: https://lifecycle.r-lib.org/
  repository: https://CRAN.R-project.org/package=lifecycle
  authors:
  - family-names: Henry
    given-names: Lionel
    email: [email protected]
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
    orcid: https://orcid.org/0000-0003-4757-117X
  year: '2024'
- type: software
  title: proceduralnames
  abstract: 'proceduralnames: Several Methods for Procedural Name Generation'
  notes: Imports
  url: https://mikemahoney218.github.io/proceduralnames/
  repository: https://CRAN.R-project.org/package=proceduralnames
  authors:
  - family-names: Mahoney
    given-names: Michael
    email: [email protected]
    orcid: https://orcid.org/0000-0003-2402-304X
  year: '2024'
- type: software
  title: rlang
  abstract: 'rlang: Functions for Base Types and Core R and ''Tidyverse'' Features'
  notes: Imports
  url: https://rlang.r-lib.org
  repository: https://CRAN.R-project.org/package=rlang
  authors:
  - family-names: Henry
    given-names: Lionel
    email: [email protected]
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  year: '2024'
- type: software
  title: rstac
  abstract: 'rstac: Client Library for SpatioTemporal Asset Catalog'
  notes: Imports
  url: https://brazil-data-cube.github.io/rstac/
  repository: https://CRAN.R-project.org/package=rstac
  authors:
  - family-names: Simoes
    given-names: Rolf
    email: [email protected]
  - family-names: Carvalho
    given-names: Felipe
    email: [email protected]
  - name: Brazil Data Cube Team
    email: [email protected]
  year: '2024'
- type: software
  title: sf
  abstract: 'sf: Simple Features for R'
  notes: Imports
  url: https://r-spatial.github.io/sf/
  repository: https://CRAN.R-project.org/package=sf
  authors:
  - family-names: Pebesma
    given-names: Edzer
    email: [email protected]
    orcid: https://orcid.org/0000-0001-8049-7069
  year: '2024'
- type: software
  title: terra
  abstract: 'terra: Spatial Data Analysis'
  notes: Imports
  url: https://rspatial.org/
  repository: https://CRAN.R-project.org/package=terra
  authors:
  - family-names: Hijmans
    given-names: Robert J.
    email: [email protected]
    orcid: https://orcid.org/0000-0001-5872-2872
  year: '2024'
- type: software
  title: tibble
  abstract: 'tibble: Simple Data Frames'
  notes: Imports
  url: https://tibble.tidyverse.org/
  repository: https://CRAN.R-project.org/package=tibble
  authors:
  - family-names: Müller
    given-names: Kirill
    email: [email protected]
    orcid: https://orcid.org/0000-0002-1416-3412
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  year: '2024'
- type: software
  title: curl
  abstract: 'curl: A Modern and Flexible Web Client for R'
  notes: Suggests
  url: https://jeroen.r-universe.dev/curl
  repository: https://CRAN.R-project.org/package=curl
  authors:
  - family-names: Ooms
    given-names: Jeroen
    email: [email protected]
    orcid: https://orcid.org/0000-0002-4035-0289
  year: '2024'
- type: software
  title: knitr
  abstract: 'knitr: A General-Purpose Package for Dynamic Report Generation in R'
  notes: Suggests
  url: https://yihui.org/knitr/
  repository: https://CRAN.R-project.org/package=knitr
  authors:
  - family-names: Xie
    given-names: Yihui
    email: [email protected]
    orcid: https://orcid.org/0000-0003-0645-5666
  year: '2024'
- type: software
  title: progressr
  abstract: 'progressr: An Inclusive, Unifying API for Progress Updates'
  notes: Suggests
  url: https://progressr.futureverse.org
  repository: https://CRAN.R-project.org/package=progressr
  authors:
  - family-names: Bengtsson
    given-names: Henrik
    email: [email protected]
  year: '2024'
- type: software
  title: rmarkdown
  abstract: 'rmarkdown: Dynamic Documents for R'
  notes: Suggests
  url: https://pkgs.rstudio.com/rmarkdown/
  repository: https://CRAN.R-project.org/package=rmarkdown
  authors:
  - family-names: Allaire
    given-names: JJ
    email: [email protected]
  - family-names: Xie
    given-names: Yihui
    email: [email protected]
    orcid: https://orcid.org/0000-0003-0645-5666
  - family-names: Dervieux
    given-names: Christophe
    email: [email protected]
    orcid: https://orcid.org/0000-0003-4474-2498
  - family-names: McPherson
    given-names: Jonathan
    email: [email protected]
  - family-names: Luraschi
    given-names: Javier
  - family-names: Ushey
    given-names: Kevin
    email: [email protected]
  - family-names: Atkins
    given-names: Aron
    email: [email protected]
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  - family-names: Cheng
    given-names: Joe
    email: [email protected]
  - family-names: Chang
    given-names: Winston
    email: [email protected]
  - family-names: Iannone
    given-names: Richard
    email: [email protected]
    orcid: https://orcid.org/0000-0003-3925-190X
  year: '2024'
- type: software
  title: testthat
  abstract: 'testthat: Unit Testing for R'
  notes: Suggests
  url: https://testthat.r-lib.org
  repository: https://CRAN.R-project.org/package=testthat
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  year: '2024'
  version: '>= 3.0.0'
- type: software
  title: withr
  abstract: 'withr: Run Code ''With'' Temporarily Modified Global State'
  notes: Suggests
  url: https://withr.r-lib.org
  repository: https://CRAN.R-project.org/package=withr
  authors:
  - family-names: Hester
    given-names: Jim
  - family-names: Henry
    given-names: Lionel
    email: [email protected]
  - family-names: Müller
    given-names: Kirill
    email: [email protected]
  - family-names: Ushey
    given-names: Kevin
    email: [email protected]
  - family-names: Wickham
    given-names: Hadley
    email: [email protected]
  - family-names: Chang
    given-names: Winston
  year: '2024'

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 7 days ago

Total Commits: 145
Total Committers: 2
Avg Commits per committer: 72.5
Development Distribution Score (DDS): 0.034

Commits in past year: 31
Committers in past year: 2
Avg Commits per committer in past year: 15.5
Development Distribution Score (DDS) in past year: 0.065

Name Email Commits
Mike Mahoney m****8@g****m 140
Hugh Graham 4****m 5

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 62
Total pull requests: 76
Average time to close issues: about 1 month
Average time to close pull requests: 2 days
Total issue authors: 13
Total pull request authors: 2
Average comments per issue: 2.53
Average comments per pull request: 1.21
Merged pull request: 75
Bot issues: 0
Bot pull requests: 0

Past year issues: 16
Past year pull requests: 16
Past year average time to close issues: 17 days
Past year average time to close pull requests: 3 days
Past year issue authors: 10
Past year pull request authors: 2
Past year average comments per issue: 2.75
Past year average comments per pull request: 1.25
Past year merged pull request: 16
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/permian-global-research/rsi

Top Issue Authors

  • mikemahoney218 (33)
  • mateuszrydzik (7)
  • h-a-graham (3)
  • alkimj (3)
  • jguelat (3)
  • kadyb (3)
  • agronomofiorentini (3)
  • laurenkwick (2)
  • frknc (1)
  • Cidree (1)
  • mmeleseg (1)
  • lucas-johnson (1)
  • evhersh (1)

Top Pull Request Authors

  • mikemahoney218 (71)
  • h-a-graham (5)

Top Issue Labels

  • feature (11)
  • bug (6)
  • help wanted :heart: (2)
  • documentation (1)

Top Pull Request Labels


Package metadata

cran.r-project.org: rsi

Efficiently Retrieve and Process Satellite Imagery

  • Homepage: https://github.com/Permian-Global-Research/rsi
  • Documentation: http://cran.r-project.org/web/packages/rsi/rsi.pdf
  • Licenses: Apache License (≥ 2)
  • Latest release: 0.3.2 (published 3 months ago)
  • Last Synced: 2025-04-26T12:02:51.382Z (1 day ago)
  • Versions: 8
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 446 Last month
  • Rankings:
    • Dependent packages count: 28.491%
    • Dependent repos count: 36.528%
    • Average: 50.031%
    • Downloads: 85.073%
  • Maintainers (1)

Dependencies

.github/workflows/R-CMD-check-hard.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/check-r-package v2 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/R-CMD-check.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/check-r-package v2 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/lock.yaml actions
  • dessant/lock-threads v2 composite
.github/workflows/pkgdown.yaml actions
  • JamesIves/github-pages-deploy-action v4.4.1 composite
  • actions/checkout v3 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/pr-commands.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/pr-fetch v2 composite
  • r-lib/actions/pr-push v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/test-coverage.yaml actions
  • actions/checkout v3 composite
  • actions/upload-artifact v3 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
DESCRIPTION cran
  • R >= 4.0 depends
  • future.apply * imports
  • glue * imports
  • jsonlite * imports
  • proceduralnames * imports
  • rlang * imports
  • rstac * imports
  • sf * imports
  • terra * imports
  • tibble * imports
  • curl * suggests
  • knitr * suggests
  • progressr * suggests
  • rmarkdown * suggests
  • testthat >= 3.0.0 suggests
  • withr * suggests

Score: 10.78468982173779