Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
stylenone

The main reason to want to use the ForestForesight package is to create your own datasets and use them to improve the model. Below we give instructions on how to do this.

First, let's set up our environment:

.

Main Functions

The main functions that are required are:

  • Reprojection: Reprojection is the process of converting spatial data from one coordinate system to another. It allows you to align data from different sources or to display data in a desired projection for analysis or visualization.

  • Resampling: Resampling involves changing the cell size or resolution of a raster dataset. It can be used to increase or decrease the spatial resolution of data, often to match the resolution of other datasets or to reduce file size.

  • Reclassification: Reclassification is the process of reassigning values in a raster dataset based on specified criteria. It's commonly used to simplify complex data, create categorical maps from continuous data, or to recode values for analysis.

  • Filtering: Filtering in spatial analysis refers to selecting or highlighting specific data based on certain criteria. It can involve removing unwanted data or emphasizing particular features, often used to focus on areas of interest or to remove noise from datasets.

  • Clipping: Clipping is the process of extracting a portion of a spatial dataset that falls within a defined boundary. It's used to focus on a specific area of interest or to reduce the size of a dataset to a manageable extent.

  • Distance Calculation: Distance calculation in GIS involves computing the spatial distance between features or locations. It can be used to create buffer zones, analyze proximity relationships, or generate distance-based raster surfaces for various spatial analyses

    21.jpgImage Added

Environment setup

Code Block
languager
library(terraForestForesight)

ff_folder <- "/path/to/ff_folder"
template_folder <- list.files(file.path(ff_folder, "preprocessed", "input"), pattern = "^[0-9]{2}[NS]_[0-9]{3}[EW]$", full.names = TRUE)[1]
template_raster <- rast(list.files(template_folder, pattern = "\\.tif$", full.names = TRUE)[1])

Reprojecting a raster dataset

...

This is useful when your input raster is in a different coordinate reference system (CRS) than your template or has a different resolution or extent.

...

Code Block
languager
# Load a land cover raster in a different CRS
land_cover <- rast("landcover_wgs84.tif")

# Check CRS
print(crs(land_cover))
print(crs(template_raster))

# Reproject using nearest neighbor (best for categorical data)
land_cover_nearest <- project(land_cover, template_raster, method = "near")

# Reproject using cubic (often better for continuous data)
land_cover_cubic <- project(land_cover, template_raster, method = "cubic")

# Compare results
par(mfrow = c(1, 2))
plot(land_cover_nearest, main = "Nearest Neighbor")
plot(land_cover_cubic, main = "Cubic")

Selecting a single layer from a multi-layer raster

...

This is common when working with satellite imagery or time series data.

...

Code Block
languager
# Load a multi-band Landsat image
landsat <- rast("landsat_image.tif")

# Check number of layers
nlyr(landsat)

# Select the Near-Infrared band (usually band 5 in Landsat 8)
nir_band <- landsat[[5]]

# Standardize to template
nir_standardized <- project(nir_band, template_raster, method = "cubic")

# Plot
plot(nir_standardized, main = "Near-Infrared Band")

Reclassifying categorical data

...

This is useful for simplifying land cover classes or creating binary masks.

...

Code Block
languager
# Load a land cover raster
lulc <- rast("land_use_land_cover.tif")

# Create a reclassification matrix
# Let's say we want to simplify to Forest (1), Agriculture (2), and Other (3)
rcl_matrix <- matrix(c(
  1, 5, 1,   # Classes 1-5 become Forest (1)
  6, 10, 2,  # Classes 6-10 become Agriculture (2)
  11, 20, 3  # Classes 11-20 become Other (3)
), ncol = 3, byrow = TRUE)

# Reclassify
lulc_reclass <- classify(lulc, rcl_matrix)

# Standardize to template
lulc_standardized <- project(lulc_reclass, template_raster, method = "near")

# Plot
plot(lulc_standardized, main = "Reclassified Land Cover")

Rasterizing a vector dataset (presence/absence)

...

This is useful for creating binary masks from vector data.

...

Code Block
languager
# Load forest cover polygons
forest_polygons <- vect("forest_cover.shp")

# Rasterize (1 for forest, 0 for non-forest)
forest_raster <- rasterize(forest_polygons, template_raster, field = 1, background = 0)

# Plot
plot(forest_raster, main = "Forest Cover Mask")

Rasterizing a vector dataset with a specific attribute

...

This is useful when you want to preserve numerical or categorical information from the vector data.

...

Code Block
languager
# Load administrative boundaries
admin_boundaries <- vect("admin_boundaries.shp")

# Assuming there's a 'population' column in the vector data
population_raster <- rasterize(admin_boundaries, template_raster, field = "population", background = 0)

# Plot
plot(population_raster, main = "Population Density")

Creating a distance raster from vector data

...

This is useful for proximity analysis, such as distance to roads or water bodies.

...

Writing the new dataset to disk

Code Block
languager
# Function to generate the output filename
generate_output_filename <- function(template_path, availability_date, feature_name) {
  # Extract the base parts of the template filename
  template_basename <- basename(template_path)
  parts <- strsplit(template_basename, "_")[[1]]
  
  # Construct the new filename
  new_filename <- paste(parts[1], parts[2], availability_date, feature_name, sep="_")
  
  # Ensure the filename ends with .tif
  if (!endsWith(new_filename, ".tif")) {
    new_filename <- paste0(new_filename, ".tif")
  }
  
  return(new_filename)
}

# Get user input for availability date and feature name
availability_date <- readline(prompt = "Enter the availability date (YYYY-MM-DD): ")
feature_name <- readline(prompt = "Enter the name of your new feature: ")

# Generate the output filename
output_filename <- generate_output_filename(template_raster, availability_date, feature_name)

# Construct the full output path
output_path <- file.path(dirname(template_raster), output_filename)

# Write the result to a file
writeRaster(final_raster, output_path)

cat("Raster saved as:", output_path, "\n")

This script does the following:

...

Defines a function generate_output_filename that takes the template path, availability date, and feature name as inputs.

...

The standard format is: {TILE_ID}_{DATE}_{FEATURE}.tif

Where:

  • {TILE_ID} is the geographic identifier (e.g., "00N_010E")

...

Constructs a new filename using the tile identifier, user-specified availability date, and feature name.

...

Ensures the filename ends with ".tif".

...

Prompts the user to input the availability date and feature name.

...

Generates the output filename using the function.

...

Constructs the full output path in the same directory as the template raster.

...

Writes the raster to the generated filename.

...

Prints the path where the raster was saved.

Example usage:

...

  • {DATE} is the availability or creation date in YYYY-MM-01 format. The day numbers should always be 01

  • {FEATURE} is a descriptive name of the raster's content. This should not contain underscores

Example: "00N_010E_20212023-0106-01_forestfirevegetationdensity.tif", and the user inputs:

  • Availability date: 2023-06-30

  • Feature name: vegetation_density

The output file would be named: "00N_010E_2023-06-30_vegetation_density.tif"

This approach ensures that the output filename maintains the structure of the template filename while allowing for user-specified dates and feature names. It also places the new file in the same directory as the template, maintaining the file organization.

When creating new rasters, users should:

  1. Use the same tile identifier as the template raster.

  2. Choose an appropriate date that represents when the data becomes available or relevant.

  3. Select a clear, concise name for the feature they've created.

  4. Ensure the file is saved as a GeoTIFF (.tif extension).

The raster should be stored in the input/preprocessed/{TILE_ID} folder