Introduction to GeoIndexR

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

Overview

GeoIndexR is a modern, modular, and extensible R package for computing spectral and geospatial indices from multispectral raster data. Built natively on terra, GeoIndexR operates on SpatRaster objects and file paths while preserving all georeferencing, projection (CRS), resolution, and spatial extents.

Beyond standard indices, GeoIndexR features a secure custom formula engine (geo_index_custom()) enabling users to compute any mathematical expression on spectral bands with custom constants.


9-Step Complete Workflow

Step 1: Load a Raster (SpatRaster or File Path)

You can pass a loaded terra::SpatRaster or directly supply a file path character string:

library(GeoIndexR)
library(terra)

# Load synthetic 6-band multispectral image
img <- get_example_data()
print(img)
names(img)

Step 2: Identify and Map Spectral Bands

Bands can be resolved automatically by layer name, by layer position index (c(red = 3, nir = 4)), or using sensor presets (sensor = "sentinel2"):

# Band mapping by explicit role name
bands_map <- c(red = "red", nir = "nir", blue = "blue")

Step 3: Compute a Standard Predefined Index

Compute standard indices using geo_index():

ndvi <- geo_index(img, "NDVI", bands = bands_map)
print(ndvi)

Step 4: Examine Summary Statistics and Quantiles

Use index_summary() to compute descriptive statistics including percentiles (q05, q25, q75, q95) and NA percentages:

summary_tbl <- index_summary(ndvi)
print(summary_tbl)

Step 5: Visualize the Index

Use plot_index() with thematic color palettes automatically matched to index categories (vegetation, water, urban, soil, snow):

plot_index(ndvi, "NDVI")

Step 6: Save the Result to Disk

All outputs from GeoIndexR are standard terra::SpatRaster objects, ready for export:

writeRaster(ndvi, "NDVI_output.tif", overwrite = TRUE)

Step 7: Compute a Custom Formula Index

Compute your own formulas using geo_index_custom():

# Compute a custom ratio
custom_ratio <- geo_index_custom(
  img,
  formula = "(nir - red) / (nir + red)",
  bands = c(red = "red", nir = "nir"),
  name = "MyCustomNDVI"
)
print(custom_ratio)

# Compute a custom parameterized index
custom_veg <- geo_index_custom(
  img,
  formula = "G * (nir - red) / (nir + C1 * red - C2 * blue + L)",
  bands = c(blue = "blue", red = "red", nir = "nir"),
  params = list(G = 2.5, C1 = 6.0, C2 = 7.5, L = 1.0),
  name = "CustomEVI"
)
print(custom_veg)

Step 8: Manage Reflectance and Scale Factors

For scale-sensitive indices (such as EVI, SAVI, MSAVI, ARVI) where input data are stored as raw integer Digital Numbers (e.g. $[0, 10000]$ in Sentinel-2 L2A), specify scale_factor = 10000:

# Mock integer DN raster
img_dn <- img * 10000

# Calculate EVI with proper scale factor conversion
evi_scaled <- geo_index(
  img_dn,
  "EVI",
  bands = c(blue = "blue", red = "red", nir = "nir"),
  scale_factor = 10000
)
index_summary(evi_scaled)

Step 9: Consult the Extensible Index Registry

Explore available indices, formulas, required bands, interpretations, and literature citations via index_registry():

reg <- index_registry(category = "vegetation")
reg[, c("index", "name", "required_bands", "requires_reflectance")]


Try the GeoIndexR package in your browser

Any scripts or data that you put into this service are public.

GeoIndexR documentation built on Oct. 10, 2026, 5:08 p.m.