Fastfocal
Fast and flexible moving window and buffer-based raster extraction at user-defined spatial scales. Supports various focal statistics and multi-scale extraction using vector data. Compatible with terra and sf classes, and optimized for performance with FTT.
Install / Use
/learn @hoyiwan/FastfocalREADME
fastfocal
fastfocal: Fast Multi-scale Raster Extraction and Moving Window Analysis with Fast Fourier Transform (FFT) in R
fastfocal provides high-performance, flexible raster smoothing and extraction functions in R using moving windows, buffer-based zones, and an auto-switching FFT backend for large kernels. It supports multiple focal statistics and allows users to work at multiple spatial scales with ease.
Installation
You can install the stable version via CRAN:
install.packages("fastfocal")
You can install the development version from GitHub:
# install.packages("remotes")
remotes::install_github("hoyiwan/fastfocal")
Overview
This package includes:
fastfocal()— fast moving-window smoothing with support for mean, sum, min, max, sd, and medianfastextract()— fast extraction of raster values at point or buffer locationsfastfocal_weights()— utility for generating spatial weight matrices (circular, Gaussian, etc.)- Auto-switch backend to FFT for large windows to improve performance
- FFT backend currently supports sum and mean; other statistics use the
terrabackend
- FFT backend currently supports sum and mean; other statistics use the
- Native support for
terra::SpatRasterandterra::SpatVectorobjects
Example Usage
library(fastfocal)
library(terra)
# Create a dummy raster
r <- rast(nrows = 100, ncols = 100, xmin = 0, xmax = 3000, ymin = 0, ymax = 3000)
values(r) <- runif(ncell(r))
# Apply fast focal smoothing with circular window of radius 300
smoothed <- fastfocal(r, d = 300, w = "circle", fun = "mean")
# Plot the result
plot(smoothed)
Weighted extraction at points:
# Create SpatVector of points
pts <- vect(data.frame(x = c(500, 1500), y = c(500, 2500)), geom = c("x", "y"), crs = crs(r))
# Extract raster values in 500 m buffers around points
result <- fastextract(r, pts, d = 500, fun = "mean")
print(result)
Vignettes
You can also access them from R using:
vignette("index", package = "fastfocal")
License
This package is licensed under the MIT License (see the LICENSE file).
Citation
If you use fastfocal in published work, please cite it as:
Ho Yi Wan (2025). fastfocal: Fast Multi-scale Raster Extraction and Moving Window Analysis with Fast Fourier Transform (FFT) in R. Version v0.1.4. Zenodo. https://doi.org/10.5281/zenodo.17074691
Or use the BibTeX entry:
@software{wan_fastfocal_2025,
author = {Ho Yi Wan},
title = {fastfocal: Fast Multi-scale Raster Extraction and Moving Window Analysis with Fast Fourier Transform (FFT) in R},
version = {v0.1.4},
year = {2025},
publisher = {Zenodo},
doi = {10.5281/zenodo.17074691},
url = {https://doi.org/10.5281/zenodo.17074691}
}
You can also run:
citation("fastfocal")
Author
Ho Yi Wan
hoyiwan@gmail.com
Purpose
Built to support large-scale ecological analysis, high-performance raster processing, and reproducible landscape research workflows.
Related Skills
openhue
349.9kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
349.9kElevenLabs text-to-speech with mac-style say UX.
weather
349.9kGet current weather and forecasts via wttr.in or Open-Meteo
casdoor
13.3kAn open-source AI-first Identity and Access Management (IAM) /AI MCP & agent gateway and auth server with web UI supporting OpenClaw, MCP, OAuth, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA, Face ID, Google Workspace, Azure AD
