Skip to content

Instantly share code, notes, and snippets.

View h-a-graham's full-sized avatar

Hugh Graham h-a-graham

View GitHub Profile
@h-a-graham
h-a-graham / rio_xarray_dask_inout.R
Created March 20, 2025 12:14
Minimal reticulate rioxarray dask implementation
library(reticulate)
py_require(c("dask", "distributed", "rioxarray"))
dask.distributed <- reticulate::import("dask.distributed")
rioxarray <- reticulate::import("rioxarray")
Sys.setenv(GDAL_VRT_ENABLE_PYTHON = "YES")
@h-a-graham
h-a-graham / major-tom-embeds.R
Last active March 17, 2025 13:47
Download Major-Tom geospatial embeddings
#' Download geospatial embeddings for Major-TOM datsets
#' @param bbox numeric vector of length 4 representing the bounding box in
#' longitude and latitude coordinates (WGS84). Ordered as c(xmin, xmax, ymin,
#' ymax).
#' @param embed character vector of length 1 representing the embedding to
#' download.
#' @param limit integer vector of length 1 representing the maximum number of
#' rows to return. Useful for testing, if NULL then all rows within the bbox
#' are returned.
@h-a-graham
h-a-graham / vrt_composite.R
Last active February 16, 2025 07:21
create a composite raster using gdal's VRT and warp via {gdalraster}
#' Create a composite raster with a VRT pixel function
#' @param src_files a character vector with the paths to the source rasters.
#' @param outfile a character path to the output raster.
#' @param fun a character with the pixel function to apply.
#' @param t_srs a character with the target SRS. If empty string "", the spatial
#' reference of src_files[1] will be used.
#' @param vrt_options a character vector with additional options to pass to the
#' gdalbuildVRT command.
#' @param warp_options a character vector with additional options to pass to the
#' gdalwarp command.
@h-a-graham
h-a-graham / sp_block_bootstrap.md
Last active January 8, 2025 15:29
Spatial block bootstrap with clustered folds to estimate a global statistic (and CIs) for a raster.
suppressPackageStartupMessages({
  library(terra)
  library(ggplot2)
  library(spatialsample)
  library(rsample)
  library(sf)
  library(dplyr)
})
@h-a-graham
h-a-graham / prop_aggregate.md
Last active December 12, 2024 10:27
aggregate a categorical raster - yielding a band for each class with the proportion of cover for the class
library(terra)
#> terra 1.8.0

# create example landcover raster
r <- rast(
  extent = c(0, 15000, 0, 15000),
  resolution = 30,
  crs = "+proj=laea"
)
as_the_crow_flies <- function(city1, city2,
                              country1 = NULL, country2 = NULL,
                              units = "km", quiet = FALSE) {
  gcl <- tidygeocoder::geo(
    city = c(city1, city2), country = c(country1, country2),
    method = "osm", quiet = TRUE, progress_bar = FALSE, verbose = FALSE
  )
  l1 <- gcl[1, ]
  l2 <- gcl[2, ]
@h-a-graham
h-a-graham / to-generic-projected.R
Last active October 25, 2024 09:55
An R function to convert an sf/sfc object to an appropriate utm or laea projection.
#' Project an sf/sfc object to a generic projected coordinate system
#' @param x an sf or sfc object
#' @param proj a character vector. The projection to use. One of "laea", "aeqd",
#' "utm", "pconic", or "eqdc".
#' @param ellps a character vector. The ellipsoid to use. Select from
#' `sf_proj_info(type = "ellps")`.
#' @param opts a character vector. Additional proj options to pass to the
#' proj string. see details for more information.
#' @return an sf or sfc object
#' @details For further info about the available "generic" projects see:
@h-a-graham
h-a-graham / hls-functions.R
Last active January 13, 2025 16:26
create Harmonized Sentinel Landsat Mosaic with R
# Description: This script is used to download HLS data from NASA's Earthdata
# STAC API and build a cloud-free composite image.
# ----- Functions -----
# band mapping for HLS SL data
#' @return a named character vector of band mappings for HLS SL data
hlssl_band_mapping <- function() {
c(
B01 = "A", B02 = "B", B03 = "G", B04 = "R",
@h-a-graham
h-a-graham / geo_bounds.R
Last active November 28, 2024 19:44
Get admin boundaries for any country with R.
#' @title Get administritive outlines for a country
#' @description using the geoBoundaires API, get the administritive polygon(s)
#' for a country
#' @param country character vector: a country name
#' @param admin_level character vector: the admin level to download
#' @param quiet logical, should st_read be quiet?
#' @return sf object of the outlines
#' @details check out the documentation for the geoboundaries API at:
#' geoBoundaries.org
#'
@h-a-graham
h-a-graham / terrain_surface_buffer.R
Last active October 16, 2023 15:56
generates buffer along terrain surface from point
#' Buffer a point along a terrain surface.
#'
#' @param dtm A SpatRaster Digital Terrain Model
#' @param pnts A SpatVector of points
#' @param .dist Numeric - the buffer distance.
#' @param .res Numeric - approximate resampling resolution of the (internally
#' calculated) cost raster.
#' @param .smooth Logical default FALSE. Should the output buffer be smoothed using `smoothr::smooth`?
#' @param .method The smoothing method to use - see `smoothr::smooth` for details.
#' @param ... Passed to `smoothr::smooth` for eg. to control smoothness.