Hansen Forest Loss 2020 (Rondonia, Brazil)

change-detection easy UMD Hansen Global Forest Change 2024 v1.12

Ground Truth

1.46
percent
10.0%
Tolerance
3
Runs
2
Passed

Calibrated from GEE execution on 2026-03-29 (actual: 1.462%). Rondonia is one of the most active deforestation fronts in the Brazilian Amazon. Cross-platform variation expected from threshold handling and pixel counting methods. Hansen GFC is a static image product so cross-platform data differences should be minimal.

Run Results

Workflow Model Backend Status Answer Error Cost Latency
exec gold folia-rust PASS 1.8735 28.3% --- 17ms
exec gold gee PASS 1.4619343475365103 0.1% $0.000025 446ms
exec gold qgis FAIL 1.8735 28.3% --- 200ms

Requirements

Data Sources
  • Hansen Global Forest Change 2024 v1.12
Operations
raster_threshold_mask raster_calc basic_stats

Gold Spec (folia.yaml)

Known-correct folia spec for this problem. This is the reference implementation used for backend quality testing.

Interactive map powered by <folia-view>. Requires pre-staged data to render layers.
View Raw Spec
# Platform Comparison: Hansen Forest Loss -- Gold Spec
#
# Compute percentage of originally forested area lost in 2020
# using the Hansen Global Forest Change 2024 dataset.
# Rondonia, Brazil.
# Ground truth: ~1.46% forest loss in 2020.
#
# This spec is designed to run through both the Python backend and
# browser-wasm executor (folia bench exec -b browser-wasm).

name: hansen-forest-loss
version: "1.0"
description: >
  Hansen Global Forest Change analysis: percentage of forest (>50%
  tree cover in 2000) lost in year 2020. Rondonia, Brazil.
  Ground truth: ~1.46% (calibrated from GEE).

settings:
  default_bbox: [-63.0, -11.0, -62.0, -10.0]
  default_crs: EPSG:4326

layers:

  # ============================================================
  # SOURCE LAYERS
  # ============================================================

  source/gfc:
    uri: catalog://umd/hansen/gfc-2024-v1-12
    type: raster
    description: >
      Hansen Global Forest Change 2024 v1.12.
      Bands: treecover2000, lossyear, gain, datamask.
    params:
      bbox: [-63.0, -11.0, -62.0, -10.0]

  # ============================================================
  # COMPUTE: FOREST MASKS
  # ============================================================

  compute/forest-2000:
    type: raster
    description: >
      Binary mask: tree cover > 50% in year 2000.
    compute:
      op: raster_threshold_mask
      inputs:
        data: { layer: source/gfc, band: treecover2000 }
      params:
        threshold: 50
        operator: gt

  compute/loss-2020:
    type: raster
    description: >
      Binary mask: pixels with loss year = 20 (year 2020).
    compute:
      op: raster_calc
      inputs:
        lossyear: { layer: source/gfc, band: lossyear }
      params:
        expression: "where(lossyear == 20, 1, 0)"

  compute/forest-lost-2020:
    type: raster
    description: >
      Binary mask: originally forested pixels lost in 2020.
    compute:
      op: raster_calc
      inputs:
        forest: { layer: compute/forest-2000 }
        loss: { layer: compute/loss-2020 }
      params:
        expression: "forest * loss"

  # ============================================================
  # RESULT: LOSS PERCENTAGE
  # ============================================================

  result/forest-total:
    type: table
    description: >
      Total number of forested pixels in 2000.
    compute:
      op: analysis_zonal_stats
      params:
        stats: [sum]
      inputs:
        raster: { layer: compute/forest-2000 }

  result/loss-total:
    type: table
    description: >
      Total number of forested pixels lost in 2020.
    compute:
      op: analysis_zonal_stats
      params:
        stats: [sum]
      inputs:
        raster: { layer: compute/forest-lost-2020 }

  result/loss-pct:
    type: table
    description: >
      Percentage of originally forested area lost in 2020.
      Ground truth: ~1.46%.
    compute:
      op: raster_calc
      inputs:
        lost: { layer: result/loss-total }
        total: { layer: result/forest-total }
      params:
        expression: "(lost / total) * 100"

LLM Prompt

The prompt given to LLMs in single-shot workflow benchmarks.

Problem: Compute the percentage of originally forested area lost
in 2020 using the Hansen Global Forest Change dataset.

Methodology:
- Tree cover > 50% in year 2000 = forested
- Loss year band value 20 = lost in 2020
- Compute: (forested pixels lost in 2020) / (total forested pixels) * 100
- Report as percentage of originally forested area

Study area: -63.0, -11.0, -62.0, -10.0 (Rondonia, Brazil).
Data: Hansen Global Forest Change 2024 v1.12.
Expected answer: approximately 1.46% forest loss in 2020.