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 4 hours ago
JSON representation
Repository metadata
Code for Retrieving STAC Information, addressing Repeated Spatial Infelicities and interfacing with Rsome Spectral Indices
- Host: GitHub
- URL: https://github.com/permian-global-research/rsi
- Owner: Permian-Global-Research
- License: apache-2.0
- Created: 2023-08-23T18:32:58.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-27T22:14:00.000Z (7 months ago)
- Last Synced: 2025-10-29T08:02:00.426Z (5 days ago)
- Language: R
- Homepage: https://permian-global-research.github.io/rsi/
- Size: 37.3 MB
- Stars: 55
- Watchers: 3
- Forks: 7
- Open Issues: 6
- Releases: 9
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE.md
- Citation: CITATION.cff
- Support: .github/SUPPORT.md
- Codemeta: codemeta.json
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
[](https://github.com/Permian-Global-Research/rsi/actions/workflows/R-CMD-check.yaml)
[](https://app.codecov.io/gh/Permian-Global-Research/rsi?branch=main)
[](https://opensource.org/license/apache-2-0)
[](https://lifecycle.r-lib.org/articles/stages.html#maturing)
[](https://www.repostatus.org/#active)
[](https://CRAN.R-project.org/package=rsi)
[](https://zenodo.org/doi/10.5281/zenodo.10926857)
[](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: mike.mahoney.218@gmail.com
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: mike.mahoney.218@gmail.com
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: mike.mahoney.218@gmail.com
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: henrikb@braju.com
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: jenny@posit.co
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: hadley@posit.co
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: jeroen@berkeley.edu
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: lionel@posit.co
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
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: mike.mahoney.218@gmail.com
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: lionel@posit.co
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
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: rolfsimoes@gmail.com
- family-names: Carvalho
given-names: Felipe
email: lipecaso@gmail.com
- name: Brazil Data Cube Team
email: brazildatacube@inpe.br
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: edzer.pebesma@uni-muenster.de
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: r.hijmans@gmail.com
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: kirill@cynkra.com
orcid: https://orcid.org/0000-0002-1416-3412
- family-names: Wickham
given-names: Hadley
email: hadley@rstudio.com
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: jeroen@berkeley.edu
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: xie@yihui.name
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: henrikb@braju.com
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: jj@posit.co
- family-names: Xie
given-names: Yihui
email: xie@yihui.name
orcid: https://orcid.org/0000-0003-0645-5666
- family-names: Dervieux
given-names: Christophe
email: cderv@posit.co
orcid: https://orcid.org/0000-0003-4474-2498
- family-names: McPherson
given-names: Jonathan
email: jonathan@posit.co
- family-names: Luraschi
given-names: Javier
- family-names: Ushey
given-names: Kevin
email: kevin@posit.co
- family-names: Atkins
given-names: Aron
email: aron@posit.co
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
- family-names: Cheng
given-names: Joe
email: joe@posit.co
- family-names: Chang
given-names: Winston
email: winston@posit.co
- family-names: Iannone
given-names: Richard
email: rich@posit.co
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: hadley@posit.co
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: lionel@posit.co
- family-names: Müller
given-names: Kirill
email: krlmlr+r@mailbox.org
- family-names: Ushey
given-names: Kevin
email: kevinushey@gmail.com
- family-names: Wickham
given-names: Hadley
email: hadley@posit.co
- family-names: Chang
given-names: Winston
year: '2024'
Owner metadata
- Name: Permian Global Research
- Login: Permian-Global-Research
- Email:
- Kind: organization
- Description:
- Website: https://permianglobal.com/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/106586419?v=4
- Repositories: 4
- Last ynced at: 2023-08-11T18:31:28.485Z
- Profile URL: https://github.com/Permian-Global-Research
GitHub Events
Total
- Create event: 5
- Release event: 2
- Issues event: 12
- Watch event: 10
- Delete event: 1
- Issue comment event: 35
- Push event: 20
- Pull request review event: 5
- Pull request review comment event: 4
- Pull request event: 10
- Fork event: 2
Last Year
- Create event: 4
- Release event: 1
- Issues event: 9
- Watch event: 7
- Delete event: 1
- Issue comment event: 31
- Push event: 14
- Pull request review event: 5
- Pull request review comment event: 4
- Pull request event: 10
- Fork event: 1
Committers metadata
Last synced: 2 days ago
Total Commits: 145
Total Committers: 2
Avg Commits per committer: 72.5
Development Distribution Score (DDS): 0.034
Commits in past year: 8
Committers in past year: 2
Avg Commits per committer in past year: 4.0
Development Distribution Score (DDS) in past year: 0.25
| Name | Commits | |
|---|---|---|
| Mike Mahoney | m****8@g****m | 140 |
| Hugh Graham | 4****m | 5 |
Issue and Pull Request metadata
Last synced: 24 days ago
Total issues: 42
Total pull requests: 55
Average time to close issues: 21 days
Average time to close pull requests: 2 days
Total issue authors: 14
Total pull request authors: 2
Average comments per issue: 2.4
Average comments per pull request: 1.2
Merged pull request: 54
Bot issues: 0
Bot pull requests: 0
Past year issues: 12
Past year pull requests: 10
Past year average time to close issues: 24 days
Past year average time to close pull requests: about 19 hours
Past year issue authors: 8
Past year pull request authors: 2
Past year average comments per issue: 2.17
Past year average comments per pull request: 1.1
Past year merged pull request: 10
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- mikemahoney218 (18)
- mateuszrydzik (4)
- h-a-graham (3)
- alkimj (3)
- agronomofiorentini (3)
- laurenkwick (2)
- frknc (1)
- jguelat (1)
- francodanilo (1)
- Cidree (1)
- mmeleseg (1)
- kadyb (1)
- lucas-johnson (1)
- evhersh (1)
Top Pull Request Authors
- mikemahoney218 (79)
- h-a-graham (7)
Top Issue Labels
- feature (4)
- bug (3)
- documentation (1)
Top Pull Request Labels
Package metadata
- Total packages: 3
-
Total downloads:
- cran: 439 last-month
- Total dependent packages: 0 (may contain duplicates)
- Total dependent repositories: 0 (may contain duplicates)
- Total versions: 28
- Total maintainers: 1
proxy.golang.org: github.com/Permian-Global-Research/rsi
- Homepage:
- Documentation: https://pkg.go.dev/github.com/Permian-Global-Research/rsi#section-documentation
- Licenses: apache-2.0
- Latest release: v0.3.2 (published 10 months ago)
- Last Synced: 2025-10-31T09:01:19.259Z (3 days ago)
- Versions: 10
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.395%
- Average: 5.576%
- Dependent repos count: 5.758%
proxy.golang.org: github.com/permian-global-research/rsi
- Homepage:
- Documentation: https://pkg.go.dev/github.com/permian-global-research/rsi#section-documentation
- Licenses: apache-2.0
- Latest release: v0.3.2 (published 10 months ago)
- Last Synced: 2025-10-31T09:01:21.429Z (3 days ago)
- Versions: 10
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.395%
- Average: 5.576%
- Dependent repos count: 5.758%
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 10 months ago)
- Last Synced: 2025-10-30T08:34:48.962Z (4 days ago)
- Versions: 8
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 439 Last month
-
Rankings:
- Dependent packages count: 28.491%
- Dependent repos count: 36.528%
- Average: 50.031%
- Downloads: 85.073%
- Maintainers (1)
Dependencies
- 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
- 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
- dessant/lock-threads v2 composite
- 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
- 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
- actions/checkout v3 composite
- actions/upload-artifact v3 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite
- 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.890795771645562