Learn R Programming

modisfast

modisfast (formerly opendapr) is an R package that provides functions to speed-up the download of time-series raster data products derived from some MODIS and VIIRS observations, as well as other widely-used satellite-derived environmental data (e.g. Global Precipitation Measurement Mission).

modisfast uses the abilities offered by the OPeNDAP framework (Open-source Project for a Network Data Access Protocol) to download a subset of Earth science data cube, along spatial, temporal or any other data dimension (depth, …). This way, it reduces downloading time and disk usage to their minimum : no more 1° x 1° MODIS tiles with 10 bands when your region of interest is only 30 km x 30 km wide and you need 2 bands ! Moreover, modisfast enables parallel downloads of data.

modisfast is hence particularly suited for retrieving MODIS or VIIRS data over long time series and over areas, rather than short time series and points.

Below is a comparison of modisfast with other packages available for downloading chunks of remote sensing data :

PackageDataTemporal subsetting*Spatial subsetting*Dimensional subsetting*Speed
modisfastMODIS, VIIRS, GPM:white_check_mark::white_check_mark::white_check_mark::white_check_mark:
MODISMODIS:white_check_mark::x::x::white_check_mark:
MODIStspMODIS:white_check_mark::x::white_check_mark::white_check_mark:
MODISToolsMODIS and VIIRS (but not all collections):white_check_mark::white_check_mark::white_check_mark::white_check_mark:
appeearsMODIS, VIIRS, and many others:white_check_mark::white_check_mark::white_check_mark::x:

* at the downloading phase

Installation

The package can be installed with:

if(!require(devtools)){install.packages("devtools")}
devtools::install_github("ptaconet/modisfast")
library(modisfast)

Get Started

Accessing and opening MODIS data with modisfast is a simple 3-steps workflow, as shown in the example below.

1/ First, define the variables of interest (ROI, time frame, collection, and bands) :

# Load the packages
library(modisfast)
library(sf)
library(terra)

# ROI and time range of interest
roi <- st_as_sf(data.frame(id = "roi_id", geom = "POLYGON ((-5.82 9.54, -5.42 9.55, -5.41 8.84, -5.81 8.84, -5.82 9.54))"), wkt="geom", crs = 4326) # a ROI of interest, format sf polygon
time_range <- as.Date(c("2017-01-01","2017-06-01"))  # a time range of interest

# MODIS collections and variables (bands) of interest
collection <- "MOD11A2.061"  # run mf_list_collections() for an exhaustive list of collections available
variables <- c("LST_Day_1km","LST_Night_1km","QC_Day","QC_Night") # run mf_list_variables("MOD11A2.061") for an exhaustive list of variables available for the collection "MOD11A1.062"

2/ Then, get the URL of the data and download them :

## Login to Earthdata servers with your EOSDIS credentials. 
# To create an account (free) go to : https://urs.earthdata.nasa.gov/.
log <- mf_login(credentials = c("username","password"))  # set your own EOSDIS username and password

## Get the URLs of the data 
urls <- mf_get_url(
  collection = collection,
  variables = variables,
  roi = roi,
  time_range = time_range
 )

## Download the data. By default the data is downloaded in a temporary directory, but you can specify a folder
res_dl <- mf_download_data(urls, parallel = T)

3/ And finally, open the data in R as a terra::SpatRaster object using the function mf_import_data() (:warning: see here why you should use this function, instead of the original terra::rast(), in the context of modisfast) :

r <- mf_import_data(
  path = dirname(res_dl$destfile[1]),
  collection = collection, 
  proj_epsg = 4326
  )

terra::plot(r)

et voilà !

Want more examples of use of modisfast ? Have a look at the vignette("get_started") to get started with a simple example, and see the vignette("modisfast2") for a more advanced workflow !

Collections available in modisfast

Currently modisfast supports download of 77 data collections, extracted from the following meta-collections :

In addition, modisfast supports download of the following satellite-derived environmental data :

Details of each product available for download are provided in the tables above or through the function mf_list_collections(). Want more details on a specific collection ? Click on the “DOI” column !

Similar packages

modisfast is particularly suited for retrieving MODIS or VIIRS data over long time series and over areas, rather than short time series and points.

There are other R packages available for accessing MODIS data, which may be more suitable if your requirements differ. These include :

Next steps

