SkillAgentSearch skills...

IceSat2R

ICESat-2 Altimeter Data using R

Install / Use

/learn @mlampros/IceSat2R
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

R-CMD-check Binder docs: passing CRAN_Status_Badge Downloads status

<img align="right" width="200" src="man/figures/hex_sticker.png"></img>

IceSat2R

<br>

Programmatic connection to the OpenAltimetry EARTHDATA API to download and process the following ICESat-2 Altimeter Data,

  • 'ATL03' (Global Geolocated Photon Data)
  • 'ATL06' (Land Ice Height)
  • 'ATL07' (Sea Ice Height)
  • 'ATL08' (Land and Vegetation Height)
  • 'ATL10' (Sea Ice Freeboard)
  • 'ATL12' (Ocean Surface Height)
  • 'ATL13' (Inland Water Surface Height)

The user has the option to download the data by selecting a bounding box from a 1- or 5-degree grid globally utilizing a shiny application. The Documentation, the two package Vignettes (first, second) and the blog post explain the functionality in detail.

<br>

The ICESat-2 mission collects altimetry data of the Earth's surface. The sole instrument on ICESat-2 is the Advanced Topographic Laser Altimeter System (ATLAS) instrument that measures ice sheet elevation change and sea ice thickness, while also generating an estimate of global vegetation biomass.

ICESat-2 continues the important observations of

  • ice-sheet elevation change
  • sea-ice freeboard, and
  • vegetation canopy height

begun by ICESat in 2003.

<br>

System Requirements

The usage of the IceSat2R package requires a geospatial setup as specified in the sf or terra README.md files.

<br>

How the IceSat2R package can be used?

<br>

The IceSat2R package includes the code, documentation, and examples so that,

  • A user can select an area of interest (AOI) either programmatically or interactively
  • If the Reference Ground Track (RGT) is not known, the user has the option to utilize either
    • one of the "overall_mission_orbits()" or "time_specific_orbits()" to compute the RGT(s) for a pre-specified global area or for a time period, or
    • one of the "vsi_nominal_orbits_wkt()" or "vsi_time_specific_orbits_wkt()" to compute the RGT(s) for a specific AOI
  • Once the RGT is computed it can be verified with the "getTracks()" function of the OpenAltimetry EARTHDATA Web API
  • Finally the user can utilize one of the "get_atlas_data()" or "get_level3a_data()" functions to retrieve the data for specific product(s), Date(s) and Beam(s)

This work-flow is illustrated also in the following diagram,

<br>

<img src="man/figures/icesat_2_diagram.png" ></img>

<br>

Shiny application to select an area of interest (AOI) from a 1- or 5-degree global grid

<br>

The OpenAltimetry EARTHDATA API restricts the requests to a 1x1 or 5x5 degree spatial bounding box, unless the "sampling" parameter is set to TRUE. The shiny application of the IceSat2R package allows the user to create a spatial grid of an AOI, preferably a 1- or 5-degree grid so that the selection can be within limits. An alternative would be to create a grid of smaller grid cells than required (for instance a 4-degree grid) and then to select multiple grid cells,

<br>

<img src="man/figures/shiny_app_grid.gif" ></img>

<br>

Example Use Case-1: 3-Dimensional Line Plot by combining ICESat-2 and Copernicus DEM (Digital Elevation Model) Data

<br>

The following 3-dimensional interactive line plot (which appears in the 'IceSat-2_Atlas_products' Vignette) shows,

  • in blue color the elevation based on the DEM compared to the two ICESat-2 beams ('gt1r' and 'gt2l'), as these are separated by a 3-km distance
  • in orange color the land-ice-height measurements of the summer period (separately for 'gt1r' and 'gt2l')
  • in green color the land-ice-height measurements of the winter period (separately for 'gt1r' and 'gt2l')
<br>

<img src="man/figures/3_dim_plot.gif" ></img>

<br>

Example Use Case-2: Multi-Plot displaying the Ice, Land, Canopy and Copernicus DEM (30-meter) of each beam separately for a specific ICESat-2 Track and area of interest (Himalayas mountain range)