Next developments may involve including access to more collections from other OPeNDAP servers, and submitting the package to the CRAN and the rOpenSci archives.

Any contribution is welcome !

License and citation

This package is licensed under a GNU General Public License v3.0 or later license.

We thank in advance people that use modisfast for citing it in their work / publication(s). For this, please use the following citation :

Paul Taconet, Nicolas Moiroux. ‘modisfast’ : fast and efficient access to MODIS data with R. 2024, ⟨swh:1:dir:21b5ddcecb39e683c9f2fc5c135f23dc1b36fe28;origin=https://github.com/ptaconet/modisfast;visit=swh:1:snp:4064f0aae2b29808e9cbd096afaa495fd1360f78;anchor=swh:1:rev:9e5b2a456a0e1acd8ab34e6909424ae6c403150d⟩. ⟨hal-04603903⟩

Under the woods… how does modisfast work ?

modisfast is an R wrapper for OPeNDAP (Open-source Project for a Network Data Access Protocol). When utilized by data providers, such as those managing many NASA datasets, OPeNDAP allows for subsetting portions of Earth observation cubes based on any dimension by specifying filters in a URL. modisfast facilitates this process by constructing the URL based on the spatial, temporal, and dimensional filters provided by the user in the function mf_get_url().

Let’s take an example to understand.

The following URL :arrow_down:

https://opendap.cr.usgs.gov/opendap/hyrax/MOD11A2.061/h17v08.ncml.nc4?MODIS_Grid_8Day_1km_LST_eos_cf_projection,LST_Day_1km[775:793][55:140][512:560],LST_Night_1km[775:793][55:140][512:560],QC_Day[775:793][55:140][512:560],QC_Night[775:793][55:140][512:560],time[775:793],YDim[55:140],XDim[512:560]

provides a link to download the MOD11A2.061 data in netCDF, subsetted for :

  • bands LST_Day_1km, LST_Night_1km, QC_Day, QC_Night ;
  • each available date between the 2017-01-01 and the 2017-06-01 ;
  • within the following bounding box (lon/lat): -5.41 8.84, -5.82 9.54.

The indices within the [] refer to values encoding for the spatial and temporal filters.

These OPeNDAP URLs are not trivial to build. modisfast converts the spatial, temporal and dimensional filters (R objects) provided by the user through the function mf_get_url() into the appropriate OPeNDAP URL(s). Subsequently, the function mf_download_data() allows for downloading the data using the httr and parallel packages.

Acknowledgments

We thank NASA and its partners for making all their Earth science data freely available, and implementing open data access protocols such as OPeNDAP. modisfast heavily builds on top of the OPeNDAP, so we thank the non-profit OPeNDAP, Inc. for developing the eponym tool in an open and collaborative way.

We also thank the contributors that have tested the package, reviewed the documentation and brought valuable feedbacks to improve the package : Florian de Boissieu, Julien Taconet, Nicolas Moiroux

The initial development and first release of this package were financed by the MIVEGEC unit of the French Research Institute for Sustainable Development, as part of the REACT project.

By enabling to download subsets of data cubes, modisfast facilites the access to Earth science data for R users in places where internet connection is slow or expensive and promotes digital sobriety for our research work.

The OPeNDAP, over which the package builds, is a project developed by the non-profit OPeNDAP, Inc. and advanced openly and collaboratively. By using this data access protocol, modisfast support the open-source-software movement.

Copy Link

Version

Install

install.packages('modisfast')

Monthly Downloads

745

Version

0.9.1

License

GPL (>= 3)

Issues

Pull Requests

Stars

Forks

Maintainer

Paul Taconet

Last Published

July 14th, 2024

Functions in modisfast (0.9.1)

mf_get_opt_param

Precompute the parameter opt_param of the function mf_get_url
mf_download_data

Download several datasets given their URLs and destination path
mf_list_collections

Get the collections available for download with the modisfast package
mf_import_data

Import datasets downloaded using modisfast as a terra::SpatRaster object
modisfast-package

modisfast: Fast and Efficient Access to MODIS Earth Observation Data
mf_list_variables

Get information for the variables (bands) available for a given collection
mf_login

Login to EOSDIS EarthData account
entomological_data

Example dataset containing abundances of mosquitoes vectors of malaria. Used in article 'use_case'.
mf_get_url

Build the URL(s) of the data to download