<br>

<img src="man/figures/ice_land_canopy_dem30.gif" ></img>

<br>

Binder

The user of the IceSat2R R package can reproduce the examples of the documentation using the available binder Rstudio image. Once launched the cloud instance will take a few minutes to be ready. You can read more about binder on the web. In short, binder allows to make "your code immediately reproducible by anyone, anywhere". Limitations:

<br>

Docker Image

<br>

Docker images of the IceSat2R package are available to download from my dockerhub account. The images come with Rstudio and the R-development version (latest) installed. The whole process was tested on Ubuntu 18.04. To pull & run the image do the following,

<br>

docker pull mlampros/icesat2r:rstudiodev

docker run -d --name rstudio_dev -e USER=rstudio -e PASSWORD=give_here_your_password --rm -p 8787:8787 mlampros/icesat2r:rstudiodev

<br>

The user can also bind a home directory / folder to the image to use its files by specifying the -v command,

<br>

docker run -d --name rstudio_dev -e USER=rstudio -e PASSWORD=give_here_your_password --rm -p 8787:8787 -v /home/YOUR_DIR:/home/rstudio/YOUR_DIR mlampros/icesat2r:rstudiodev


<br>

The USER defaults to rstudio but you have to give your PASSWORD of preference (see https://rocker-project.org/ for more information).

<br>

Open your web-browser and depending where the docker image was build / run give,

<br>

1st. Option on your personal computer,

<br>
http://0.0.0.0:8787 

<br>

2nd. Option on a cloud instance,

<br>
http://Public DNS:8787

<br>

to access the Rstudio console in order to give your username and password.

<br>

Installation:

<br>

To install the package from CRAN use,

install.packages("IceSat2R")

<br>

and to download the latest version of the package from Github,

remotes::install_github('mlampros/IceSat2R')

<br>

R package tests:

<br>

To execute the package tests (all or a specific file) use the following code snippet:


# first download the latest version of the package

url_pkg = 'https://github.com/mlampros/IceSat2R/archive/refs/heads/master.zip'
temp_pkg_file = tempfile(fileext = '.zip')
print(temp_pkg_file)

options(timeout = 600)
downl_f = IceSat2R::download_file(url = url_pkg,
                                  destfile = temp_pkg_file,
                                  download_method = 'curl',
                                  verbose = TRUE)

dir_pkg_save = dirname(temp_pkg_file)
utils::unzip(zipfile = temp_pkg_file, exdir = dir_pkg_save, junkpaths = FALSE)

# build and install the latest version of the package

require(glue)

setwd(dir_pkg_save)
system('R CMD build --compact-vignettes="gs+qpdf" --resave-data IceSat2R-master')
gz_file = which(gregexpr(pattern = "^IceSat2R+_+[0-9]+.+[0-9]+.+[0-9]+.tar.gz", text = list.files()) != -1)
system(glue::glue("R CMD INSTALL {list.files()[gz_file]}"))

# load the package

require(IceSat2R)

# run all tests

testthat::test_local(path = file.path(dirname(temp_pkg_file), 'IceSat2R-master'),
                     reporter = testthat::default_reporter())

# run a specific test file from the 'testthat' directory of the package 
# https://github.com/mlampros/IceSat2R/tree/master/tests/testthat

test_specific_file = file.path(dirname(temp_pkg_file), 
                               'IceSat2R-master', 
                               'tests', 
                               'testthat', 
                               'test-mission_orbits.R')

Sys.setenv(NOT_CRAN = "true")       # run all tests (including the ones skipped on CRAN)
testthat::test_file(path = test_specific_file, reporter = testthat::default_reporter())
Sys.unsetenv("NOT_CRAN")            # unset the previously modified environment variable

The previous code snippet allows

View on GitHub
GitHub Stars16
CategoryDevelopment
Updated18d ago
Forks1

Languages

R

Security Score

95/100

Audited on Mar 13, 2026

No findings