Pro Tools Technical Reference

Overview

This manual provides customer-facing technical documentation for Whitebox Workflows Pro tools, organized across six functional bundles:

  1. Earth Observation and SAR Operations — Remote sensing analysis, SAR processing, and multi-sensor integration
  2. Environmental Risk and Compliance — Risk assessment, environmental monitoring, and compliance workflows
  3. Terrain and Infrastructure Siting — Site suitability analysis for renewable energy, infrastructure, and utility planning
  4. LiDAR and Forest Analytics — Point cloud analysis, terrain products, and forestry intelligence
  5. Precision Agriculture Intelligence — Soil-crop-climate integration, yield analysis, and field operations
  6. Network Planning and Operations — Linear asset management, service area optimization, and routing

Audience

This reference is designed for:

  • Customers deploying licensed Pro workflows in production
  • GIS practitioners integrating Whitebox Pro tools into existing pipelines
  • Technical analysts validating outputs for decision and reporting workflows
  • Customer teams onboarding new users to repeatable Pro workflows

Entitlement Note

Your organization may license a subset of the full Pro catalog. Use this manual as a complete reference, then focus on the tool chapters included in your licensed bundles.

If a tool appears in this manual but not in your runtime environment, contact your account administrator or support channel to confirm bundle access.

Document Structure

Each tool documentation includes:

  • Purpose — What the tool does and typical use cases
  • Background — Conceptual foundation, algorithms, and methodological context
  • Inputs — Data requirements, formats, and validation rules
  • Parameters — Complete parameter guide with default values, valid ranges, and interdependencies
  • Outputs — Output data formats, metadata, and interpretation
  • Validation — Quality checks, common errors, and diagnostic guidance
  • Troubleshooting — Known issues, workarounds, and performance considerations
  • Example — Real-world workflow example with sample data and expected results
  • References — Publications, standards, and related tools

Getting Help

  • For API usage questions, refer to the Whitebox Workflows Python/R API Documentation
  • For QGIS plugin integration, see the QGIS Plugin User Guide
  • For licensing and Pro tool access, contact support through your organization's support channel

Last Updated: May 2026 Whitebox Geospatial Inc.

Customer Quickstart

Goal

Use this quickstart to get productive with your licensed Whitebox Workflows Pro tools as quickly as possible.

  1. Confirm which bundles and tools your organization has licensed.
  2. Open the relevant bundle overview chapter in this manual.
  3. Start with the first workflow listed in that bundle order.
  4. Run the tool once on a small pilot area before full production use.
  5. Validate outputs using the chapter's validation and troubleshooting sections.

Minimal First-Run Workflow

  1. Identify your tool chapter in the table of contents.
  2. Read sections in this order:
    • Purpose
    • Inputs
    • Parameters
    • Outputs
    • Example
  3. Copy the example and adapt file paths and parameters to your dataset.
  4. Run on pilot data.
  5. Review output quality before scaling.

Validation Checklist Before Production

  • Inputs are in compatible CRS, resolution, and extent.
  • Required preprocessing (if any) has been completed.
  • Parameters are documented for reproducibility.
  • Output looks spatially plausible and matches expected behavior.
  • Confidence and quality indicators are reviewed where available.

Common Onboarding Mistakes

  • Running full extents before validating on a pilot area.
  • Skipping input harmonization checks.
  • Reusing parameters from unrelated use cases.
  • Ignoring confidence or QA outputs.

Getting Support Faster

When contacting support, include:

  1. Tool name
  2. Data type and source
  3. Parameter set used
  4. Error message or unexpected behavior
  5. Sample output screenshot or summary

Next Steps

After your first successful run:

  1. Save your parameters as a standard profile.
  2. Define acceptance criteria for your team.
  3. Repeat on full project extents.
  4. Track output consistency across reporting cycles.

Environmental Risk and Compliance Bundle

Overview

The Environmental Risk and Compliance bundle provides specialized tools for environmental assessment, risk quantification, and compliance tracking. Applications include wetland management, urban impact analysis, natural hazard assessment, carbon accounting, and reclamation monitoring.

Key Concepts

Hydrogeomorphic Classification

Classification of wetlands by hydrologic source, outlet type, and geomorphic setting to predict function and vulnerability.

Landscape Risk Assessment

Quantitative evaluation of susceptibility to hazards (landslides, wildfire, flooding) using terrain, geology, and climate data.

Environmental Compliance

Tracking and auditing environmental attributes against regulatory standards (wetland delineation, riparian buffers, habitat quality).

Verification and Audit

Independent quantification and documentation of environmental outcomes (carbon sequestration, habitat restoration) for certification programs.

Typical Workflows

Wetland Mapping and Assessment

  1. Delineate potential wetland areas using topography, imagery, soils
  2. Classify by hydrogeomorphic type (Wetland Hydrogeomorphic Classification)
  3. Assess ecological function and vulnerability
  4. Report for regulatory compliance

Landslide Risk Assessment

  1. Prepare terrain (DEM, slope, aspect, curvature)
  2. Compile geological/soil data (lithology, depth, cohesion)
  3. Calculate susceptibility index (Landslide Susceptibility Assessment)
  4. Prioritize mitigation areas
  5. Monitor post-mitigation recovery

Carbon Verification Workflow

  1. Estimate baseline carbon stock (forest structure, soil)
  2. Implement restoration or conservation practice
  3. Monitor post-intervention carbon outcomes (repeat imagery, field surveys)
  4. Audit results against claims (Carbon Verification Audit)
  5. Generate verification report for carbon market or compliance program

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. Carbon Verification Audit
  2. Wildfire Fuel Risk Analysis
  3. Landslide Susceptibility Assessment
  4. Mine Reclamation Compliance Tracker
  5. Urban Expansion Impact Assessment
  6. Wetland Hydrogeomorphic Classification
  7. River Corridor Health Assessment

Performance and Compliance Considerations

  • Regulatory alignment: Wetland classifications must match applicable standards (Cowardin, HGM, regional variants)
  • Precision requirements: Hazard mapping should reflect actual field-verified risk classes
  • Temporal resolution: Monitoring workflows require consistent acquisition schedules
  • Audit documentation: All methods, data sources, and calculations must be documented for compliance review

References

  • Ramsar Convention on Wetlands (1971, as amended)
  • USGS Wetland Classification (Cowardin et al., 1979)
  • Intergovernmental Panel on Climate Change (IPCC) Guidelines for Greenhouse Gas Inventories

For customer delivery, this bundle performs best when packaged as a compliance-ready workflow set rather than isolated analyses.

Recommended packaging:

  1. Baseline condition map package
  2. Risk/compliance classification package
  3. Validation and uncertainty appendix
  4. Executive summary with pass/fail and priority actions

This structure helps non-technical decision makers quickly understand what changed, why it matters, and what action is required.

Deployment Notes

  • A practical rollout pattern is to begin with one high-priority use case (for example wetland permitting support or reclamation audit), then expand to adjacent workflows once outputs are validated.
  • Include a reproducibility annex (inputs, parameter profile, run timestamp, software version) to reduce audit friction.
  • For regulated customers, prioritize conservative thresholds in production and reserve exploratory thresholds for technical review mode.

Carbon Verification Audit

Purpose

Carbon Verification Audit quantifies and verifies carbon sequestration outcomes in forests, wetlands, or agricultural lands against baseline and project claims. Generates audit documentation for carbon markets, regulatory compliance, and ESG reporting.

Typical Questions This Tool Helps Answer

  • Does the NDVI-based carbon proxy show net vegetation gain or loss between baseline and current scenes, and what is the magnitude of change relative to per-pixel uncertainty?
  • What fraction of the study area shows confirmed vegetation recovery versus loss, and how does biome-calibrated NDVI-to-carbon scaling affect the net proxy estimate?
  • What methodology reference and MRV template are recorded in the audit contract, and are the gain/loss classification thresholds appropriate for the selected profile and biome?

Background

Environmental risk workflows are built around source-pathway-receptor logic: identify stressors, model transport or exposure pathways, and estimate consequence to assets or ecosystems. Inputs and model assumptions define the validity envelope, so uncertainty documentation is as important as the final risk score.

In practice, these tools are most defensible when used comparatively across scenarios, with explicit thresholds and confidence narratives. Interpretation should focus on rank ordering and mitigation prioritization, not absolute certainty.

Carbon sequestration auditing links biomass/land-cover dynamics to accounting-ready carbon stock and flux estimates. Traceability requirements demand clear lineage from input assumptions through summary metrics.

Methodological Considerations

  • Calibrate thresholds and class boundaries against local context whenever possible; transferred defaults should be treated as provisional.
  • Evaluate scenario sensitivity explicitly so mitigation priorities are robust to uncertainty in assumptions.
  • Keep lineage between assumptions, intermediate metrics, and summary outputs for audit-ready interpretation.

Practical Interpretation Pitfalls

A frequent mistake is interpreting risk classes as deterministic outcomes. These products are comparative planning aids and should be paired with field validation and expert review.

Inputs

ParameterTypeRequiredDescription
baseline_bundleRaster (multiband)YesBaseline scene bundle.
baseline_red_band_indexIntegerNoRed band index in baseline bundle; default 0.
baseline_nir_band_indexIntegerNoNIR band index in baseline bundle; default 1.
current_bundleRaster (multiband)YesCurrent scene bundle.
current_red_band_indexIntegerNoRed band index in current bundle; default 0.
current_nir_band_indexIntegerNoNIR band index in current bundle; default 1.
biomass_proxyRasterNoOptional LiDAR biomass proxy for stronger stand-level interpretation.

Parameters

  • biome_class (optional): biome coefficient pack (tropical_forest, boreal_forest, grassland_shrub, agricultural_cropland, wetland_aquatic, none).
  • profile (optional): conservative, balanced, aggressive.
  • zone_block_cells (optional): block size for verification polygons; default 16.
  • baseline_date and current_date (optional): valid calendar dates in YYYY-MM-DD format.
  • mrv_template (optional): verra_vcs_vm0010, american_carbon_registry, gold_standard, none.
  • methodology_reference (optional): carbon methodology string included in output contract.
  • output_prefix (required): base output name used for all emitted artifacts.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Baseline NDVI rasterndvi_baselineRasterBaseline NDVI layer.
Current NDVI rasterndvi_currentRasterCurrent NDVI layer.
NDVI delta rasterndvi_deltaRasterNDVI change layer.
Carbon proxy rastercarbon_proxyRasterCarbon proxy change layer (biome-scaled, optional biomass blended).
Change confidence rasterchange_confidenceRasterConfidence in detected change signal.
Uncertainty rasteruncertaintyRasterPixel-level uncertainty estimate.
Verification zones vectorverification_zonesVector (GPKG)Aggregated polygons with gain/loss/neutral class and summary metrics.
Audit contract JSONaudit_contractJSONFull run contract including MRV metadata and output inventory.
Compliance evidence packetcompliance_evidence_packetJSONSubmission-oriented compliance packet for regulator/auditor review.
Regulator-ready tableregulator_ready_tableCSVFlat table with key metrics and MRV context for filing workflows.
Optional reporthtml_reportHTMLOptional report artifact for stakeholder review.

Important MRV note

The workflow explicitly labels outputs as remote-sensing-derived carbon proxy results. Field-based verification is still required for formal credit issuance.

Summary contract also includes:

  • output_semantics
  • confidence_contract
  • interpretation_warnings

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.carbon_sequestration_verification_audit(
        baseline_bundle="baseline_scene.tif",
        baseline_red_band_index=0,
        baseline_nir_band_index=1,
        current_bundle="current_scene.tif",
        current_red_band_index=0,
        current_nir_band_index=1,
        biomass_proxy="forest_structure_biomass_proxy.tif",
        biome_class="tropical_forest",
        profile="balanced",
        zone_block_cells=16,
        baseline_date="2021-06-15",
        current_date="2024-06-20",
        mrv_template="verra_vcs_vm0010",
        methodology_reference="Verra VM0010 v1.3",
        output_prefix="outputs/carbon_audit"
)

References

  • IPCC (2019). "2019 Refinement to the 2006 IPCC Guidelines." UNFCCC Secretariat.
  • Verified Carbon Standard (VCS) Agriculture, Forestry & Other Land Use Methodology Standards.

Parameter Interaction Notes

Results are most sensitive to profile thresholds, biome pack choice, and time separation between dates.

  • Conservative profile reduces false positives but may under-detect subtle change.
  • Aggressive profile increases sensitivity and should be paired with careful QA.
  • Date separation affects temporal uncertainty terms in the contract.

QA and Acceptance Criteria

Use a staged acceptance approach for Carbon Verification Audit:

  1. Validate bundle bands and index mappings.
  2. Validate optional dates and MRV template selection.
  3. Confirm output artifacts are present and consistent with contract metadata.
  4. Review gain/loss/uncertainty outputs with domain experts.

Recommended acceptance checks:

  • audit_contract.workflow is correct.
  • Summary fractions are coherent and bounded.
  • Uncertainty output and decomposition fields are populated.

Advanced Operational Guidance

For production deployment of Carbon Verification Audit:

  • Keep methodology references and template choices consistent across reporting cycles.
  • Archive contracts and reports for audit reproducibility.
  • Use verification zones for targeted field sampling design.

Implementation Patterns

Common implementation patterns with Carbon Verification Audit:

  • Monitoring run for periodic trend tracking.
  • Biomass-enhanced run when LiDAR proxy is available.
  • Compliance-prep run with full MRV metadata fields.

Use Carbon Verification Audit together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Carbon Verification Audit is best used when you need defensible outputs for permitting, compliance reporting, or external audit review.

What this workflow helps you achieve:

  • Reduces interpretation ambiguity by standardizing method and output structure.
  • Produces documentation-ready outputs that can be shared with regulators and stakeholders.
  • Shortens time from analysis to decision package.

Results Delivery Checklist

Before handing results to a customer or regulator:

  1. Confirm AOI, CRS, and temporal scope match project statement of work.
  2. Verify assumptions and threshold values are documented in the run metadata.
  3. Export both primary outputs and summary tables for non-technical stakeholders.
  4. Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
  5. Archive parameter profile used for reproducibility.

Common Questions

Q: Can this output be used directly in compliance submissions?
A: It is suitable for pre-verification evidence packaging, but formal issuance still requires field-validated MRV workflows.

Q: How do we explain uncertainty to a non-technical reviewer?
A: Use the uncertainty raster plus the contract decomposition (spectral, temporal, atmospheric, biome model terms).

Q: What is the most common failure mode in delivery?
A: Incorrect band mapping or date/metadata mismatches between reporting cycles.

Q: Why is confidence low even where vegetation seems to increase?
A: Confidence also reflects signal quality and threshold behavior, not only directional change.

Q: Why is biomass information not reflected in one run?
A: Biomass blending occurs only when the biomass raster can be loaded and harmonized to the baseline grid.

Q: Why do gain/loss percentages change after switching profile?
A: Profile settings adjust sensitivity thresholds, so classification fractions shift by design.

Q: How do we choose the right biome class?
A: Use the dominant biome for the project area because biome class affects proxy scaling and uncertainty assumptions.

Q: Why do uncertainty values appear similar across large areas?
A: The uncertainty model uses run-level propagated components, so variation is often more temporal/parameter-driven than spatial.

Q: What should we tell stakeholders about the MRV disclaimer?
A: The outputs are audit-support evidence, not final certified credits; field verification and formal program steps remain required.

Q: Why are zone classes different from pixel-level patterns?
A: Verification zones aggregate block-level behavior for planning and reporting, which smooths local variation.

Q: How should we compare two reporting periods fairly?
A: Keep profile, biome class, and preprocessing choices consistent and ensure valid paired dates.

Q: What does methodology_reference do in practice?
A: It records lineage in the contract so auditors can trace which methodology framing guided interpretation.

Wildfire Fuel Risk Analysis

What This Tool Does

Wildfire Fuel Risk Analysis combines moisture, fuel structure, optional terrain, and optional weather context to map wildfire risk and produce planning zones.

Typical Questions This Tool Helps Answer

  • Which landscape units have the highest combined fuel loading and terrain-amplified fire spread potential this season?
  • Where does ladder fuel continuity create high crown-fire transition risk that warrants priority treatment or prescribed burn planning?
  • Which high-risk fuel zones overlap structures, evacuation routes, or suppression assets and should be addressed first?

When To Use

  • Fuel-risk screening over large areas
  • Mitigation prioritization and treatment planning
  • Scenario comparisons with different weather or sensitivity profiles

What You Need

InputDescription
Optical multiband rasterMust include red and NIR bands; SWIR is optional.
Optional structure rasterBiomass/canopy proxy for ladder and canopy fuel refinement.
Optional terrain rastersSlope and aspect for spread amplification effects.

Key Settings

SettingDefaultGuidance
output_prefixrequiredPrefix used for all emitted artifacts.
profilebalancedChoose conservative, balanced, or aggressive sensitivity.
fuel_modelnoneSelect regional preset when appropriate.
zone_block_cells20Controls risk-zone aggregation scale.
swir_band_indexunsetWhen set, moisture uses NDMI; otherwise NDWI proxy is used.

Available fuel models: temperate_mixed_forest, boreal_sparse, mediterranean_shrub, tropical_dense, grassland_savanna, none.

What You Get

DeliverableFormatDescription
moisture_indexGeoTIFFMoisture signal raster.
fuel_load_classGeoTIFFFuel class raster (1 sparse, 2 surface, 3 ladder, 4 canopy).
ladder_fuel_continuityGeoTIFFVertical continuity index raster.
risk_matrixGeoTIFFPer-cell wildfire risk score.
risk_zonesGeoPackageAggregated planning zones with mean/max risk and dominant fuel.
summaryJSONMetrics, configuration, weather factors, and output references.
html_reportHTMLOptional report page.

risk_zones fields: ZONE_ID, MEAN_RISK, MAX_RISK, DOM_FUEL, RISK_TIER, PIXEL_COUNT.

Runtime Output Keys

result.outputs["moisture_index"]
result.outputs["fuel_load_class"]
result.outputs["ladder_fuel_continuity"]
result.outputs["risk_matrix"]
result.outputs["risk_zones"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which output should incident teams review first? A: Start with summary.high_risk_fraction and summary.extreme_risk_fraction, then map priority blocks using risk_zones.RISK_TIER.

Q: What is a common interpretation mistake? A: Treating dominant fuel class (DOM_FUEL) as final risk severity without considering moisture and terrain/weather amplification.

Q: Which settings most change extreme-risk area? A: dry_moisture_threshold, wet_moisture_threshold, and dryness_severity_factor usually have the largest effect.

Q: How should operations use these outputs? A: Use high-risk zones to prioritize fuels treatment and response pre-positioning, then refine by access and suppression constraints.

Results Delivery Checklist

  • Band indices were verified against the optical bundle
  • Optional inputs were confirmed to align to analysis grid
  • Risk matrix and risk zones were visually reviewed
  • Summary fractions and weather factors were checked

Purpose

Wildfire Fuel Risk Analysis quantifies landscape fuel characteristics (woody biomass, canopy structure, continuity) and integrates with climate/topography to assess wildfire ignition and spread risk. Enables prevention planning and fire management prioritization.

Background

Wildfire fuel-risk analysis combines vegetation condition, structural continuity, and terrain-weather amplification into a comparative hazard surface. A useful conceptual model is:

$$R(x)=w_m M(x)+w_f F(x)+w_l L(x)+w_t T(x)+w_w W(x)$$

Where $M$ is moisture stress, $F$ is fuel load class pressure, $L$ is ladder-fuel continuity, $T$ is terrain amplification, and $W$ is weather modulation.

Fuel and Moisture Interaction

Moisture indicators (for example NDMI/NDWI-style proxies) help distinguish currently receptive fuels from structurally loaded but less active areas. In practice, high structural load with low dryness may rank lower than moderate load under acute dryness.

Zone-Level Aggregation Logic

Risk-zone polygons summarize cell-level behavior into operational blocks. Zone statistics (mean/max risk, dominant fuel label, tier assignment) are intended for treatment sequencing and patrol planning, not parcel-level deterministic prediction.

Methodological Considerations

  • Validate input band semantics and index modes before interpreting moisture-driven risk variation.
  • Treat weather fields as scenario controls; report assumptions with each run.
  • Re-run with sensitivity perturbations on moisture thresholds and severity factors before final prioritization.

Practical Interpretation Pitfalls

Common errors include treating dominant fuel label as final risk severity, ignoring uncertainty introduced by missing optional context layers, and over-committing to a single threshold configuration.

Inputs

Required runtime argument:

  • optical_bundle

Common runtime arguments:

  • red_band_index, nir_band_index, swir_band_index
  • biomass_proxy, slope, aspect
  • fuel_model, profile, zone_block_cells
  • output_prefix (required)
  • air_temperature_c, relative_humidity_pct, wind_speed_kmh

Parameters

Defaults and behavior:

  • profile defaults to balanced.
  • fuel_model defaults to none.
  • zone_block_cells defaults to 20.
  • swir_band_index is optional; when absent, the workflow uses an NDWI-style moisture proxy.

Outputs

Primary runtime outputs:

  • moisture_index
  • fuel_load_class
  • ladder_fuel_continuity
  • risk_matrix
  • risk_zones
  • summary
  • html_report

risk_zones includes ZONE_ID, MEAN_RISK, MAX_RISK, DOM_FUEL, RISK_TIER, and PIXEL_COUNT.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.wildfire_fuel_loading_and_risk_matrix(
	optical_bundle="optical_scene.tif",
	red_band_index=0,
	nir_band_index=1,
	swir_band_index=2,
	biomass_proxy="forest_structure_biomass_proxy.tif",
	slope="slope.tif",
	aspect="aspect.tif",
	fuel_model="temperate_mixed_forest",
	profile="balanced",
	zone_block_cells=20,
	output_prefix="wildfire_risk"
)

References

  • Tool implementation: wbtools_pro/src/tools/workflow_products/wildfire_fuel_loading_and_risk_matrix.rs
  • Wildland fire behavior interpretation practice (fuel/moisture/terrain/weather decomposition)

Parameter Interaction Notes

Prioritize sensitivity checks on profile/threshold settings that materially change output distributions and decision classes.

QA and Acceptance Criteria

Minimum acceptance:

  • Band indices validated against the optical bundle layout.
  • Optional rasters aligned to the analysis grid.
  • summary includes risk fractions and weather/modulation context fields.
  • risk_zones contains tier and dominant-fuel attributes expected by dispatch/planning workflows.

Advanced Operational Guidance

For production use, preserve run metadata, lock approved profiles, and version output packages for reproducibility and auditability.

Implementation Patterns

Common pattern: baseline run, sensitivity run on 1-2 parameters, then locked-profile production run for delivery.

See upstream conditioning and downstream validation tools in the same bundle for end-to-end workflow consistency.

When To Use This Workflow

Use Wildfire Fuel Risk Analysis when you need repeatable, source-contract-aligned outputs for planning, reporting, and stakeholder review.

Landslide Susceptibility Assessment

Purpose

Landslide Susceptibility Assessment quantifies landscape susceptibility to shallow and deep-seated landslides using terrain, geology, and hydrologic data. Outputs probability-based susceptibility maps for hazard zoning, planning, and risk reduction.

Typical Questions This Tool Helps Answer

  • Which areas of the study region have the highest combined slope, curvature, and elevation susceptibility score, and what fraction exceeds the high-risk threshold?
  • How does susceptibility change when elevated rainfall intensity is added, and which areas shift from moderate to high or extreme risk class?
  • Which high-susceptibility slopes intersect infrastructure corridors or settlement footprints and require priority mitigation attention?

Background

Environmental risk workflows are built around source-pathway-receptor logic: identify stressors, model transport or exposure pathways, and estimate consequence to assets or ecosystems. Inputs and model assumptions define the validity envelope, so uncertainty documentation is as important as the final risk score.

In practice, these tools are most defensible when used comparatively across scenarios, with explicit thresholds and confidence narratives. Interpretation should focus on rank ordering and mitigation prioritization, not absolute certainty.

Susceptibility mapping combines terrain predisposition, hydrologic forcing proxies, and material/land-cover context to rank likely failure zones. Outputs are probabilistic or relative-risk indicators, not deterministic failure predictions.

Methodological Considerations

  • Calibrate thresholds and class boundaries against local context whenever possible; transferred defaults should be treated as provisional.
  • Evaluate scenario sensitivity explicitly so mitigation priorities are robust to uncertainty in assumptions.
  • Keep lineage between assumptions, intermediate metrics, and summary outputs for audit-ready interpretation.

Practical Interpretation Pitfalls

A frequent mistake is interpreting risk classes as deterministic outcomes. These products are comparative planning aids and should be paired with field validation and expert review.

Inputs

ParameterTypeRequiredDescription
demRaster pathYesDigital elevation model.
rainfall_intensityRaster pathNoOptional rainfall-intensity proxy normalized to [0,1].
profileEnumNofast, balanced, conservative (default balanced).
factor_contribution_modeEnumNonone, basic, detailed (default basic).
susceptibility_thresholdFloatNoHigh-risk threshold in [0,1] (default 0.65).
max_zone_featuresIntegerNoMax number of risk-zone polygons (default 5000).
output_prefixStringNoOutput prefix (default landslide).

Parameters

Profile setting adjusts relative factor influence:

  • fast: stronger slope weighting for rapid screening.
  • balanced: mixed slope/curvature/elevation/rain weighting.
  • conservative: higher curvature emphasis for stricter terrain interpretation.

Factor contribution mode controls summary explainability detail:

  • none: hides factor-weight details.
  • basic: includes core weights and dominant factor.
  • detailed: includes ranked factor percentages.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Susceptibility rastersusceptibilityGeoTIFFContinuous susceptibility score (0-1).
Trigger-pressure rastertrigger_pressureGeoTIFFTrigger-pressure surface (0-1).
Confidence rasterconfidenceGeoTIFFAgreement confidence (0-1).
Risk zones vectorrisk_zonesGeoPackageHigh-risk polygons with class labels.
Summary contractsummaryJSONStatus metrics, explainability, and output references.
Optional reporthtml_reportHTMLOptional report for stakeholders.

Output filenames:

  • <output_prefix>_susceptibility.tif
  • <output_prefix>_trigger_pressure.tif
  • <output_prefix>_confidence.tif
  • <output_prefix>_risk_zones.gpkg
  • <output_prefix>_summary.json
  • <output_prefix>_report.html

Risk-zone attributes:

  • ZONE_ID
  • SUSC
  • CONF
  • CLASS

Summary-contract additions:

  • output_semantics: machine-readable output intent and certification scope for each output key.
  • confidence_contract: confidence metric declaration including threshold and low-confidence fraction.
  • interpretation_warnings: plain-language warnings describing proxy limits and run-to-run comparison constraints.

Validation

  • Confirm inputs and parameter ranges are valid.
  • Verify threshold and profile values in summary JSON.
  • Verify zone count is bounded by max_zone_features.
  • Review explainability notes before external delivery.
  • Confirm summary includes output_semantics, confidence_contract, and interpretation_warnings.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.landslide_susceptibility_assessment(
        dem="dem_10m_region.tif",
        rainfall_intensity="rainfall_intensity_norm.tif",
        profile="balanced",
        factor_contribution_mode="basic",
        susceptibility_threshold=0.65,
        max_zone_features=5000,
        output_prefix="outputs/landslide/assessment"
)

References

  • Guzzetti, F., Carrara, A., Cardinali, M., & Reichenbach, P. (1999). "Landslide Hazard Evaluation." Eng. Geol. 58(3–4), 353–372.

Parameter Interaction Notes

Results are most sensitive to profile selection, rainfall availability, and threshold choice.

  • Higher thresholds produce fewer high-risk zones.
  • Lower thresholds broaden warning areas and zone counts.
  • If rainfall is absent, the workflow uses a neutral trigger proxy and this should be documented.

QA and Acceptance Criteria

Use a staged acceptance approach for Landslide Susceptibility Assessment:

  1. Confirm DEM and optional rainfall inputs are valid.
  2. Confirm expected rasters, vector zones, and summary outputs are generated.
  3. Validate susceptibility threshold and resulting high-risk fractions.
  4. Confirm factor contribution detail level matches selected mode.

Recommended acceptance checks:

  • Summary workflow ID is correct.
  • High-risk fraction aligns with mapped hotspots.
  • Zone output size is within operational limits.

Advanced Operational Guidance

For production deployment of Landslide Susceptibility Assessment:

  • Use basic mode for internal operations and detailed mode for formal reporting.
  • Tune threshold + zone cap together to control delivery volume.
  • Archive summary JSON with project records.

Implementation Patterns

Common implementation patterns with Landslide Susceptibility Assessment:

  • Baseline screening run (balanced, basic).
  • Explainability run (detailed) for stakeholder package.
  • Threshold sensitivity run to bracket operational risk.

Use Landslide Susceptibility Assessment together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Landslide Susceptibility Assessment is best used when you need defensible outputs for permitting, compliance reporting, or external audit review.

What this workflow helps you achieve:

  • Reduces interpretation ambiguity by standardizing method and output structure.
  • Produces documentation-ready outputs that can be shared with regulators and stakeholders.
  • Shortens time from analysis to decision package.

Results Delivery Checklist

Before handing results to a customer or regulator:

  1. Confirm AOI, CRS, and temporal scope match project statement of work.
  2. Verify assumptions and threshold values are documented in the run metadata.
  3. Export both primary outputs and summary tables for non-technical stakeholders.
  4. Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
  5. Archive parameter profile used for reproducibility.

Common Questions

Q: Can this output be used directly in compliance submissions?
A: Yes, when accompanied by documented inputs, parameter profile, and validation evidence.

Q: How do we explain uncertainty to a non-technical reviewer?
A: Use confidence/quality layers and summarize uncertainty in plain-language ranges (high/moderate/low confidence).

Q: What is the most common failure mode in delivery?
A: Scope mismatch (extent, date range, or baseline assumptions) rather than algorithmic failure.

Q: What does factor_contribution_mode=none do?
A: It intentionally suppresses factor-weight details in summary outputs.

Q: Why are there many risk-zone polygons?
A: Each qualifying high-risk area can generate many features; adjust threshold and max_zone_features to control output volume.

Q: What should teams inspect first?
A: Review susceptibility and confidence together, then check summary high-risk fraction and zone counts.

Q: Is rainfall required?
A: No. It is optional, but including it improves trigger realism.

Mine Reclamation Compliance Tracker

Purpose

Mine Reclamation Compliance Tracker monitors mine site reclamation progress against regulatory closure plans and performance standards. Tracks landform stability, vegetation recovery, water quality, and habitat restoration. Generates compliance reports for regulatory agencies.

Typical Questions This Tool Helps Answer

  • Is the site on track to meet closure plan milestones for vegetation recovery and slope stability at the next regulatory review, and what is the current overall compliance grade?
  • Which reclamation performance indicators are currently below the required threshold, and where are those failures concentrated on the site?
  • Which areas require remedial intervention before the next scheduled inspection, and what evidence supports that prioritization?

Background

Environmental risk workflows are built around source-pathway-receptor logic: identify stressors, model transport or exposure pathways, and estimate consequence to assets or ecosystems. Inputs and model assumptions define the validity envelope, so uncertainty documentation is as important as the final risk score.

In practice, these tools are most defensible when used comparatively across scenarios, with explicit thresholds and confidence narratives. Interpretation should focus on rank ordering and mitigation prioritization, not absolute certainty.

Reclamation compliance tracking compares observed site condition against staged criteria for slope stability, vegetation recovery, drainage behavior, and disturbance footprint. Temporal consistency and threshold governance are central to defensible reporting.

Methodological Considerations

  • Calibrate thresholds and class boundaries against local context whenever possible; transferred defaults should be treated as provisional.
  • Evaluate scenario sensitivity explicitly so mitigation priorities are robust to uncertainty in assumptions.
  • Keep lineage between assumptions, intermediate metrics, and summary outputs for audit-ready interpretation.

Practical Interpretation Pitfalls

A frequent mistake is interpreting risk classes as deterministic outcomes. These products are comparative planning aids and should be paired with field validation and expert review.

Inputs

ParameterTypeRequiredDescription
baseline_bundleMultiband rasterYesBaseline/pre-mining bundle.
current_bundleMultiband rasterYesCurrent monitoring-date bundle.
baseline_red_band_indexIntegerNoBaseline red band index (default 0).
baseline_nir_band_indexIntegerNoBaseline NIR band index (default 1).
current_red_band_indexIntegerNoCurrent red band index (default 0).
current_nir_band_indexIntegerNoCurrent NIR band index (default 1).
slopeRasterNoOptional slope raster (degrees).
reclamation_target_ndviFloatNoTarget NDVI threshold (default 0.35, may be overridden by jurisdiction).
slope_stability_max_degFloatNoMax stable slope threshold in degrees (default 30, may be overridden by jurisdiction).
jurisdictionEnumNoCompliance template (us_federal_mtbs, us_california_mining, us_pennsylvania_coal, aus_western_australia, canada_bc_mines, south_africa_dmre, none).
monitoring_epochIntegerNoOptional epoch label for phase tracking.
site_nameStringNoOptional site/permit identifier.
has_hydrology_evidenceBooleanNoIndicates hydraulic stability evidence is attached (default false).
has_soil_ph_evidenceBooleanNoIndicates soil pH evidence is attached (default false).
has_perennial_vegetation_evidenceBooleanNoIndicates perennial vegetation evidence is attached (default false).
report_interval_monthsIntegerNoReported monitoring cadence (1-120 months) used for diagnostics.
zone_block_cellsIntegerNoZone aggregation block size (default 20).
output_prefixStringYesOutput prefix used for all emitted artifacts.

Parameters

Key runtime behaviors:

  • Computes NDVI baseline/current and NDVI recovery.
  • Computes progress-to-target per cell.
  • Applies milestone grading for vegetation and optional slope.
  • Creates compliance zones and zone narratives.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Baseline NDVI rasterndvi_baselineGeoTIFFBaseline NDVI layer.
Current NDVI rasterndvi_currentGeoTIFFCurrent NDVI layer.
Vegetation recovery rastervegetation_recoveryGeoTIFFNDVI change layer.
Reclamation progress rasterreclamation_progressGeoTIFFProgress-to-target layer [0,1].
Compliance zones vectorcompliance_zonesGeoPackageBlock zones with compliance status fields.
Compliance contractcompliance_contractJSONMilestones, grades, jurisdiction context, zone rationale, outputs, and timings.
Validation diagnosticsvalidation_diagnosticsJSONCompleteness diagnostics for required evidence fields by jurisdiction template.
Summary aliassummaryJSONAlias key to the same contract JSON file as compliance_contract.
Optional reporthtml_reportHTMLOptional stakeholder-facing report.

Output files:

  • <output_prefix>_ndvi_baseline.tif
  • <output_prefix>_ndvi_current.tif
  • <output_prefix>_vegetation_recovery.tif
  • <output_prefix>_reclamation_progress.tif
  • <output_prefix>_compliance_zones.gpkg
  • <output_prefix>_compliance_contract.json
  • <output_prefix>_validation_diagnostics.json
  • <output_prefix>_report.html

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.mine_site_reclamation_compliance_tracker(
    baseline_bundle="baseline_scene.tif",
    baseline_red_band_index=0,
    baseline_nir_band_index=1,
    current_bundle="current_scene.tif",
    current_red_band_index=0,
    current_nir_band_index=1,
    slope="slope_deg.tif",
    reclamation_target_ndvi=0.35,
    slope_stability_max_deg=30.0,
    jurisdiction="none",
    monitoring_epoch=2,
    site_name="Permit BC-2021-0047",
    zone_block_cells=20,
    output_prefix="outputs/reclamation_compliance"
)

References

  • OSMRE (Office of Surface Mining Reclamation and Enforcement) Regulations 30 CFR 816–817.

Parameter Interaction Notes

Outputs are most sensitive to red/NIR band indexing and threshold context.

  • Incorrect band assignment can invert or flatten recovery interpretation.
  • Jurisdiction template settings may supersede local threshold assumptions.
  • Smaller zone blocks increase spatial detail but also variability.

QA and Acceptance Criteria

Use a staged acceptance approach for Mine Reclamation Compliance Tracker:

  1. Confirm bundle inputs and band indices are valid.
  2. Confirm output rasters and compliance contract are generated.
  3. Verify milestone statuses and overall grade against project expectations.
  4. Review per-zone rationale for high-priority remediation areas.

Recommended acceptance checks:

  • Contract workflow ID is correct.
  • Target achievement and recovered area metrics are plausible.
  • Slope milestone state (pass/conditional/fail/not_evaluated) is expected.

Advanced Operational Guidance

For production deployment of Mine Reclamation Compliance Tracker:

  • Keep jurisdiction setting fixed within a compliance cycle.
  • Track monitoring_epoch consistently over time.
  • Archive contract JSON with permit documentation.

Implementation Patterns

Common implementation patterns with Mine Reclamation Compliance Tracker:

  • NDVI-only compliance pass.
  • NDVI + slope full compliance pass.
  • Periodic epoch-based tracking pass.

Use Mine Reclamation Compliance Tracker together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Mine Reclamation Compliance Tracker is best used when you need defensible outputs for permitting, compliance reporting, or external audit review.

What this workflow helps you achieve:

  • Reduces interpretation ambiguity by standardizing method and output structure.
  • Produces documentation-ready outputs that can be shared with regulators and stakeholders.
  • Shortens time from analysis to decision package.

Results Delivery Checklist

Before handing results to a customer or regulator:

  1. Confirm AOI, CRS, and temporal scope match project statement of work.
  2. Verify assumptions and threshold values are documented in the run metadata.
  3. Export both primary outputs and summary tables for non-technical stakeholders.
  4. Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
  5. Archive parameter profile used for reproducibility.

Common Questions

Q: Can this output be used directly in compliance submissions?
A: Yes, when accompanied by documented inputs, parameter profile, and validation evidence.

Q: How do we explain uncertainty to a non-technical reviewer?
A: Use confidence/quality layers and summarize uncertainty in plain-language ranges (high/moderate/low confidence).

Q: What is the most common failure mode in delivery?
A: Scope mismatch (extent, date range, or baseline assumptions) rather than algorithmic failure.

Q: What should teams inspect first after a run?
A: Start with compliance contract summary and milestone status, then check zone rationales.

Q: Why did overall grade drop despite improving NDVI mean?
A: Grade also depends on target achievement fractions and optional slope-stability milestones.

Q: What happens if jurisdiction is set to none?
A: User thresholds are used directly without jurisdiction override templates.

Q: Can this workflow run without slope?
A: Yes, slope milestone is set to not_evaluated and vegetation milestones still run.

Q: Why are some zones marked high priority?
A: Zone rationale flags low vegetation target attainment and/or slope instability constraints.

Urban Expansion Impact Assessment

What This Tool Does

Urban Expansion Impact Assessment compares a baseline and scenario urban footprint to quantify impact severity and habitat loss, and then scores streams that intersect the impact surface. It returns rasters, an affected-streams layer, a summary JSON, and an HTML report.

Typical Questions This Tool Helps Answer

  • How much new urban area was added between the baseline and scenario extents, and where is expansion most spatially concentrated?
  • Where does the new urban expansion most severely affect stream channels and sensitive habitat areas, and which stream segments are classified as high impact?
  • What is the projected ecological footprint of the proposed development scenario relative to the no-development baseline?

When To Use

  • Environmental review of growth alternatives
  • Permitting and compliance narratives tied to urban expansion
  • Stream-impact screening for proposed growth scenarios

What You Need

InputDescription
Baseline urban rasterExisting urban footprint, binary or fractional.
Scenario urban rasterFuture or proposed urban footprint, binary or fractional.
Stream networkStream polyline layer to score against the impact surface.

Key Settings

SettingDefaultGuidance
output_prefixrequiredPrefix used for all emitted artifacts.
scenario_templatebalanced_growthUse compact_infill, corridor_expansion, or conservation_priority when those planning frames better match the project.
habitat_sensitivitynullOptional sensitivity layer that increases habitat-loss severity in sensitive areas.

What You Get

DeliverableFormatDescription
impact_severityRasterImpact severity in the range 0 to 1.
affected_streamsVectorStream segments scored with mean/max impact and a class label.
habitat_lossRasterHabitat-loss surface.
summaryJSONNew urban area, affected-stream counts, and scenario metadata.
html_reportHTMLHuman-readable report.

Summary-contract additions in summary:

  • output_semantics: machine-readable output intent and certification scope per output key.
  • confidence_contract: confidence metric declaration including threshold and low-confidence fraction.
  • interpretation_warnings: plain-language warnings on proxy limits and threshold-sensitive comparisons.

Runtime Output Keys

result.outputs["impact_severity"]
result.outputs["affected_streams"]
result.outputs["habitat_loss"]
result.outputs["summary"]
result.outputs["html_report"]

The affected-streams layer includes STREAM_ID, IMP_MEAN, IMP_MAX, and IMP_CLASS fields.

Common Questions

Q: Which outputs should policy teams review first? A: Start with summary.new_urban_area_ha and summary.high_impact_streams, then inspect affected_streams.IMP_CLASS hotspots.

Q: What is a common interpretation mistake? A: Judging impact by expansion area alone; even modest expansion can generate concentrated high stream impact.

Q: Which settings most change outcomes? A: scenario_template selection is usually the strongest driver, and adding habitat_sensitivity often changes habitat-loss concentration.

Q: How should planners use these results? A: Use stream-impact and habitat-loss hotspots to prioritize mitigation packages before selecting a preferred growth scenario.

Results Delivery Checklist

  • Baseline and scenario rasters were aligned and validated
  • affected_streams was reviewed in GIS software
  • The chosen scenario template matches the planning narrative
  • summary["new_urban_area_ha"] and summary["high_impact_streams"] were checked before delivery
  • summary["output_semantics"], summary["confidence_contract"], and summary["interpretation_warnings"] were reviewed before delivery

Purpose

Urban Expansion Impact Assessment quantifies landscape and ecological impacts of urban growth, including habitat loss, fragmentation, hydrologic alteration, and infrastructure encroachment. Enables impact assessment for environmental review and planning.

Background

Urban expansion impact assessment evaluates how scenario growth footprints alter ecological and hydrologic exposure pathways. A simple framing is:

$$I(x)=\Delta U(x)\cdot S(x)$$

Where $\Delta U$ represents newly urbanized extent and $S$ represents receptor sensitivity (for example habitat or stream-exposure susceptibility).

Scenario Template Logic

Scenario templates encode different development philosophies (infill-heavy, corridor-led, conservation-priority, mixed growth). Their value is comparative: they expose trade-offs among growth accommodation, stream impact concentration, and habitat-loss distribution.

Stream and Habitat Coupling

Stream impact and habitat-loss layers should be interpreted jointly. A scenario with moderate total expansion can still produce severe localized stream stress if growth concentrates near vulnerable corridor segments.

Methodological Considerations

  • Treat scenario templates as policy hypotheses and test multiple alternatives before selecting a preferred pathway.
  • Document whether habitat sensitivity was supplied; omission changes loss-pattern interpretation.
  • Use hotspot stability checks across templates to identify robust mitigation targets.

Practical Interpretation Pitfalls

Common pitfalls include interpreting area-growth percentage alone, ignoring receptor distribution, and making mitigation decisions without checking scenario sensitivity.

Inputs

Required runtime arguments:

  • baseline_urban
  • scenario_urban
  • streams

Optional runtime arguments:

  • habitat_sensitivity
  • scenario_template
  • output_prefix (required)

Parameters

Defaults and behavior:

  • scenario_template defaults to balanced_growth.
  • output_prefix is required.
  • habitat_sensitivity is optional; when supplied, habitat-loss concentration is weighted by sensitivity.

Outputs

Primary runtime outputs:

  • impact_severity
  • affected_streams
  • habitat_loss
  • summary
  • html_report

affected_streams includes STREAM_ID, IMP_MEAN, IMP_MAX, and IMP_CLASS.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.urban_expansion_impact_assessment(
	baseline_urban="urban_2010.tif",
	scenario_urban="urban_2024.tif",
	streams="streams.gpkg",
	habitat_sensitivity="habitat_sensitivity.tif",
	scenario_template="balanced_growth",
	output_prefix="urban_expansion"
)

References

  • Tool implementation: wbtools_pro/src/tools/workflow_products/urban_expansion_impact_assessment.rs
  • Environmental impact assessment scenario-comparison practice

Parameter Interaction Notes

Prioritize sensitivity checks on profile/threshold settings that materially change output distributions and decision classes.

QA and Acceptance Criteria

Minimum acceptance:

  • Baseline/scenario rasters aligned in dimensions and georeferencing.
  • summary includes new_urban_area_ha, high_impact_streams, and interpretation blocks.
  • affected_streams schema contains expected impact fields and class labels.

Advanced Operational Guidance

For production use, preserve run metadata, lock approved profiles, and version output packages for reproducibility and auditability.

Implementation Patterns

Common pattern: baseline run, sensitivity run on 1-2 parameters, then locked-profile production run for delivery.

See upstream conditioning and downstream validation tools in the same bundle for end-to-end workflow consistency.

When To Use This Workflow

Use Urban Expansion Impact Assessment when you need repeatable, source-contract-aligned outputs for planning, reporting, and stakeholder review.

Wetland Hydrogeomorphic Classification

What This Tool Does

Wetland Hydrogeomorphic Classification classifies wetland areas into hydrogeomorphic classes and produces confidence and polygon outputs for mapping and reporting.

Typical Questions This Tool Helps Answer

  • What HGM class does each wetland unit belong to, and what ecological function and vulnerability profile does that classification imply?
  • Which wetland polygons have high classification confidence versus uncertain or mixed-class assignments that warrant field verification?
  • Are the mapped wetland types consistent with what is expected given the surrounding landscape geomorphology and hydrology?

When To Use

  • Wetland inventory and screening
  • Regional wetland function mapping
  • Regulatory and planning workflows requiring class plus confidence outputs

What You Need

InputDescription
DEM rasterElevation surface for terrain-based HGM classification.
Wetland mask rasterWetland candidate cells (>0 are treated as wetland).

Key Settings

SettingDefaultGuidance
wetland_regionnoneChoose a regional calibration pack only when study conditions match the region profile.
max_polygon_features10000Maximum number of polygon features emitted.
output_prefixrequiredPrefix used for all generated files.

Available wetland_region values: temperate_forested, glaciated_boreal, prairie_pothole, coastal_tidal, appalachian_montane, subtropical_floodplain, none.

What You Get

DeliverableFormatDescription
hgm_classGeoTIFFHGM class raster (0 Nonwetland, 1 Depressional, 2 Slope, 3 Riverine).
wetland_polygonsGeoPackagePolygonized wetland regions with class and confidence fields.
confidenceGeoTIFFConfidence raster for the classification output.
summaryJSONSummary metrics, interpretation text, and output references.
html_reportHTMLOptional report page.

The wetland polygon layer includes REGION_ID, CELL_COUNT, CLASS_CODE, CLASS_NAME, and MEAN_CONF.

Runtime Output Keys

result.outputs["hgm_class"]
result.outputs["wetland_polygons"]
result.outputs["confidence"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which output should I review first? A: Start with summary.class_distribution and polygon MEAN_CONF to see where class assignment is strong versus uncertain.

Q: What is a common interpretation mistake? A: Treating low-confidence class labels as definitive instead of field-check priorities.

Q: Which settings most change class results? A: The selected wetland_region pack and max_polygon_features can materially shift class balance and polygon granularity.

Q: How should wetland teams use these outputs? A: Use class and confidence together to prioritize field validation routes and regulatory documentation focus.

Results Delivery Checklist

  • DEM and wetland mask dimensions were confirmed to match
  • HGM class and confidence rasters were visually reviewed
  • Wetland polygon attributes were spot-checked
  • Summary class distribution and confidence ranges were reviewed

Purpose

Wetland Hydrogeomorphic Classification classifies wetlands by hydrologic source, outlet type, and geomorphic setting to predict ecological function and vulnerability. Outputs align with Ramsar and Cowardin wetland classification systems.

Background

Hydrogeomorphic (HGM) classification maps wetlands into functional setting classes by combining terrain position, hydrologic context, and connectivity cues. Conceptually, class assignment can be viewed as a rule-based partition over feature space:

$$c(x)=\arg\max_k;s_k(z_x)$$

Where $z_x$ is the local feature vector (relief, slope, wetness/connectivity indicators) and $s_k$ is class-specific evidence for class $k$.

Regional Calibration Rationale

HGM boundaries are physiographically dependent. Parameter packs calibrated to regional terrain-hydrology regimes reduce systematic bias that appears when one threshold set is transferred to different landscapes.

Confidence and Polygon Interpretation

Cell-level class confidence and polygon-level mean confidence should be interpreted together. Large polygons with low confidence often indicate transitional environments where field verification is required before regulatory or restoration commitments.

Methodological Considerations

  • Confirm DEM conditioning quality; local relief artifacts can propagate directly into class logic.
  • Use regional packs as priors, then validate against local wetland inventories where available.
  • Cap polygon output volume thoughtfully so simplification does not erase operationally relevant heterogeneity.

Practical Interpretation Pitfalls

A frequent mistake is reading class codes as fixed ground truth regardless of confidence. These outputs are decision-support hypotheses that should be finalized with field evidence.

Inputs

Required runtime arguments:

  • dem
  • wetland_mask

Optional runtime arguments:

  • max_polygon_features
  • wetland_region
  • output_prefix (required)

Parameters

Defaults and behavior:

  • max_polygon_features defaults to 10000.
  • wetland_region defaults to none and controls regional calibration thresholds.
  • output_prefix is required.

Outputs

Primary runtime outputs:

  • hgm_class
  • wetland_polygons
  • confidence
  • summary
  • html_report

wetland_polygons includes REGION_ID, CELL_COUNT, CLASS_CODE, CLASS_NAME, and MEAN_CONF.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.wetland_hydrogeomorphic_classification(
	dem="dem.tif",
	wetland_mask="wetlands.tif",
	wetland_region="temperate_forested",
	max_polygon_features=10000,
	output_prefix="wetland_hgm"
)

References

  • Tool implementation: wbtools_pro/src/tools/workflow_products/wetland_hydrogeomorphic_classification.rs
  • Ramsar Convention and Cowardin terminology (contextual alignment)

Parameter Interaction Notes

Prioritize sensitivity checks on profile/threshold settings that materially change output distributions and decision classes.

QA and Acceptance Criteria

Minimum acceptance:

  • DEM and wetland mask dimensions match exactly.
  • hgm_class and confidence rasters align in grid/extent.
  • summary.class_distribution and polygon confidence fields are present and interpretable.

Advanced Operational Guidance

For production use, preserve run metadata, lock approved profiles, and version output packages for reproducibility and auditability.

Implementation Patterns

Common pattern: baseline run, sensitivity run on 1-2 parameters, then locked-profile production run for delivery.

See upstream conditioning and downstream validation tools in the same bundle for end-to-end workflow consistency.

When To Use This Workflow

Use Wetland Hydrogeomorphic Classification when you need repeatable, source-contract-aligned outputs for planning, reporting, and stakeholder review.

River Corridor Health Assessment

Purpose

River Corridor Health Assessment evaluates riparian buffer integrity, stream channel stability, vegetation composition, and hydrologic connectivity along river segments. Outputs health scores and recommendations for restoration priority.

Typical Questions This Tool Helps Answer

  • Which river reaches have the lowest riparian integrity and should be prioritized for restoration investment this planning cycle?
  • Where is DEM-derived erosion pressure highest along the stream network, and which segments are classified as At-Risk or Critical based on the health score?
  • How does corridor health score vary across the watershed, and which tributary catchments drive the aggregate condition index?

Background

Environmental risk workflows are built around source-pathway-receptor logic: identify stressors, model transport or exposure pathways, and estimate consequence to assets or ecosystems. Inputs and model assumptions define the validity envelope, so uncertainty documentation is as important as the final risk score.

In practice, these tools are most defensible when used comparatively across scenarios, with explicit thresholds and confidence narratives. Interpretation should focus on rank ordering and mitigation prioritization, not absolute certainty.

River corridor health assessment integrates channel condition, riparian structure, and disturbance indicators into a multi-metric condition narrative. Trend consistency and local calibration are critical for fair reach-to-reach comparison.

Methodological Considerations

  • Calibrate thresholds and class boundaries against local context whenever possible; transferred defaults should be treated as provisional.
  • Evaluate scenario sensitivity explicitly so mitigation priorities are robust to uncertainty in assumptions.
  • Keep lineage between assumptions, intermediate metrics, and summary outputs for audit-ready interpretation.

Practical Interpretation Pitfalls

A frequent mistake is interpreting risk classes as deterministic outcomes. These products are comparative planning aids and should be paired with field validation and expert review.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
demRasterYesMust be a readable DEM raster.Terrain source used to derive erosion pressure and corridor confidence.
streamsVectorYesMust be a readable line network. LineString and MultiLineString geometries are supported.Stream network to classify and rank.

Parameters

ArgumentTypeRequiredDefaultDescription
profileStringNobalancedErosion-sensitivity preset: fast, balanced, or conservative.
restoration_priority_modeStringNohealth_score_onlyRanking mode: health_score_only, cost_weighted, or ecological_gradient.
output_prefixStringNoriver_corridor_healthOutput prefix for generated artifacts.

The runtime also accepts output as an alias for output_prefix.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Erosion pressure raster (${prefix}_erosion_pressure.tif)erosion_pressureGeoTIFF rasterDEM-derived erosion pressure in [0, 1].
Corridor confidence raster (${prefix}_corridor_confidence.tif)corridor_confidenceGeoTIFF rasterConfidence raster in [0, 1].
Stream health score vector (${prefix}_stream_health_score.gpkg)stream_health_scoreGeoPackage line layerFields: STREAM_ID, HEALTH, EROS_P90, CLASS.
Restoration zones vector (${prefix}_restoration_zones.gpkg)restoration_zonesGeoPackage line layerFields: STREAM_ID, HEALTH, ACTION, PRIORITY_IDX.
Summary contract (${prefix}_summary.json)summaryJSONSummary contract with inputs, parameters, counts, interpretation blocks, and output paths.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the summary JSON.

Health classes and actions

RuleResult
HEALTH < 0.35CLASS=Critical, ACTION=Immediate stabilization
0.35 <= HEALTH < 0.6CLASS=At-Risk, ACTION=Revegetate and monitor
HEALTH >= 0.6CLASS=Stable, no restoration feature written

Important summary fields

KeyMeaning
summary.streams_scoredNumber of streams successfully scored.
summary.restoration_streamsNumber of non-stable streams written to restoration outputs.
summary.mean_stream_healthMean health score across scored streams.
interpretation.crs_harmonizationReports DEM EPSG, source stream EPSG, and whether reprojection occurred.
interpretation.restoration_priority_indexReports the ranking mode and aggregate priority statistics.
interpretation.budget_scenariosReports tight, moderate, and extended budget stream counts and fractions.
interpretation.watershed_rollup_summaryReports critical, at-risk, stable counts and urgency classification.
output_semanticsDeclares machine-readable output intent and certification scope for each output key.
confidence_contractDeclares confidence metric semantics, threshold, and low-confidence fraction for governance QA.
interpretation_warningsLists plain-language warnings on proxy limits and cross-run comparison constraints.
outputsReports paths to rasters, vectors, and the summary file.

Returned payload keys

The workflow returns these output keys:

  • erosion_pressure
  • corridor_confidence
  • stream_health_score
  • restoration_zones
  • summary
  • html_report

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.river_corridor_health_assessment(
        dem="dem_10m.tif",
        streams="streams.gpkg",
        profile="balanced",
        restoration_priority_mode="cost_weighted",
        output_prefix="river_health_2026",
)

References

  • Montgomery, D. R., & Buffington, J. M. (1997). Channel-reach morphology in mountain drainage basins. Geological Society of America Bulletin.
  • Wohl, E. (2017). Connectivity in rivers. Progress in Physical Geography.

Parameter Interaction Notes

  • profile changes the erosion-pressure raster and therefore can shift stream classes.
  • restoration_priority_mode changes the ordering of restoration candidates, not whether a stream is stable or unstable.
  • output_prefix controls one tightly linked delivery package of rasters, vectors, JSON, and HTML.

QA and Acceptance Criteria

  1. Verify only dem and streams are documented as required inputs.
  2. Verify the example uses the real runtime argument names.
  3. Verify the GeoPackage field names match the documented schema.
  4. Verify the summary JSON contains inputs, parameters, summary, interpretation, output_semantics, confidence_contract, interpretation_warnings, and outputs.
  5. Verify the returned payload contains the documented output keys.
  6. Verify class thresholds and restoration actions match the implementation.

The workflow fails if inputs are missing or unreadable, if profile or restoration_priority_mode is invalid, if a provided output prefix is empty, or if stream reprojection is needed but the stream layer lacks CRS EPSG metadata.

Advanced Operational Guidance

  • Treat stream_health_score.gpkg as the primary classification layer and restoration_zones.gpkg as the intervention shortlist.
  • Review EROS_P90 together with HEALTH to understand why otherwise similar streams may rank differently.
  • Check the CRS harmonization block before operational use when source data came from multiple systems.
  • If stream geometry is sparse, consider densifying it upstream of this workflow to sample erosion pressure more frequently.

Implementation Patterns

  • Baseline screening run: profile=balanced, restoration_priority_mode=health_score_only.
  • Cost-sensitive planning run: restoration_priority_mode=cost_weighted.
  • Erosion-driven triage run: restoration_priority_mode=ecological_gradient.
  • Delivery run: publish both rasters, both GeoPackages, the summary JSON, and the HTML report together.
  • terrain_constraint_and_conflict_analysis
  • utility_corridor_encroachment_intelligence
  • wetland_hydrogeomorphic_classification

When To Use This Workflow

Use this workflow when you need a reproducible stream-health triage package derived from terrain and stream geometry, rather than a broad riparian inventory.

What this workflow helps you do:

  • Classify streams into stable and restoration-needed groups.
  • Compare different restoration ranking strategies.
  • Deliver both spatial outputs and a summary that explains the ranking logic.

Results Delivery Checklist

  1. Deliver both rasters, both GeoPackages, the summary JSON, and the HTML report together.
  2. Record the selected profile and restoration_priority_mode.
  3. Review the CRS harmonization block before downstream use.
  4. Confirm class counts and urgency classification in the summary.
  5. If budget scenarios are being used for planning, note which one informed the decision.

Common Questions

Q: Why can a stream move up or down in priority without changing class?
A: Because class is based on HEALTH, while priority ranking depends on the selected restoration_priority_mode.

Q: What is the main misinterpretation risk in this workflow?
A: Assuming it uses vegetation or land-use inputs. This workflow scores streams from DEM-derived erosion pressure sampled along the stream network.

Q: Which setting matters most for planning scenarios?
A: restoration_priority_mode, because it changes how non-stable streams are ordered for intervention.

Q: When should teams choose ecological_gradient?
A: Choose it when high erosion pressure should weigh more heavily than treatment efficiency or segment length.

Network Planning and Operations Bundle

Overview

The Network Planning and Operations bundle provides specialized tools for transportation and utility network analysis: service area optimization, route event management for linear-referenced assets, emergency response planning, and market/site accessibility. Supports logistics, infrastructure operations, and strategic siting.

Key Concepts

Service Area Analysis

Delineation of areas served by facilities (fire stations, hospitals, distribution centers) within specified time or distance thresholds. Identifies coverage gaps and overlap.

Linear Referencing and Route Events

Management of attributes (signs, guardrails, pavement condition, utilities) distributed along linear routes using measure values (distance along route) rather than Cartesian coordinates.

Accessibility and Connectivity

Evaluation of network connectivity and travel time/distance from origin nodes to destination areas, considering topography and infrastructure constraints.

Fleet Optimization

Algorithms for efficient vehicle routing, driver scheduling, and last-mile delivery optimization minimizing distance, time, and vehicle count.

Typical Workflows

Emergency Response Dispatch

  1. Map critical facilities (schools, hospitals, high-density population)
  2. Define coverage zones (e.g., response time ≤ 8 min)
  3. Identify coverage gaps
  4. Use Network Readiness and Diagnostics to verify path quality
  5. Optimize Emergency Scenario Routing for rapid deployment

Utility Asset Management

  1. Create linear route network (roads, utility corridors)
  2. Establish linear referencing system (measure from route start)
  3. Inventory assets (poles, transformers, valves) with route/measure location
  4. Use Route Event Governance to track asset lifecycle (installation, maintenance, replacement)

Market Penetration Analysis

  1. Identify customer base and competitor locations
  2. Compute service areas and accessibility (Market Access and Site Planning)
  3. Identify underserved areas and expansion opportunities
  4. Optimize distribution network

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. Fleet Routing and Dispatch Optimizer
  2. Network Readiness and Diagnostics
  3. Service Area Planning and Coverage Optimization
  4. Market Access and Site Planning
  5. Emergency Accessibility Scenario Planning
  6. Route Event Governance
  7. Utility Corridor Access Planning
  8. Parcel Fabric Topology Compliance

Performance Considerations

  • Network Topology: Clean topology (no duplicate edges, proper connectivity) essential for accurate routing
  • Impedance Factors: Travel time varies with speed limits, congestion, terrain; representative impedance model improves accuracy
  • Node/Intersection Delay Modeling: For service-area driven workflows, optional node-entry costs (node_cost_points, node_cost_field, node_cost_snap_distance) capture intersection delays not represented by edge cost alone
  • Coverage Thresholds: Drive-time isochrones vs. distance rings; drive-time more realistic but computationally heavier

References

  • ESRI Network Analyst Best Practices
  • APTA (American Public Transportation Association) Transit Guidelines

For customer adoption, this bundle should be delivered as a KPI-driven operational improvement package.

Recommended package components:

  1. Baseline network performance dashboard
  2. Optimized scenario outputs with assumptions
  3. Stress-test scenarios (disruption, demand surge, resource loss)
  4. Change-management summary for dispatch and operations teams

This packaging improves executive confidence by connecting technical routing outputs directly to measurable service outcomes.

Deployment Notes

  • Start with one tactical use case (dispatch optimization or service area gap closure), then extend to strategic planning cycles.
  • Keep tactical and strategic parameter profiles separate to avoid overfitting day-to-day operations.
  • Standardize KPI reporting across reruns (on-time rate, cost-to-serve, response time, utilization) for longitudinal performance tracking.

Fleet Routing and Dispatch Optimizer

Purpose

Fleet Routing and Dispatch Optimizer solves practical vehicle routing and dispatch scheduling under real operational constraints.

It supports:

  • Multi-vehicle route planning
  • Capacity-constrained dispatch
  • Time-window-aware service sequencing
  • Trade-off optimization (distance, time, fleet size)

Use this tool when dispatch decisions must be reproducible, explainable, and cost-accountable.

Typical Questions This Tool Helps Answer

  • What is the lowest-cost dispatch plan that still respects capacity and time-window constraints?
  • How many vehicles are actually required to meet today's service commitments?
  • Which stops are most at risk of lateness or unmet demand under current fleet assumptions?

Problem Class

This tool addresses variants of VRP (Vehicle Routing Problem):

  • CVRP: capacitated VRP
  • VRPTW: VRP with time windows
  • Multi-depot routing
  • Soft-constraint scenarios with penalty costs

Background

Fleet routing and dispatch optimization solves a constrained vehicle-routing problem (VRP) where objective quality and operational feasibility must be balanced. A common scalarized form is:

$$\min\left(w_d D + w_t T + w_v V + w_p P\right)$$

Where $D$ is total distance, $T$ is total travel/service time, $V$ is vehicles used, and $P$ aggregates violation penalties (late arrivals, overtime, unmet demand).

Constraint System

Operational feasibility is defined by interacting constraints:

  • Vehicle capacity and compatibility.
  • Depot start/end and shift limits.
  • Time-window feasibility at each stop.
  • Service-time inclusion and break rules.

Small data-quality errors in any constraint dimension can invalidate apparently strong objective scores.

Solver Strategy and Trade-Offs

Practical pipelines often use fast constructive seeds (for example Clarke-Wright/sweep), then local or metaheuristic improvement (2-opt, relocate/swap, tabu, GA, annealing). The key trade-off is solve time versus marginal quality gain and scenario throughput.

Robustness and Scenario Use

Dispatch recommendations should be stress-tested under demand variance, closure events, and travel-time inflation. Robust plans maintain acceptable KPI behavior across perturbations, not only in a nominal run.

Methodological Considerations

  • Validate constraint completeness before objective tuning.
  • Compare alternative weight vectors to expose Pareto-like trade-offs.
  • Report both objective values and violation diagnostics for governance.

Practical Interpretation Pitfalls

A lower objective score is not automatically operationally superior if it relies on brittle assumptions or pushes service equity below acceptable policy thresholds.

Inputs

ParameterTypeRequiredDescription
networkVector (Line or MultiLine)YesStreet/transit network used to build routing graph
depotsVector (Point or MultiPoint)YesDepot/warehouse features used as vehicle origins
stopsVector (Point or MultiPoint)YesDemand/service stop features
vehicles_csvCSVYesVehicle specification table (6 required columns)
restrictionsCSVNoOptional edge penalty/closure table

Critical Input Hygiene

  • Ensure network connectivity (no disconnected critical subgraphs)
  • Use projected CRS for network/depots/stops (tool enforces projected CRS when known)
  • Ensure demand and capacity units match (weight, volume, pallets, etc.)
  • Ensure stop demand values are non-negative and realistic for fleet capacity

Vector Attribute Expectations

  • depots attribute lookup priority for depot id: depot_id, DEPOT_ID, id, ID.
  • stops attribute lookup priority for stop id: stop_id, STOP_ID, id, ID.
  • stops demand field lookup: demand, DEMAND (default when missing: 1.0).
  • stops service time field lookup: service_time_minutes, SERVICE_TIME_MINUTES, service_time, SERVICE_TIME (default when missing: 10.0).

vehicles_csv Schema (Authoritative)

Header (recommended):

vehicle_id,capacity,available_time_minutes,cost_per_minute,cost_per_km,depot_id
  • Exactly 6 columns are required per non-empty row.
  • Header row is optional but, if present, must include vehicle_id on row 1 to be auto-detected as header.
  • capacity, available_time_minutes, cost_per_minute, and cost_per_km must parse as numeric values.

Example:

vehicle_id,capacity,available_time_minutes,cost_per_minute,cost_per_km,depot_id
truck_01,1200,540,0.65,1.20,depot_west
truck_02,800,480,0.58,1.05,depot_east

restrictions Schema (Optional)

Required columns:

from_x,from_y,to_x,to_y

Optional columns:

  • penalty_factor (alias: penalty) default 1.0
  • closed (alias: is_closed) default false

Accepted truthy values for closure: 1, true, yes, y (case-insensitive).

Example:

from_x,from_y,to_x,to_y,closed,penalty_factor
500120.0,4820030.0,500240.0,4820035.0,true,1.0
500300.0,4820100.0,500410.0,4820108.0,false,1.8

Parameters

ParameterTypeDefaultNotes
objectiveEnumminimize_distanceOne of: minimize_distance, minimize_time, minimize_cost, balanced
edge_cost_fieldStringOptional numeric line field used as impedance multiplier on each edge. When omitted, Euclidean arc length is used. Typically set to a travel-time or friction field (e.g. MINUTES).
one_way_fieldStringOptional line field marking one-way digitized edges; accepts FT/TF/B codes and legacy boolean values.
network_speed_kmphNumber80.0Network travel speed in km/h used for time conversion when edge_cost_field is not set. Has no effect when edge_cost_field is provided.
html_reportString pathNot setOptional HTML summary report output
routes_outputString pathNone (required)Output vector for routes
assignment_csv_outputString pathNone (required)Output CSV for stop assignments
route_kpis_csv_outputString pathNone (required)Output CSV for route/fleet KPIs
exceptions_csv_outputString pathNone (required)Output CSV for infeasible stops

objective

  • minimize_distance: fuel and mileage focus
  • minimize_time: SLA/response-time focus
  • minimize_cost: direct optimization of (distance_km * cost_per_km) + (time_minutes * cost_per_minute)
  • balanced: compromise score across distance, time, and cost

Output Path Parameters (Required)

  • routes_output: path extension controls vector format (for example .shp, .geojson, .gpkg).
  • assignment_csv_output: written as CSV with assignment rows.
  • route_kpis_csv_output: written as CSV with per-route rows and a FLEET_TOTAL summary row.
  • exceptions_csv_output: written as CSV with one row per failed stop assignment.

html_report

  • If provided, an HTML summary file is generated in addition to CSV/vector outputs.
  • HTML report includes run summary counts and key output paths for packaging.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Routes vectorroutesVector (LineString)Route geometry per vehicle with route-level attributes (written to routes_output path).
Assignment CSVassignment_csvCSVStop-to-route assignment timeline (written to assignment_csv_output path).
Route KPIs CSVroute_kpis_csvCSVPer-route and fleet-level KPIs (written to route_kpis_csv_output path).
Exceptions CSVexceptions_csvCSVStops that could not be assigned and reasons (written to exceptions_csv_output path).
Objective usedobjectiveStringObjective used in optimization run.
Route countroutes_countIntegerNumber of generated routes.
Stops assignedstops_assignedIntegerNumber of assigned stops.
Stops failedstops_failedIntegerNumber of unassigned stops.
Status flagstatusStringRun status string.
Summary payloadsummaryJSON (result payload)Run counts and output locations.
Optional reporthtml_reportString pathReturned only when html_report parameter is supplied.

Output File Schemas

routes_output attributes:

  • ROUTE_ID
  • VEHICLE_ID
  • DEPOT_ID
  • STOP_COUNT
  • DIST_KM
  • TIME_MIN
  • COST

assignment_csv_output columns:

stop_id,route_id,vehicle_id,sequence_order,arrival_time_minutes,departure_time_minutes

route_kpis_csv_output columns:

vehicle_id,route_id,capacity_utilization_pct,distance_km,time_minutes,cost_units,stop_count

Notes:

  • Includes a final fleet aggregate row with vehicle_id=FLEET_TOTAL and route_id=FLEET_TOTAL.

exceptions_csv_output columns:

stop_id,reason

Common reason values:

  • demand_exceeds_max_vehicle_capacity
  • no_feasible_route

Result Payload Keys

In addition to output files, the run result contains keys for orchestration and auditing:

  • status
  • routes_count
  • stops_assigned
  • stops_failed
  • objective
  • routes
  • assignment_csv
  • route_kpis_csv
  • exceptions_csv
  • summary
  • html_report (only when requested)

Interpreting KPIs in route_kpis_csv_output

  • capacity_utilization_pct: percentage of route capacity consumed by assigned stop demand.
  • distance_km: full loop distance including return to depot.
  • time_minutes: travel plus service time, including return leg travel time.
  • cost_units: computed from distance and time using per-vehicle coefficients.

Validation Workflow

Before Operational Use

  1. Run baseline scenario with historical dispatch data
  2. Compare against known outcomes (distance, overtime, late stops)
  3. Validate stop sequence plausibility with dispatch team

Sensitivity Testing

  1. Vary demand by +/-10%
  2. Remove one vehicle and compare service impact
  3. Tighten time windows and inspect infeasibility growth

Field Validation

  1. Pilot with one depot/day
  2. Capture driver deviations and ground truth constraints
  3. Feed corrections back into network and timing assumptions

Troubleshooting

SymptomLikely CauseCorrective Action
Many late arrivalsTime windows too strict or travel times underestimatedRecalibrate edge impedance and service duration
High unassigned-stop countCapacity/time budgets are insufficient for demandIncrease fleet capacity, increase available time, or split workload by depot
Long detoursNetwork gaps or turn restrictions missingRepair topology; include turn penalties and restrictions
Unexpectedly high route costCost coefficients or objective selection mismatch operations policyRe-check cost_per_minute, cost_per_km, and set objective intentionally

Example: Daily Last-Mile Dispatch

import whitebox_workflows as wbw

wbe = wbw.WbEnvironment()
wbe.working_directory = "/data/logistics_daily"

wbe.fleet_routing_and_dispatch_optimizer(
        network="metro_network.shp",
        depots="depots.shp",
        stops="orders_2026_05_14.shp",
        vehicles_csv="fleet_profile.csv",
        objective="balanced",
        restrictions="road_restrictions.csv",
        edge_cost_field="MINUTES",
        routes_output="out/routes_2026_05_14.geojson",
        assignment_csv_output="out/assignment_2026_05_14.csv",
        route_kpis_csv_output="out/kpis_2026_05_14.csv",
        exceptions_csv_output="out/exceptions_2026_05_14.csv",
        html_report="out/fleet_dispatch_2026_05_14.html"
)

Any WbEnvironment instance name is valid (wbe above is only an example).

Example: Emergency Utility Service Calls

wbe.fleet_routing_and_dispatch_optimizer(
        network="utility_response_network.shp",
        depots="service_crews.shp",
        stops="incident_calls.shp",
        vehicles_csv="crew_truck_capabilities.csv",
        objective="minimize_time",
        edge_cost_field="MINUTES",
        routes_output="out/utility_routes.geojson",
        assignment_csv_output="out/utility_assignments.csv",
        route_kpis_csv_output="out/utility_kpis.csv",
        exceptions_csv_output="out/utility_exceptions.csv"
)

Implementation Practices

  • Store each run with a scenario ID and immutable input snapshot
  • Publish only routes that pass dispatch sanity checks
  • Maintain separate tactical (fast) and strategic (deep) optimization profiles
  • network_readiness_and_diagnostics_intelligence
  • service_area_planning_and_coverage_optimization
  • emergency_scenario_routing_and_accessibility_simulator

References

  • Toth, P., & Vigo, D. (2014). Vehicle Routing: Problems, Methods, and Applications (2nd ed.). SIAM.
  • Laporte, G. (2009). Fifty years of vehicle routing. Transportation Science, 43(4), 408-416.

Parameter Interaction Notes

For Fleet Routing and Dispatch Optimizer, output quality is most sensitive to parameter combinations rather than single values in isolation.

  • objective and vehicle cost coefficients interact strongly: - minimize_cost only behaves as expected when cost_per_minute and cost_per_km are calibrated to real economics. - balanced can reduce extreme route shapes but may not minimize any single KPI.
  • available_time_minutes and service_time_minutes jointly control assignment feasibility; high service durations can dominate travel-time improvements.
  • Restriction closures (closed=true) can rapidly increase infeasibility; inspect exceptions_csv_output after each closure scenario.

QA and Acceptance Criteria

Use a staged acceptance approach for Fleet Routing and Dispatch Optimizer:

  1. Input integrity: validate projected CRS, network connectivity, depot-stop coverage, and CSV schema correctness.
  2. Method validity: run a pilot dispatch day and compare route order against dispatch-team expectation.
  3. Output plausibility: verify route loops return to depot and KPI magnitudes are operationally realistic.
  4. Reproducibility: rerun with identical inputs and confirm stable assignment/KPI outputs.

Recommended acceptance checks:

  • Every output artifact exists at the requested path.
  • assignment_csv_output rows are consistent with route stop counts.
  • route_kpis_csv_output contains the final FLEET_TOTAL row.
  • exceptions_csv_output reasons are explainable and actionable.

Advanced Operational Guidance

For production deployment of Fleet Routing and Dispatch Optimizer:

  • Maintain a versioned parameter profile (e.g., exploratory, standard, compliance).
  • Store run metadata with input hashes, parameter JSON, and timestamp for auditability.
  • Lock route output format by extension (for example, .gpkg for enterprise geodatabases, .geojson for interoperability).
  • Use scenario-specific restrictions files rather than editing network geometry for temporary closures.

Implementation Patterns

Common implementation patterns with Fleet Routing and Dispatch Optimizer:

  • Baseline run: produce first-pass outputs with balanced defaults.
  • Sensitivity run: vary 1-2 high-impact parameters to assess stability.
  • Production run: lock accepted profile and generate deliverables.
  • Monitoring run: repeat with identical profile on new data for change tracking.

Use Fleet Routing and Dispatch Optimizer together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Fleet Routing and Dispatch Optimizer is most valuable when teams need measurable service-level improvements (coverage, response time, cost-to-serve) with governance-ready transparency.

What this workflow helps you achieve:

  • Translates network complexity into decision-ready options.
  • Supports defensible operational planning with explicit constraints.
  • Creates repeatable workflows for quarterly and annual optimization cycles.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Confirm objective function matches business KPI priorities.
  3. Document constraints (capacity, time windows, exclusions) in deliverable notes.
  4. Provide baseline-vs-optimized comparison metrics.
  5. Include at least one scenario stress test (demand spike, outage, or route closure).

Common Questions

Q: Which result should I review first? A: Start with baseline-vs-optimized KPI changes for coverage, response time, and cost-to-serve.

Q: What is a common interpretation mistake? A: Assuming a better objective score means the plan is deployable without verifying all constraints are respected.

Q: Which settings most affect recommended routes? A: Demand assumptions, enabled constraints, and objective weighting usually have the largest effect on dispatch outcomes.

Q: How should teams use these outputs operationally? A: Pilot the optimized schedule in a controlled service window, compare realized KPIs to baseline, then scale rollout if performance holds.

Network Readiness and Diagnostics

Purpose

Network Readiness and Diagnostics validates network topology and connectivity, identifies missing edges/nodes, and rates overall network quality and fitness for routing analysis.

Typical Questions This Tool Helps Answer

  • Is this network ready for routing and optimization, or do data-quality issues make results unreliable?
  • Where are the key topology defects (dead ends, disconnected components, broken continuity) that need correction?
  • Does the current dataset pass readiness gates for production decision workflows?

Background

Network readiness diagnostics assess whether a transport graph is fit for optimization and scenario analysis. In a weighted graph $G=(V,E,w)$, path cost is typically:

$$c(P)=\sum_{e\in P} w(e)$$

So missing or inconsistent impedance attributes directly bias travel-time, accessibility, and optimization outcomes.

Readiness Dimensions

  • Topological validity: connectivity, dangling structures, disconnected components, turn-model consistency.
  • Impedance completeness: travel-time/speed consistency, directional restrictions, temporal rule coverage.
  • Operational expressiveness: representation of capacities, time windows, closures, and policy constraints.

Diagnostic Metrics and Decision Use

A practical readiness approach combines structural metrics (for example component count, invalid edge ratio) with operational metrics (for example constrained-route solvability rate). The objective is not only data correctness, but decision stability under realistic operating assumptions.

Methodological Considerations

  • Run diagnostics before optimization; post-hoc quality checks are far more expensive.
  • Track metric drift across data refreshes to detect silent regression in network quality.
  • Include stress scenarios (closure sets, demand spikes) to evaluate robustness of the modeled rules.

Practical Interpretation Pitfalls

Passing a single QA indicator can hide major operational blind spots. Readiness should be judged as a composite gate, not a one-metric pass/fail.

Inputs

ParameterTypeRequiredDescription
networkVector (LineString or MultiLineString)YesInput network layer to audit

Input Requirements

  • network must contain line geometries (LineString or MultiLineString).
  • If CRS is known, projected CRS is required for reliable geometric diagnostics.
  • Networks with no usable vertices fail fast.

Parameters

ParameterTypeRequiredDescription
qa_reportString pathYesCSV output path for findings summary
diagnostics_layerString pathYesVector output path for flagged point diagnostics
readiness_scoreString pathYesJSON output path for score and gate metrics
html_reportString pathNoOptional HTML summary report output

Output Path Behavior

  • diagnostics_layer format is inferred from file extension.
  • If extension cannot be resolved, writer falls back to GeoJSON.
  • Parent directory for diagnostics_layer is created automatically if needed.

Outputs

OutputTypeDescription
qa_reportCSVSeverity-scored findings summary
diagnostics_layerVector (Point)Node/edge diagnostic flags rendered as point features
readiness_scoreJSONScorecard, penalties, pass/fail gate, and metadata
html_reportHTMLOptional executive summary report

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
qa_reportQA findings CSV
diagnostics_layerDiagnostic point vector file
readiness_scoreReadiness scorecard JSON
summaryAlias → same path as qa_report
html_reportOptional HTML report (only present when html_report argument is supplied)

QA Findings CSV Schema (qa_report)

severity,check_type,count,description,feature_ids_sample

feature_ids_sample is semicolon-delimited in-cell text.

Diagnostics Layer Schema (diagnostics_layer)

Geometry type: Point

Attributes:

  • CHECK_TYPE
  • SEVERITY
  • MESSAGE

Common CHECK_TYPE values:

  • dead_end
  • disconnected_component
  • disconnected_edge

Readiness JSON Schema (readiness_score)

Top-level keys:

  • overall_score
  • connectivity_score
  • cost_consistency_score
  • pass_fail_gate
  • fragmentation_penalty
  • unreachability_penalty
  • cost_variance_zscore
  • assessment_timestamp
  • schema_version

Scoring Logic (Current Implementation)

The current implementation computes:

  • Connected-component structure from network topology
  • Dead-end node counts
  • Cost-consistency outliers from geometric segment-length variance

Current score formula:

$$ \text{connectivity_score} = 100,(1 - p_f - p_u) $$

$$ \text{cost_consistency_score} = 100,\left(1 - \min\left(\frac{z}{5},1\right)\right) $$

$$ \text{overall_score} = 0.6,\text{connectivity_score} + 0.4,\text{cost_consistency_score} $$

Where:

  • $p_f$ is fragmentation_penalty
  • $p_u$ is unreachability_penalty
  • $z$ is cost_variance_zscore

Pass/fail gate is true only when all conditions are met:

  • overall_score >= 80
  • fragmentation_penalty < 0.1
  • unreachability_penalty < 0.05

Example

import whitebox_workflows as wbw

wbe = wbw.WbEnvironment()
wbe.network_readiness_and_diagnostics_intelligence(
        network="road_network.shp",
        qa_report="out/network_readiness_findings.csv",
        diagnostics_layer="out/network_readiness_diagnostics.geojson",
        readiness_score="out/network_readiness_score.json",
        html_report="out/network_readiness_report.html"
)

Any WbEnvironment instance name is valid (wbe above is only an example).

References

  • Rigaux, P., Scholl, M. O., & Voisard, A. (2002). Spatial Databases with Application to GIS. Morgan Kaufmann.

Parameter Interaction Notes

For Network Readiness and Diagnostics, output quality is most sensitive to parameter combinations rather than single values in isolation.

  • Small disconnected subnetworks can sharply reduce pass/fail status even when most of the network is visually complete.
  • Dense cul-de-sac neighborhoods increase dead-end diagnostics; treat these as context-sensitive, not automatically incorrect.
  • Very uneven segment-length distributions increase cost_variance_zscore and depress cost_consistency_score.

QA and Acceptance Criteria

Use a staged acceptance approach for Network Readiness and Diagnostics:

  1. Input integrity: validate projected CRS, line geometry type, and non-empty network extent.
  2. Method validity: verify expected dead-end and disconnected-area diagnostics against known weak zones.
  3. Output plausibility: confirm diagnostics layer aligns spatially with topology defects.
  4. Reproducibility: rerun with identical inputs and confirm stable findings and score outputs.

Recommended acceptance checks:

  • qa_report exists and includes header row plus expected check types.
  • diagnostics_layer contains features when known defects are present.
  • readiness_score includes all documented keys.
  • Pass/fail gate matches expected policy for known-good and known-bad test networks.

Advanced Operational Guidance

For production deployment of Network Readiness and Diagnostics:

  • Maintain a versioned readiness policy (score thresholds and remediation SLA).
  • Store run metadata with input hashes, parameter JSON, and timestamp for auditability.
  • Gate downstream routing/service-area tools on pass_fail_gate where governance requires it.
  • Track recurring disconnected components to prioritize durable network editing backlogs.

Implementation Patterns

Common implementation patterns with Network Readiness and Diagnostics:

  • Baseline run: score the current authoritative network snapshot.
  • Remediation run: fix flagged defects and rerun readiness scoring.
  • Release gate run: require pass before publishing operational route products.
  • Monitoring run: rerun after network updates or quarterly governance checkpoints.

Use Network Readiness and Diagnostics together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Network Readiness and Diagnostics is most valuable when teams need reliable routing and coverage outputs backed by an auditable network QA gate.

What this workflow helps you achieve:

  • Converts topology quality into a measurable go/no-go readiness decision.
  • Reduces false confidence in downstream routing analyses.
  • Creates a repeatable QA cycle for network maintenance governance.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Verify readiness scoring and pass/fail gate against agreed thresholds.
  3. Document each finding class and remediation owner.
  4. Provide before/after scores for remediated network versions.
  5. Include at least one known-defect regression case in acceptance evidence.

Common Questions

Q: Why did the readiness score drop even though we only edited a small area?
A: A small disconnected edit can increase both fragmentation and unreachability penalties, which heavily influence the overall score and gate.

Q: Why are we seeing many dead-end warnings in suburban neighborhoods?
A: Dead-end checks are structural and include cul-de-sacs; treat them as review flags, then classify valid cul-de-sacs separately from true data defects.

Q: Does this tool use our travel-time impedance field directly?
A: Current implementation derives cost-consistency from geometric segment-length variance; if policy requires impedance-field QA, pair this with dedicated impedance validation tooling.

Service Area Planning and Coverage Optimization

Purpose

Service Area Planning and Coverage Optimization delineates areas reachable from facilities (ambulance stations, distribution centers, cell towers) within time, distance, or cost thresholds. Identifies coverage gaps, overlap, and optimization opportunities.

Use this tool for coverage diagnostics around an existing facility network. For candidate site generation/selection workflows (for example top-N new-site selection), use market_access_and_site_intelligence_workflow.

Typical Questions This Tool Helps Answer

  • Which neighborhoods are reachable from our current facilities within 5, 10, and 15 minutes?
  • Where are the uncovered demand gaps after applying realistic travel-time, turn, and impedance constraints?
  • If one or more facilities close, how much coverage do we lose and where?

Background

Service-area planning estimates reachability from facilities under impedance constraints, then uses demand overlays to evaluate coverage quality and candidate expansion strategies.

For a demand location $i$ and facility set $F$, a common reachability criterion is:

$$\min_{f\in F} c(i,f) \le \tau$$

Where $c(i,f)$ is network travel cost and $\tau$ is a service threshold (for example response-time target).

Coverage and Equity Framing

Coverage optimization can be represented as maximizing covered demand mass under budget/facility constraints:

$$\max \sum_i d_i z_i, \quad z_i\in{0,1}$$

With optional equity controls to prevent improvements that systematically bypass low-access populations.

Methodological Considerations

  • Validate impedance and turn restrictions before catchment construction.
  • Evaluate multiple threshold values ($\tau$) to expose sensitivity of underserved-area mapping.
  • Compare baseline and candidate-network states under disruption scenarios, not just normal operating conditions.

Practical Interpretation Pitfalls

Common mistakes include reading coverage gain without equity context, ignoring threshold sensitivity, and over-trusting edge-of-network catchments where data quality is weaker.

Inputs

ParameterTypeRequiredDescription
networkVector (LineString or MultiLineString)YesNetwork layer used to derive service areas
facilitiesVector (Point or MultiPoint)YesFacility origin points
demand_pointsVector (Point, MultiPoint, Polygon, or MultiPolygon)NoOptional demand layer used for uncovered-demand and KPI calculations. Polygon features are converted to interior representative points.
ring_costsArrayYesPositive cost thresholds, e.g., [5, 10, 15]
scenariosCSVNoOptional scenario variants for open/closed facilities
service_area_merge_originsBooleanNoIf true, dissolve overlapping origin polygons into merged coverage per ring in service_areas output. Default: false.
optimization_modeStringNoOne of existing (default) or expansion.
candidate_modeStringNoExpansion candidate source: generated (default) or user_supplied. Ignored in existing mode.
candidate_sitesVector (Point or MultiPoint)NoRequired when optimization_mode=expansion and candidate_mode=user_supplied.
num_sites_to_selectIntegerNoNumber of expansion sites to select (default 1).
selection_strategyStringNoExpansion selection strategy: single_best (default) or top_k_greedy.
min_new_site_separationNumberNoMinimum spacing between selected expansion sites (map units).
max_generated_candidatesIntegerNoCandidate cap used when candidate_mode=generated (default 250).
ranked_candidates_vectorString pathNoOptional output vector path for ranked candidate sites with coverage-gain metrics.
edge_cost_fieldStringNoNumeric line field used as impedance. If omitted, Euclidean arc length is used.
mode_fieldStringNoField identifying transport mode per edge (e.g. walk, bus, car).
default_mode_speedNumberNoDefault speed (km/h) for mode-speed conversion when no mode-specific override matches.
mode_speed_overridesStringNoComma-separated mode:speed overrides, e.g. walk:5,bus:30.
allowed_modesStringNoComma-separated list of permitted modes, e.g. "walk,bus".
one_way_fieldStringNoField encoding one-way restrictions; accepts FT/TF/B codes and legacy boolean values.
node_cost_pointsVector (Point or MultiPoint)NoOptional point layer containing node/intersection entry-cost observations.
node_cost_fieldStringNoNumeric field in node_cost_points containing non-negative node entry costs.
node_cost_snap_distanceNumberNoOptional max assignment distance from each node-cost point to the nearest network node.
turn_penaltyNumberNoCost added for each standard turn (use the same units as edge_cost_field).
u_turn_penaltyNumberNoAdditional cost for U-turns.
forbid_u_turnsBooleanNoIf true, U-turns are forbidden at all nodes.
forbid_left_turnsBooleanNoIf true, all left turns are forbidden.
forbid_right_turnsBooleanNoIf true, all right turns are forbidden.
turn_restrictions_csvCSVNoPer-turn transition table with columns prev_x,prev_y,node_x,node_y,next_x,next_y; optional forbidden and turn_cost (or penalty/cost/extra_cost).
temporal_cost_profileCSVNoTime-of-day speed profile CSV for scheduled routing.
temporal_edge_id_fieldStringNoNetwork edge ID field that matches profile keys.
departure_timeStringNoISO-8601 departure time for temporal routing, e.g. "2024-06-15T08:00:00Z".
temporal_modeStringNoOne of multiplier or absolute.
temporal_fallbackStringNoFallback when no matching profile entry exists: static_cost or error.

Input Requirements

  • network must contain line geometries.
  • facilities must contain point geometries.
  • If CRS is known, projected CRS is required.
  • ring_costs must be numeric and strictly greater than zero.
  • scenarios file path must exist when provided.
  • candidate_sites is required when optimization_mode=expansion and candidate_mode=user_supplied.

scenarios CSV Schema (Authoritative)

Expected columns (in order):

scenario_id,facility_id,is_open,capacity

capacity is optional.

Accepted truthy values for is_open: 1, true, yes, y, open.

Example:

scenario_id,facility_id,is_open,capacity
all_open,1,true,100
all_open,2,true,100
one_open,1,true,100
one_open,2,false,0

Temporal Profile CSV Schema (Time-of-Day Routing)

The temporal_cost_profile CSV uses one row per edge and time window.

Expected columns:

edge_id,dow,start_minute,end_minute,value

Column definitions:

  • edge_id: Edge key matching temporal_edge_id_field in the network layer.
  • dow: Day of week (1..7, Monday=1).
  • start_minute: Inclusive minute-of-day (0..1439).
  • end_minute: Exclusive minute-of-day (1..1440, must be greater than start_minute).
  • value: Positive temporal modifier.

temporal_mode determines how value is interpreted:

  • multiplier: applies value as a multiplier to static edge cost.
  • absolute: treats value as the full edge cost for that time window.

Example (weekday AM peak slowdown on selected edges):

edge_id,dow,start_minute,end_minute,value
A_B,1,420,600,1.8
B_C,1,420,600,1.6
A_B,2,420,600,1.8
B_C,2,420,600,1.6

Set temporal_fallback to:

  • static_cost to use non-temporal impedance when no matching row exists.
  • error to fail fast when a temporal row is missing.

Parameters

ParameterTypeRequiredDescription
service_areasString pathYesOutput vector path for service area polygons
uncovered_demandString pathYesOutput vector path for uncovered demand points
scenario_summary_csvString pathYesOutput CSV path for scenario KPIs
ranked_candidates_csvString pathYesOutput CSV path for candidate ranking
html_reportString pathNoOptional HTML summary report output

Output Path Behavior

  • Vector format is inferred from extension for service_areas and uncovered_demand.
  • Unsupported vector extensions fail validation.
  • html_report is emitted only when path is provided.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Service areas layerservice_areasVector (Polygon/MultiPolygon)Network-derived multi-ring service areas
Uncovered demand layeruncovered_demandVector (Point)Demand points outside baseline service areas
Scenario summary reportscenario_summary_csvCSVScenario-level coverage/accessibility KPIs
Ranked candidates reportranked_candidates_csvCSVCandidate ranking by coverage gain and travel cost
Summary payloadsummaryJSON (result payload)Output path summary for orchestration
Optional reporthtml_reportHTMLOptional HTML summary report output when requested

uncovered_demand Schema

Geometry type: Point

Attributes:

  • demand_id

scenario_summary_csv Schema

scenario_id,total_demand_covered_pct,avg_accessibility,outlier_count

Notes:

  • Includes a baseline row.
  • total_demand_covered_pct is coverage percentage.
  • avg_accessibility is currently populated from the largest configured ring cost.

ranked_candidates_csv Schema

candidate_id,coverage_gain_pct,avg_network_travel_cost,rank

Result Payload Keys

  • service_areas
  • uncovered_demand
  • scenario_summary_csv
  • ranked_candidates_csv
  • summary
  • html_report (when requested)

Example

import whitebox_workflows as wbw

wbe = wbw.WbEnvironment()
wbe.service_area_planning_and_coverage_optimization(
        network="road_network.shp",
        facilities="fire_stations.shp",
        demand_points="residential_blocks.shp",
        ring_costs=[4.0, 8.0, 12.0],
        service_area_merge_origins=True,
        scenarios="coverage_scenarios.csv",
        service_areas="out/service_areas.geojson",
        uncovered_demand="out/uncovered_demand.geojson",
        scenario_summary_csv="out/scenario_summary.csv",
        ranked_candidates_csv="out/ranked_candidates.csv",
        html_report="out/service_area_report.html"
)

The example below adds time-of-day routing and turn penalties for a peak-hour coverage analysis.

wbe.service_area_planning_and_coverage_optimization(
        network="road_network.shp",
        facilities="fire_stations.shp",
        demand_points="residential_blocks.shp",
        ring_costs=[4.0, 8.0, 12.0],
        scenarios="coverage_scenarios.csv",
        edge_cost_field="MINUTES",
        one_way_field="ONEWAY",
        node_cost_points="intersection_delay_points.shp",
        node_cost_field="DELAY_MIN",
        node_cost_snap_distance=25.0,
        turn_penalty=0.3,
        u_turn_penalty=2.0,
        forbid_u_turns=True,
        temporal_cost_profile="am_peak_profiles.csv",
        temporal_edge_id_field="EDGE_ID",
        departure_time="2024-06-15T08:00:00Z",
        temporal_mode="multiplier",
        temporal_fallback="static_cost",
        service_areas="out/service_areas_am_peak.geojson",
        uncovered_demand="out/uncovered_demand_am_peak.geojson",
        scenario_summary_csv="out/scenario_summary_am_peak.csv",
        ranked_candidates_csv="out/ranked_candidates_am_peak.csv",
        html_report="out/service_area_report_am_peak.html"
)

Any WbEnvironment instance name is valid (wbe above is only an example).

Isochrone Map Recipe (Pro Tier)

To produce map-ready drive-time isochrones from facilities:

  1. Set ring_costs to your target bands (for example [5, 10, 15] minutes).
  2. Use a travel-time edge impedance field (for example edge_cost_field="MINUTES").
  3. Write service_areas to a polygon-capable output format (.gpkg, .geojson, .shp).
  4. Optionally add turn_penalty, u_turn_penalty, and node_cost_points for realistic intersection behavior.
  5. Optionally add temporal_cost_profile + departure_time for time-of-day isochrones.

Minimal multi-band isochrone example:

wbe.service_area_planning_and_coverage_optimization(
        network="road_network.gpkg",
        facilities="clinics.gpkg",
        ring_costs=[5.0, 10.0, 15.0],
        edge_cost_field="MINUTES",
        one_way_field="ONEWAY",
        service_areas="out/isochrones_5_10_15.gpkg",
        uncovered_demand="out/uncovered.gpkg",
        scenario_summary_csv="out/scenario_summary.csv",
        ranked_candidates_csv="out/ranked_candidates.csv"
)

References

  • Church, R., & ReVelle, C. (1974). "The Maximal Covering Location Problem." Papers and Proceedings of the Regional Science Association 32(1), 101–118.

Parameter Interaction Notes

For Service Area Planning and Coverage Optimization, output quality is most sensitive to parameter combinations rather than single values in isolation.

  • Wider ring_costs raise coverage but can reduce discriminative power in candidate ranking.
  • Sparse facilities can produce high uncovered-demand counts even with large rings when network topology is fragmented.
  • Scenario toggles in scenarios can shift rank ordering substantially; compare against baseline before acting.

QA and Acceptance Criteria

Use a staged acceptance approach for Service Area Planning and Coverage Optimization:

  1. Input integrity: validate projected CRS, network/facility geometry types, and positive ring costs.
  2. Method validity: verify baseline coverage against known served and unserved demand points.
  3. Output plausibility: confirm uncovered demand points are outside generated service polygons.
  4. Reproducibility: rerun with identical inputs and confirm stable scenario and ranking outputs.

Recommended acceptance checks:

  • All four required output artifacts are present and readable.
  • scenario_summary_csv includes baseline and any scenario IDs supplied.
  • ranked_candidates_csv ranks candidates from 1..N with no missing IDs.
  • uncovered_demand feature count aligns with expected coverage gaps.

Advanced Operational Guidance

For production deployment of Service Area Planning and Coverage Optimization:

  • Maintain fixed ring profiles (e.g., tactical, planning, policy) and avoid ad hoc threshold drift.
  • Store run metadata with input hashes, parameter JSON, and timestamp for auditability.
  • Use scenario IDs that map directly to planning decisions (for example, depot closure simulations).
  • Gate relocation recommendations on consistent baseline-vs-scenario deltas.

Implementation Patterns

Common implementation patterns with Service Area Planning and Coverage Optimization:

  • Baseline run: produce current-state service area and uncovered-demand diagnostics.
  • Scenario run: toggle facilities via scenarios CSV for closure/expansion analysis.
  • Candidate run: compare rank shifts using ranked_candidates_csv.
  • Release run: publish decision package with baseline + scenario evidence.

Use Service Area Planning and Coverage Optimization together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Service Area Planning and Coverage Optimization is most valuable when teams need defendable service-coverage decisions across baseline and what-if facility scenarios.

What this workflow helps you achieve:

  • Converts network accessibility into scenario-ready planning evidence.
  • Quantifies uncovered demand to support expansion or relocation decisions.
  • Creates a repeatable coverage governance workflow.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Confirm ring-cost profile aligns with policy and service-level commitments.
  3. Document baseline and scenario assumptions in the deliverable package.
  4. Provide uncovered-demand deltas and candidate rank changes.
  5. Include at least one stress scenario (closure or demand shift).

Common Questions

Q: Why did candidate ranking change so much after a small ring-cost change?
A: Candidate ranking is sensitive to threshold cutoffs; small ring adjustments can move many demand points across covered/uncovered boundaries.

Q: What does avg_accessibility represent in the scenario summary?
A: In current implementation it is populated from the largest configured ring-cost threshold and should be interpreted as a planning proxy, not a per-demand mean travel-time statistic.

Q: Why do we still have uncovered demand with large service rings?
A: Uncovered points often indicate network disconnects or facility placement limitations, not just threshold selection.

Market Access and Site Planning

Purpose

Market Access and Site Planning evaluates market accessibility, trade area definition, site suitability for retail/commercial facilities, and competitive positioning. Supports site selection and market penetration strategy.

Typical Questions This Tool Helps Answer

  • Which candidate site gives the strongest coverage gain with acceptable competitive overlap?
  • Are we under-served, balanced, or saturated in each target area?
  • How do candidate rankings change under peak-hour impedance and routing restrictions?

Background

Network planning workflows use graph-theoretic representations of roads, routes, or linear assets, where node-edge topology and impedance attribution directly control results. Missing restrictions, incorrect turn logic, or stale demand assumptions can dominate outcome quality.

These tools are best interpreted as constrained optimization and diagnostics frameworks. Decisions should be based on trade-offs across service, resilience, and cost objectives rather than any single metric.

Market-access intelligence merges catchment logic, travel impedance, and competitive overlap to rank candidate sites. Decision confidence improves when sensitivity to demand assumptions is explicitly reviewed.

Methodological Considerations

  • Topology validation should precede optimization or scenario simulation.
  • Explicitly represent operational constraints (time windows, restrictions, capacities, closures) before comparing objective outcomes.
  • Test outcomes under stress scenarios so selected plans remain stable under realistic disruptions.

Practical Interpretation Pitfalls

Single-metric improvements can hide degraded resilience or equity; compare candidate plans across multiple KPIs and scenario conditions.

Inputs

ParameterTypeRequiredDescription
networkVector (line)YesStreet network used for travel-cost routing (LineString and MultiLineString).
sites_existingVector (point)YesExisting sites (Point or MultiPoint).
sites_candidatesVector (point)NoCandidate sites to evaluate (Point or MultiPoint). Required for candidate_mode="user_supplied".
demand_surfaceVector (point/polygon)YesDemand locations as points or polygons. Polygons are converted to representative interior points for scoring.
competition_sitesVector (point)NoCompetitor locations. If omitted, overlap uses sites_existing.

Role Split (Important)

  • sites_existing: your incumbent baseline sites used for existing coverage and coverage-gain calculations.
  • competition_sites: optional separate competitor layer used for overlap pressure.
  • If competition_sites is not provided, overlap is computed against sites_existing.
  • For most business scenarios, place your current sites in sites_existing and other providers in competition_sites.

Parameters

  • ring_costs (required): JSON array of positive numeric thresholds, for example [5.0, 10.0, 15.0].
  • The model uses max(ring_costs) as the catchment threshold.
  • Units follow your network impedance units.

Candidate Generation and Selection

  • candidate_mode (optional): user_supplied (default) or generated.
  • num_sites_to_select (optional, default 1): number of top sites to flag as selected.
  • selection_strategy (optional, default single_best): single_best or top_k_greedy.
  • min_new_site_separation (optional): minimum separation distance between selected sites.
  • max_generated_candidates (optional, default 250): max generated seed candidates when candidate_mode="generated".

Optional Routing Cost Parameters

Forwarded routing parameters:

  • cost_method
  • edge_cost_field
  • one_way_field (accepts FT/TF/B codes and legacy boolean values)
  • mode_field
  • default_mode_speed
  • mode_speed_overrides
  • allowed_modes
  • temporal_cost_profile
  • temporal_edge_id_field
  • departure_time
  • temporal_mode
  • temporal_fallback
  • turn_penalty
  • u_turn_penalty
  • forbid_u_turns
  • forbid_left_turns
  • forbid_right_turns
  • turn_restrictions_csv
  • node_cost_points
  • node_cost_field
  • node_cost_snap_distance

How Ranking Works

Per candidate site:

  • Demand coverage percent: share of demand points within threshold.
  • Average distance to demand: mean network cost to demand points.
  • Competitive overlap percent: share of competitor points within threshold.
  • Accessibility score: normalized inverse average-distance score on a 0-100 scale.
  • Composite rank score: 0.50 * demand_coverage_pct + 0.25 * accessibility_score + 0.25 * (100 - competitive_overlap_pct).

Opportunity band definitions:

  • expand_now: composite >= 80, coverage gain > 5, overlap < 40
  • pilot: composite >= 65 and coverage gain > 0
  • saturated: overlap >= 60
  • monitor: everything else

Outputs

OutputTypeDescription
catchments_outputVector (polygon)Candidate catchments and key score fields.
overlap_analysis_outputVector (point)Candidate overlap diagnostics and opportunity band fields.
candidate_rank_csvCSVRanked candidate list and score components.
executive_summary_jsonJSONDecision summary with recommendation and gate.
market_action_queue_csvCSV (optional)Ordered action queue with recommended next action.
html_reportHTML (optional)Optional HTML summary artifact.

Map interpretation note:

  • catchments_output stores one polygon per candidate site; these are candidate trade-area polygons, not separate ring-band isochrone polygons.
  • Catchments are built as convex hulls of covered demand points plus each candidate point.
  • When a hull cannot be formed (insufficient valid geometry), a small fallback square polygon is written.
  • overlap_analysis_output is a point layer. If you see squares there, it is typically point marker symbology.

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
catchments_outputCandidate catchment polygon file
overlap_analysis_outputCandidate overlap diagnostics vector file
candidate_rank_csvFull candidate ranking CSV
executive_summary_jsonExecutive decision summary JSON
summaryAlias → same path as executive_summary_json
market_action_queue_csvOptional action queue CSV (only present when market_action_queue_csv argument is supplied)
top_ranked_siteString — site_id of the highest-ranked candidate (or "N/A" if no candidates scored)
html_reportOptional HTML report (only present when html_report argument is supplied)

catchments_output fields

  • SITE_ID, COV_PCT, ACC_SCORE, OVR_PCT, RANK

overlap_analysis_output fields

  • SITE_ID, OVR_PCT, GAIN_PCT, OPP_BAND, CMP_SCORE, TOT_COMP

candidate_rank_csv columns

rank,site_id,x,y,demand_coverage_pct,coverage_gain_pct,unmet_demand_count,avg_distance_to_demand,competitive_overlap_pct,accessibility_score,composite_rank_score,opportunity_band,selected_in_top_k

market_action_queue_csv columns (optional)

rank,site_id,opportunity_band,coverage_gain_pct,composite_rank_score,recommended_action

executive_summary_json keys

  • analysis_timestamp, schema_version, total_candidates_evaluated, total_demand_points
  • market_metrics, top_ranked_candidates, decision_rationale, recommendation, decision_gate

Decision gate rule:

  • decision_gate=true when average candidate coverage is above 70% and average overlap is below 50%.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.market_access_and_site_intelligence_workflow(
  network="street_network.gpkg",
  sites_existing="existing_sites.gpkg",
  sites_candidates="candidate_sites.gpkg",
  demand_surface="demand_points.gpkg",
  competition_sites="competitors.gpkg",
  ring_costs=[5.0, 10.0, 15.0],
  catchments_output="outputs/candidate_catchments.gpkg",
  overlap_analysis_output="outputs/competitive_overlap.gpkg",
  candidate_rank_csv="outputs/candidate_ranking.csv",
  executive_summary_json="outputs/market_summary.json",
  market_action_queue_csv="outputs/market_action_queue.csv",
  html_report="outputs/market_access_report.html"
)

Generated-candidate mode with temporal and turn-aware routing:

env.market_access_and_site_intelligence_workflow(
  network="street_network.gpkg",
  sites_existing="existing_sites.gpkg",
  demand_surface="demand_points.gpkg",
  competition_sites="competitors.gpkg",
  ring_costs=[5.0, 10.0, 15.0],
  candidate_mode="generated",
  selection_strategy="top_k_greedy",
  num_sites_to_select=5,
  min_new_site_separation=1000.0,
  max_generated_candidates=250,
  edge_cost_field="MINUTES",
  one_way_field="ONEWAY",
  node_cost_points="intersection_delay_points.shp",
  node_cost_field="DELAY_MIN",
  node_cost_snap_distance=25.0,
  turn_penalty=0.3,
  u_turn_penalty=2.0,
  forbid_u_turns=True,
  temporal_cost_profile="am_peak_profiles.csv",
  temporal_edge_id_field="EDGE_ID",
  departure_time="2024-06-15T08:00:00Z",
  temporal_mode="multiplier",
  temporal_fallback="static_cost",
  catchments_output="outputs/candidate_catchments_peak.gpkg",
  overlap_analysis_output="outputs/competitive_overlap_peak.gpkg",
  candidate_rank_csv="outputs/candidate_ranking_peak.csv",
  executive_summary_json="outputs/market_summary_peak.json",
  market_action_queue_csv="outputs/market_action_queue_peak.csv",
  html_report="outputs/market_access_report_peak.html"
)

References

  • Huff, D. L. (1963). "A Probabilistic Analysis of Shopping Center Trade Areas." Land Economics 39(1), 81–90.

Parameter Interaction Notes

ring_costs selection is the highest-impact control:

  • Lower thresholds produce tighter catchments and usually lower overlap.
  • Higher thresholds increase coverage and often increase overlap in dense markets.
  • Always interpret scores in context of demand-point quality and completeness.

QA and Acceptance Criteria

Use a staged acceptance approach for Market Access and Site Planning:

  1. Validate projected CRS and non-empty network/candidate/demand point inputs.
  2. Confirm all required output paths are set and writable.
  3. Verify candidate ranking aligns with known market context.
  4. Re-run with same inputs to confirm deterministic outputs.

Recommended acceptance checks:

  • Candidate count in CSV matches evaluated candidate points.
  • Output layers contain expected attribute fields.
  • Executive summary includes valid top candidates and decision gate.

Advanced Operational Guidance

For production deployment of Market Access and Site Planning:

  • Keep demand and competitor snapshots date-stamped for consistent comparisons.
  • Use the action queue as a planning filter, then run standard site due diligence before commitment.

Implementation Patterns

Common implementation patterns with Market Access and Site Planning:

  • Baseline run with current market snapshot.
  • Sensitivity run with alternate ring_costs arrays.
  • Governance run with archived summary JSON and ranking CSV.

Use Market Access and Site Planning together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Market Access and Site Planning is most valuable when teams need measurable service-level improvements (coverage, response time, cost-to-serve) with governance-ready transparency.

What this workflow helps you achieve:

  • Translates network complexity into decision-ready options.
  • Supports defensible operational planning with explicit constraints.
  • Creates repeatable workflows for quarterly and annual optimization cycles.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Confirm objective function matches business KPI priorities.
  3. Document constraints (capacity, time windows, exclusions) in deliverable notes.
  4. Provide baseline-vs-optimized comparison metrics.
  5. Include at least one scenario stress test (demand spike, outage, or route closure).

Common Questions

Q: Why does a high-coverage candidate sometimes rank lower?
A: Ranking also penalizes high competition overlap and poor relative accessibility.

Q: What does decision_gate=false mean?
A: Average candidate coverage did not exceed 70% and/or average overlap was not below 50%.

Q: Are catchments true isochrone polygons?
A: Current implementation outputs hull-based catchment polygons from covered demand points.

Q: Can polygon demand data be used directly?
A: Convert polygon demand to centroid points first for reliable scoring.

Emergency Accessibility Scenario Planning

Purpose

Emergency Accessibility Scenario Planning computes rapid-response dispatch routes from emergency facilities (fire, police, ambulance) under multiple scenarios (blocked roads, facility unavailability, cascading demand), enabling contingency planning and resilience assessment.

Typical Questions This Tool Helps Answer

  • Under each disruption scenario, which populations and facilities fall outside our response-time targets?
  • Which scenario produces the worst accessibility loss and by how much versus baseline?
  • Which closure or blockage assumptions should be prioritized for mitigation planning?

Background

Network planning workflows use graph-theoretic representations of roads, routes, or linear assets, where node-edge topology and impedance attribution directly control results. Missing restrictions, incorrect turn logic, or stale demand assumptions can dominate outcome quality.

These tools are best interpreted as constrained optimization and diagnostics frameworks. Decisions should be based on trade-offs across service, resilience, and cost objectives rather than any single metric.

Emergency routing simulation stress-tests accessibility under disruptions, closures, and demand spikes. Value comes from comparing resilience trade-offs across scenarios rather than relying on single-run outputs.

Methodological Considerations

  • Topology validation should precede optimization or scenario simulation.
  • Explicitly represent operational constraints (time windows, restrictions, capacities, closures) before comparing objective outcomes.
  • Test outcomes under stress scenarios so selected plans remain stable under realistic disruptions.

Practical Interpretation Pitfalls

Single-metric improvements can hide degraded resilience or equity; compare candidate plans across multiple KPIs and scenario conditions.

Inputs

ParameterTypeRequiredDescription
networkVector (line)YesInput network (LineString or MultiLineString).
critical_facilitiesVector (point)YesEmergency origin facilities (Point or MultiPoint).
demand_pointsVector (point)NoOptional demand points for KPI coverage calculations. Current KPI extraction uses Point geometries.
ring_costsJSON arrayYesRing costs, for example [5.0, 10.0, 15.0]; each value must be finite and > 0.
scenario_csvCSVYesScenario table with columns scenario_id,max_cost_multiplier and optional blocked_value.

Parameters

  • scenario_template (optional): custom, flood, wildfire, earthquake.
  • scenario_block_source_field (optional): network field used with blocked_value to block scenario edges.
  • baseline_service_areas (required): baseline output polygons path.
  • worst_case_service_areas (required): worst-scenario output polygons path.
  • scenario_summary_csv (required): scenario KPI output CSV path.
  • simulation_report (required): summary JSON output path.
  • html_report (optional): optional HTML report path.

Optional Routing Cost Parameters

ParameterTypeDefaultDescription
edge_cost_fieldStringNumeric line field used as impedance. If omitted, Euclidean arc length is used.
mode_fieldStringField identifying transport mode per edge.
default_mode_speedNumberDefault speed (km/h) for mode-speed conversion.
mode_speed_overridesStringComma-separated mode:speed overrides, e.g. walk:5,drive:40.
allowed_modesStringComma-separated list of permitted modes.
one_way_fieldStringField encoding one-way restrictions; accepts FT/TF/B codes and legacy boolean values.
node_cost_pointsVector (point)Optional point layer containing node/intersection entry-cost observations.
node_cost_fieldStringNumeric field in node_cost_points containing non-negative node entry costs.
node_cost_snap_distanceNumberOptional max assignment distance from each node-cost point to the nearest network node.
turn_penaltyNumberCost added for each standard turn.
u_turn_penaltyNumberAdditional cost for U-turns.
forbid_u_turnsBooleanIf true, U-turns are forbidden at all nodes.
forbid_left_turnsBooleanIf true, all left turns are forbidden.
forbid_right_turnsBooleanIf true, all right turns are forbidden.
turn_restrictions_csvCSVPer-turn transition table with columns prev_x,prev_y,node_x,node_y,next_x,next_y; optional forbidden and turn_cost.
temporal_cost_profileCSVTime-of-day speed profile CSV for scheduled routing.
temporal_edge_id_fieldStringNetwork edge ID field that matches profile keys.
departure_timeStringISO-8601 departure time, e.g. "2024-06-15T08:00:00Z".
temporal_modeStringOne of multiplier or absolute.
temporal_fallbackStringFallback when no profile entry matches: static_cost or error.

Scenario CSV Rules

Required columns:

  • scenario_id
  • max_cost_multiplier

Optional column:

  • blocked_value

Notes:

  • Quoted commas are supported.
  • max_cost_multiplier must be finite and > 0.
  • Blank rows are ignored.

Template checks:

  • flood: requires block-source field and at least one blocked_value; all multipliers must be <= 1.2.
  • wildfire: each multiplier must be in [0.5, 1.0].
  • earthquake: requires block-source field and at least one blocked_value.

Outputs

OutputTypeDescription
baseline_service_areasVector (polygon)Baseline merged service-area polygons.
worst_case_service_areasVector (polygon)Service areas for the lowest-coverage scenario.
scenario_summary_csvCSVScenario metrics and deltas from baseline coverage.
simulation_reportJSONBaseline, scenario list, best and worst scenario summary.
html_reportHTML (optional)Optional HTML wrapper over summary JSON.

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
baseline_service_areasBaseline service-area polygon file
worst_case_service_areasWorst-scenario polygon file
scenario_summary_csvScenario KPI CSV
simulation_reportSimulation report JSON
summaryAlias → same path as simulation_report
html_reportOptional HTML report (only present when html_report argument is supplied)

scenario_summary_csv schema

scenario_id,max_cost_multiplier,blocked_value,covered_count,total_count,covered_pct,delta_from_baseline_pct

simulation_report schema

Top-level keys:

  • workflow
  • scenario_template
  • baseline
  • scenario_count
  • best_scenario
  • worst_scenario
  • scenarios

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.emergency_scenario_routing_and_accessibility_simulator(
        network="city_network.gpkg",
        critical_facilities="critical_facilities.gpkg",
        demand_points="demand_points.gpkg",
        ring_costs=[5.0, 10.0, 15.0],
        scenario_csv="scenarios.csv",
        scenario_template="flood",
        scenario_block_source_field="STATUS",
        baseline_service_areas="outputs/em_baseline.gpkg",
        worst_case_service_areas="outputs/em_worst.gpkg",
        scenario_summary_csv="outputs/em_scenarios.csv",
        simulation_report="outputs/em_report.json",
        html_report="outputs/em_report.html"
)

The example below adds travel-time impedance, turn penalties, and a peak-hour speed profile to make scenario comparisons more realistic.

env.emergency_scenario_routing_and_accessibility_simulator(
        network="city_network.gpkg",
        critical_facilities="critical_facilities.gpkg",
        demand_points="demand_points.gpkg",
        ring_costs=[5.0, 10.0, 15.0],
        scenario_csv="scenarios.csv",
        scenario_template="flood",
        scenario_block_source_field="STATUS",
        edge_cost_field="MINUTES",
        one_way_field="ONEWAY",
        node_cost_points="intersection_delay_points.shp",
        node_cost_field="DELAY_MIN",
        node_cost_snap_distance=25.0,
        turn_penalty=0.3,
        u_turn_penalty=2.0,
        forbid_u_turns=True,
        temporal_cost_profile="am_peak_profiles.csv",
        temporal_edge_id_field="EDGE_ID",
        departure_time="2024-06-15T08:00:00Z",
        temporal_mode="multiplier",
        temporal_fallback="static_cost",
        baseline_service_areas="outputs/em_baseline_peak.gpkg",
        worst_case_service_areas="outputs/em_worst_peak.gpkg",
        scenario_summary_csv="outputs/em_scenarios_peak.csv",
        simulation_report="outputs/em_report_peak.json",
        html_report="outputs/em_report_peak.html"
)

References

  • FEMA (Federal Emergency Management Agency) Hazard Mitigation Planning Guidelines

Parameter Interaction Notes

Results are most sensitive to scenario multipliers and demand-point completeness.

  • Larger ring costs and multipliers tend to increase measured coverage.
  • Missing or sparse demand points can make scenario comparisons look unrealistically favorable.

QA and Acceptance Criteria

Use a staged acceptance approach for Emergency Accessibility Scenario Planning:

  1. Validate geometry types and scenario CSV schema.
  2. Confirm required output paths are writable.
  3. Verify scenario summary rows match parsed scenarios.
  4. Confirm worst-case output corresponds to lowest covered_pct.

Recommended acceptance checks:

  • simulation_report.scenario_count matches expected scenario count.
  • delta_from_baseline_pct values match scenario vs baseline coverage math.
  • Worst scenario in JSON is reflected in worst_case_service_areas output.

Advanced Operational Guidance

For production deployment of Emergency Accessibility Scenario Planning:

  • Version control scenario CSVs and template choices for auditability.
  • Keep block-source coding dictionaries standardized across departments.
  • Validate scenario assumptions before interpreting policy decisions.

Implementation Patterns

Common implementation patterns with Emergency Accessibility Scenario Planning:

  • Baseline + full scenario batch run.
  • Targeted stress scenarios for known bottlenecks.
  • Governance run with archived CSV/JSON artifacts.

Use Emergency Accessibility Scenario Planning together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Emergency Accessibility Scenario Planning is most valuable when teams need measurable service-level improvements (coverage, response time, cost-to-serve) with governance-ready transparency.

What this workflow helps you achieve:

  • Translates network complexity into decision-ready options.
  • Supports defensible operational planning with explicit constraints.
  • Creates repeatable workflows for quarterly and annual optimization cycles.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Confirm objective function matches business KPI priorities.
  3. Document constraints (capacity, time windows, exclusions) in deliverable notes.
  4. Provide baseline-vs-optimized comparison metrics.
  5. Include at least one scenario stress test (demand spike, outage, or route closure).

Common Questions

Q: Why do all scenarios look similar to baseline?
A: Multipliers may be too mild or blocked values may not match network attribute values.

Q: Why is coverage always 100%?
A: If demand points are omitted, KPI coverage defaults to 100%.

Q: What does blocked_value control?
A: It selects which network edges are blocked in a scenario when mapped through scenario_block_source_field.

Route Event Governance

Purpose

Route Event Governance establishes and manages a linear referencing system (LRS) for route networks, enables attribute management using route/measure location, and provides tools for asset inventory, lifecycle tracking, and spatiotemporal querying of linear assets (poles, segments, intersections).

Typical Questions This Tool Helps Answer

  • Where do route events contain gaps, overlaps, or invalid measure direction that break LRS consistency?
  • Which event records violate attribute domain or policy rules?
  • What portion of event issues can be auto-corrected versus escalated for manual governance review?

Background

Network planning workflows use graph-theoretic representations of roads, routes, or linear assets, where node-edge topology and impedance attribution directly control results. Missing restrictions, incorrect turn logic, or stale demand assumptions can dominate outcome quality.

These tools are best interpreted as constrained optimization and diagnostics frameworks. Decisions should be based on trade-offs across service, resilience, and cost objectives rather than any single metric.

Route-event governance formalizes linear referencing events with temporal and spatial consistency controls. Strong governance depends on reproducible event segmentation and audit-grade lineage.

Methodological Considerations

  • Topology validation should precede optimization or scenario simulation.
  • Explicitly represent operational constraints (time windows, restrictions, capacities, closures) before comparing objective outcomes.
  • Test outcomes under stress scenarios so selected plans remain stable under realistic disruptions.

Practical Interpretation Pitfalls

Single-metric improvements can hide degraded resilience or equity; compare candidate plans across multiple KPIs and scenario conditions.

Inputs

ParameterTypeRequiredDescription
eventsVectorYesInput event layer containing route and measure fields.
route_id_fieldStringYesRoute identifier field name.
from_measure_fieldStringYesInterval start measure field name.
to_measure_fieldStringYesInterval end measure field name.

Parameters

  • gap_tolerance (optional): gap size below this value is ignored; default 0.0.
  • overlap_tolerance (optional): overlap size below this value is ignored; default 0.0.
  • auto_fix (optional): if true, fix descending intervals and trim overlaps when possible.
  • domain_rules_json (optional): per-field domain policy file.
  • governed_events (required): output path for governed events.
  • issues_csv (required): output path for issue log.
  • corrected_events (optional): output path for corrected records.
  • governance_report (required): output path for governance summary JSON.
  • remediation_queue_csv (optional): output path for prioritized remediation queue.
  • html_report (optional): output path for HTML summary.

Domain Rules JSON (Optional)

Per-field rules can include:

  • allowed_values
  • regex
  • min
  • max

Violations are reported as domain_validation issues.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Governed events layergoverned_eventsVectorQA-passed events with governance status fields.
Issue logissues_csvCSVPer-event issue log (rule, severity, measure span, description).
Governance contractgovernance_reportJSONSummary metrics (total_events, pass/fail counts, distributions).
Summary aliassummaryJSONAlias key to the same JSON file as governance_report.
Remediation queueremediation_queue_csvCSV (optional)Prioritized corrective action list.
Corrected events layercorrected_eventsVector (optional)Corrected records and correction metadata when fixes are applied.
Optional reporthtml_reportHTML (optional)Optional summary report for business audiences.

governed_events added fields

  • GOVERNANCE_STATUS: PASSED or CORRECTED
  • CORRECTIONS: none, descending_fix, overlap_trim, or descending_fix+overlap_trim

issues_csv schema

event_id,route_id,rule_violated,severity,description,measure_start,measure_end

remediation_queue_csv schema

priority,event_id,route_id,rule_violated,severity,recommended_action

governance_report keys

  • total_events
  • passed_events
  • failed_events
  • pass_rate_percent
  • rules_violated
  • severity_distribution
  • correctable_count
  • domain_rules_applied

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.route_event_governance_for_linear_assets(
        events="route_events.gpkg",
        route_id_field="route_id",
        from_measure_field="from_m",
        to_measure_field="to_m",
        auto_fix=True,
        domain_rules_json="domain_rules.json",
        governed_events="outputs/governed_events.gpkg",
        issues_csv="outputs/issues.csv",
        corrected_events="outputs/corrected_events.gpkg",
        governance_report="outputs/governance_report.json",
        remediation_queue_csv="outputs/remediation_queue.csv",
        html_report="outputs/governance_report.html"
)

References

  • OGC (Open Geospatial Consortium) Linear Reference Systems Standard

Parameter Interaction Notes

Output strictness depends on tolerance settings and auto-fix policy.

Note: This workflow validates linear-referencing event intervals and does not build a routing graph, so one-way routing parameters (for example one_way_field with FT/TF/B values) are not applicable.

  • Tight tolerances catch more defects but may increase noise from minor measure jitter.
  • Looser tolerances reduce issue counts but can hide meaningful defects.
  • Auto-fix improves throughput for fixable issues, but review is still recommended before publication.

QA and Acceptance Criteria

Use a staged acceptance approach for Route Event Governance:

  1. Validate required fields and measure data quality.
  2. Validate domain-rules JSON format when used.
  3. Confirm issue counts align with known data conditions.
  4. Confirm correction outputs match governance expectations.

Recommended acceptance checks:

  • passed_events + failed_events equals total_events.
  • issues_csv includes all expected issue categories.
  • governed_events contains governance status columns.
  • corrected_events is present only when correction records exist.

Advanced Operational Guidance

For production deployment of Route Event Governance:

  • Treat domain-rules JSON as a governed policy artifact.
  • Use remediation queue output for data stewardship backlogs.
  • Archive run artifacts (issues_csv, governance_report) for audit trails.

Implementation Patterns

Common implementation patterns with Route Event Governance:

  • Compliance scan (auto_fix=false) for strict diagnostics.
  • Corrective scan (auto_fix=true) for fast recovery of fixable defects.
  • Release-ready scan with frozen rule policy and archived outputs.

Use Route Event Governance together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Route Event Governance is most valuable when teams need measurable service-level improvements (coverage, response time, cost-to-serve) with governance-ready transparency.

What this workflow helps you achieve:

  • Translates network complexity into decision-ready options.
  • Supports defensible operational planning with explicit constraints.
  • Creates repeatable workflows for quarterly and annual optimization cycles.

Results Delivery Checklist

Before sharing results with stakeholders:

  1. Validate network topology and impedance attributes for all served areas.
  2. Confirm objective function matches business KPI priorities.
  3. Document constraints (capacity, time windows, exclusions) in deliverable notes.
  4. Provide baseline-vs-optimized comparison metrics.
  5. Include at least one scenario stress test (demand spike, outage, or route closure).

Common Questions

Q: Why are some events missing from governed output?
A: Error-level failing events are excluded if not fixable (or when auto-fix is off).

Q: Why is corrected output missing?
A: Corrected output is written only when auto_fix=true, a path is supplied, and at least one correction occurs.

Q: How should we interpret CORRECTED status?
A: The event passed after automatic correction; review is still recommended before publication.

Utility Corridor Access Planning

What This Tool Does

Utility Corridor Access Planning prioritizes encroachment hotspots near utility corridors and pairs them with the nearest access points for field-response planning.

Typical Questions This Tool Helps Answer

  • Which encroachments are highest priority based on corridor proximity and access difficulty?
  • What is the nearest viable access point for each hotspot and what response SLA category applies?
  • What ranked field-response queue should operations execute first this week?

When To Use

  • Utility corridor patrol planning
  • Encroachment triage for line, pipe, or right-of-way assets
  • Dispatch queue generation for maintenance response teams

What You Need

InputDescription
Corridor linesUtility corridor centerlines.
Encroachment observationsPoints, lines, or polygons describing the threat.
Access pointsField access points used to plan response.

Key Settings

SettingDefaultGuidance
corridor_influence_distance30.0How far from the corridor a hotspot can be and still be retained.
high_risk_distance10.0Distance used to define the highest-risk condition.

What You Get

DeliverableFormatDescription
hotspotsVectorHotspot points sorted by priority.
priority_csvCSVRanked response queue.
planning_reportJSONPlanning summary report.
summaryJSONAlias for the planning report.
response_queue_csvCSVOptional dispatch-ready queue with response guidance.
html_reportHTMLOptional dashboard report.

The hotspot layer includes corridor, access, risk, priority, SLA, access-difficulty, and lineage fields. The CSV lists the same records in ranked order.

Runtime Output Keys

result.outputs["hotspots"]
result.outputs["priority_csv"]
result.outputs["planning_report"]
result.outputs["summary"]
result.outputs["response_queue_csv"]
result.outputs["html_report"]

Common Questions

Q: Which output should I review first for decision-making? A: Start with priority_csv and planning_report.counts_by_priority_band, then confirm urgency in hotspot PRIORITY and SLA_HOURS.

Q: What is a common interpretation mistake? A: Treating distance to corridor alone as urgency. Priority combines RISK_SCORE, ACCESS_DIST, and corridor proximity.

Q: Which settings most change outcomes? A: corridor_influence_distance and high_risk_distance usually drive the biggest shift in critical hotspot counts.

Q: How should operations use the outputs? A: Use response_queue_csv for dispatch sequencing and validate top critical records with field confirmation before issuing final work orders.

Results Delivery Checklist

  • The corridor, encroachment, and access layers were checked for alignment
  • hotspots was reviewed in GIS software
  • The top rows in priority_csv were confirmed
  • The chosen response queue matches the operations plan

Operational Notes

  • This workflow does not build or traverse a road-routing graph.
  • One-way routing parameters (for example one_way_field with FT/TF/B values) are not used.
  • Prioritize sensitivity testing on corridor_influence_distance and high_risk_distance before locking production thresholds.
  • network_readiness_and_diagnostics_intelligence
  • service_area_planning_and_coverage_optimization
  • emergency_scenario_routing_and_accessibility_simulator

When To Use This Workflow

Use Utility Corridor Access Planning when you need a repeatable hotspot-prioritization and access-assignment package for dispatch and field-response planning.

Parcel Fabric Topology Compliance

Purpose

Parcel Fabric Topology Compliance validates cadastral parcel and administrative boundary topology, detects overlaps and gaps, and enforces compliance with land fabric standards enabling authoritative reference data maintenance.

Typical Questions This Tool Helps Answer

  • Which parcels violate topology rules (overlaps, gaps, slivers) and where are they located?
  • Will our parcel fabric pass jurisdiction-specific quality thresholds before publication?
  • What can be safely auto-fixed now versus what requires manual cadastral review?

Background

Network planning workflows use graph-theoretic representations of roads, routes, or linear assets, where node-edge topology and impedance attribution directly control results. Missing restrictions, incorrect turn logic, or stale demand assumptions can dominate outcome quality.

These tools are best interpreted as constrained optimization and diagnostics frameworks. Decisions should be based on trade-offs across service, resilience, and cost objectives rather than any single metric.

Land-fabric topology compliance checks enforce geometric and adjacency integrity so downstream governance and analytics are legally and operationally defensible. Error classes should be triaged by business impact.

Methodological Considerations

  • Topology validation should precede optimization or scenario simulation.
  • Explicitly represent operational constraints (time windows, restrictions, capacities, closures) before comparing objective outcomes.
  • Test outcomes under stress scenarios so selected plans remain stable under realistic disruptions.

Practical Interpretation Pitfalls

Single-metric improvements can hide degraded resilience or equity; compare candidate plans across multiple KPIs and scenario conditions.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
parcelsVectorYesMust contain polygon or multipolygon geometry. If CRS metadata is present, it must be projected.Parcel layer to audit and optionally auto-fix.

For sliver detection, the workflow first measures parcel area from geometry. If that is unavailable, it falls back to an existing area field named gis_area, shape_area, shape_starea__, st_area, or area.

Parameters

ArgumentTypeRequiredDefaultDescription
min_sliver_areaFloatNo1.0 for generic, 2.0 for ontario_mpac when omittedParcels smaller than this area are counted as slivers.
auto_fixBooleanNofalseEnables auto-fix output. If set to true, corrected_parcels becomes required.
jurisdiction_templateStringNogenericSupported values: generic, ontario_mpac. Sets the default sliver threshold profile.
topology_violationsVector output pathYesNoneOutput path for the point violations layer.
issues_csvCSV output pathYesNoneOutput path for the feature-level topology issue report.
compliance_reportJSON output pathYesNoneOutput path for the workflow compliance summary JSON.
corrected_parcelsVector output pathConditionalNoneRequired only when auto_fix=true.
remediation_queue_csvCSV output pathNoNoneOptional prioritized remediation queue.
html_reportHTML output pathNoNoneOptional HTML dashboard version of the report.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Topology violations layertopology_violationsPoint vectorOne feature per rule violation, with fields RULE_ID, RULE_TYPE, SEVERITY, CONFIDENCE, FEATURE_FID, RELATED_FID, and DETAIL.
Feature issues reportissues_csvCSVHeader is exactly feature_fid,geometry_type,issue_type,detail. This is the feature-level geometry/topology issue list.
Compliance contractcompliance_reportJSONKeys include workflow, jurisdiction_template, parcel counts, rule counts, sliver counts, sliver_examples, sliver_calibration_profile, auto_fix_enabled, autofix_changes_applied, pass_fail, and outputs.
Summary aliassummaryJSONAlias key to the same JSON file as compliance_report.
Corrected parcels layercorrected_parcelsVectorOptional corrected parcel layer written only when auto-fix is enabled.
Remediation queueremediation_queue_csvCSVHeader is exactly priority,issue_type,rule_or_code,count,recommended_action. Used for operational follow-up.
Optional reporthtml_reportHTMLOptional dashboard rendering of the compliance report.

Important JSON report fields

KeyMeaning
pass_failtrue only when there are no topology violations and no sliver parcels in the pre-fix analysis.
sliver_examplesUp to 20 example parcels, each with fid and area.
sliver_calibration_profileThreshold summary array with threshold_area, count, and share_pct.
outputsPaths to topology_violations, issues_csv, corrected_parcels, and remediation_queue_csv.

Returned payload keys

The workflow returns these output keys:

  • topology_violations
  • issues_csv
  • compliance_report
  • summary (same file as compliance_report)
  • corrected_parcels when auto-fix is enabled
  • remediation_queue_csv when requested
  • html_report when requested

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.parcel_and_land_fabric_topology_compliance_workflow(
        parcels="county_parcels.gpkg",
        jurisdiction_template="ontario_mpac",
        min_sliver_area=2.0,
        auto_fix=True,
        topology_violations="/tmp/parcel_violations.gpkg",
        issues_csv="/tmp/parcel_issues.csv",
        compliance_report="/tmp/parcel_compliance.json",
        corrected_parcels="/tmp/parcel_corrected.gpkg",
        remediation_queue_csv="/tmp/parcel_remediation_queue.csv",
        html_report="/tmp/parcel_compliance_report.html",
)

References

  • NSDI cadastral data standards
  • Ontario MPAC parcel-fabric operating practices reflected by the ontario_mpac template

Parameter Interaction Notes

  • If you omit min_sliver_area, the workflow uses the default attached to jurisdiction_template.
  • If you supply min_sliver_area, that explicit value overrides the template default.
  • pass_fail and rule counts are based on the pre-fix audit stage, even when auto_fix=true.
  • sliver_calibration_profile is useful for deciding whether your current sliver threshold is too aggressive or too permissive.

QA and Acceptance Criteria

  1. Confirm the parcel layer is polygon or multipolygon geometry in a projected CRS.
  2. Confirm the example arguments match the runtime names exactly.
  3. Verify issues_csv uses the header feature_fid,geometry_type,issue_type,detail.
  4. Verify topology_violations contains the documented fields.
  5. Verify compliance_report includes the documented keys, including pass_fail and sliver_calibration_profile.
  6. If auto-fix is enabled, verify corrected_parcels exists and auto_fix_enabled=true in the JSON report.
  7. If remediation_queue_csv is requested, verify its header is priority,issue_type,rule_or_code,count,recommended_action.

The workflow fails if the parcel layer is unreadable, not polygonal, not projected when CRS metadata is known, missing required output arguments, missing corrected_parcels while auto_fix=true, or uses an unsupported jurisdiction_template.

Advanced Operational Guidance

  • Review issues_csv and topology_violations together. The CSV is better for spreadsheet triage; the point layer is better for map review.
  • Be cautious when increasing min_sliver_area. Small valid parcels can be reclassified as remediation items if the threshold is too high.
  • Use auto-fix only inside a controlled review workflow. It helps with cleanup, but it does not replace parcel governance.
  • If you intend to standardize thresholds across jurisdictions, compare calibration profiles first rather than copying one template blindly.

Implementation Patterns

  • Baseline audit: run without auto-fix to produce the compliance package.
  • Review triage: add remediation_queue_csv to split overlap, gap, and sliver work.
  • Controlled cleanup: enable auto-fix, review autofix_changes_applied, then rerun the workflow if you need a refreshed compliance status.
  • Threshold calibration: compare multiple min_sliver_area settings before locking a program standard.
  • topology_validation_report
  • topology_rule_validate
  • topology_rule_autofix
  • crs_harmonization

When To Use This Workflow

Use this workflow when parcel-fabric maintenance needs a complete QA package rather than a one-off geometry repair. It is especially useful when you need to separate geometry QA, rule-based violations, sliver threshold review, and remediation planning into one repeatable deliverable.

What this workflow helps you do:

  • Measure parcel-fabric compliance in a repeatable way.
  • Prioritize cleanup work by issue type.
  • Document pre-fix condition separately from remediation activity.

Results Delivery Checklist

  1. Deliver issues_csv, topology_violations, and compliance_report together.
  2. State clearly whether generic or ontario_mpac defaults were used.
  3. If auto-fix was enabled, call out that compliance metrics describe the pre-fix state.
  4. Review sliver_calibration_profile before finalizing any policy recommendation around sliver thresholds.
  5. Include remediation_queue_csv when the next step is operational cleanup assignment.

Common Questions

Q: Why can pass_fail still be false even when corrected_parcels was written successfully?
A: Because pass_fail reflects the pre-fix audit result. Auto-fix activity is reported separately through auto_fix_enabled and autofix_changes_applied.

Q: What does share_pct in sliver_calibration_profile mean?
A: It is the share of parcels smaller than each threshold in the calibration table. It helps you choose a threshold; it is not a legal compliance label by itself.

Q: Which setting most strongly affects sliver findings?
A: min_sliver_area. Even small changes can noticeably increase or decrease sliver_count, especially in dense urban fabrics.

Q: How should operations use remediation_queue_csv?
A: Use it to assign overlap, gap, and sliver work by priority. It is a work-planning output, not a substitute for the feature-level details in issues_csv.

LiDAR and Forest Analytics Bundle

Overview

The LiDAR and Forest Analytics bundle provides specialized point cloud and remote sensing tools for forest inventory, biomass quantification, disturbance detection, and landscape change monitoring. Leverages high-resolution LiDAR elevation and intensity data alongside optical imagery.

Key Concepts

Point Cloud Processing

3D data filtering, classification, and metric derivation from airborne LiDAR (ALS) or terrestrial LiDAR (TLS) acquisitions.

Terrain Modeling

Digital Elevation Models (DEMs), Digital Surface Models (DSMs), and Canopy Height Models (CHMs) derived from point cloud data.

Forest Structure Quantification

Inventory metrics including crown height, crown area, aboveground biomass, basal area, and stem density derived from multispectral and LiDAR data.

Change Detection and Disturbance

Multi-temporal analysis quantifying forest disturbance (harvesting, mortality, insect damage, fire) and recovery trajectories.

Accessibility and Safety

Analysis of terrain and vegetation for pedestrian accessibility, UAV navigability, and hazard identification.

Typical Workflows

Forest Inventory Workflow

  1. Acquire LiDAR and hyperspectral imagery
  2. Quality control and evaluate point cloud metrics (LiDAR QA and Confidence)
  3. Generate terrain and canopy products (LiDAR Terrain Product Suite)
  4. Extract structure metrics and estimate biomass (Forestry Structure and Biomass Analysis)
  5. Validate with field plots
  6. Report inventory maps and statistics

Disturbance Monitoring

  1. Establish baseline forest conditions from LiDAR and imagery
  2. Conduct annual/bi-annual re-acquisition
  3. Detect structural change (LiDAR Change and Disturbance Analysis)
  4. Classify disturbance type (harvesting, insects, disease, fire)
  5. Map recovery progression
  6. Generate disturbance trajectory maps and statistics

Urban Vegetation and Accessibility

  1. Acquire high-resolution LiDAR in urban area
  2. Classify point cloud (ground, vegetation, building, urban features)
  3. Assess vegetation clearance for sidewalk accessibility (Sidewalk Vegetation Accessibility Monitoring)
  4. Identify maintenance priorities
  5. Track year-to-year maintenance compliance

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. LiDAR QA and Confidence
  2. LiDAR Terrain Product Suite
  3. LiDAR Change and Disturbance Analysis
  4. Forestry Structure and Biomass Analysis
  5. Sidewalk Vegetation Accessibility Monitoring

Performance and Data Requirements

  • Point Density: Minimum 4–8 pts/m² for forest inventory; ≥15 pts/m² for detailed structure; ≥50 pts/m² for urban vegetation
  • Vertical Accuracy: ±0.15 m (forest), ±0.10 m (urban) necessary for reliable metrics
  • Multi-Spectral Alignment: Optical data must be coregistered to LiDAR with <0.5 m horizontal accuracy
  • Temporal Consistency: Repeat acquisitions should use same acquisition parameters (sensor, time-of-year, weather)

References

  • ASPRS LiDAR Standards and Best Practices
  • NEON Protocol: Airborne Observation Platform (AOP)
  • Wulder, M. A., et al. (2019). "Lidar and SfM Data Fusion for Measuring Forest Change." Remote Sens. Ecol. Conserv. 5(2), 140–156.

LiDAR QA and Confidence

What It Does

LiDAR QA and Confidence runs a full QA pass for LiDAR ground-surface readiness and produces confidence diagnostics, uncertainty products, QA flags, hotspot outputs, and a summary report for acceptance decisions.

Typical Questions This Tool Helps Answer

  • Does this LiDAR delivery meet the density, accuracy, and classification standards required to proceed to DEM or canopy product generation?
  • Which flight lines or spatial areas have inadequate coverage, low point density, or classification inconsistencies that must be resolved before use?
  • Can we accept this dataset and move to downstream processing, or does it need formal remediation or re-delivery from the contractor?

Background

LiDAR QA and confidence assessment is a data-readiness gate that quantifies whether a delivery can support downstream terrain, vegetation, and corridor workflows with defensible uncertainty bounds.

A useful framing is a composite confidence function over diagnostics:

$$C(x)=g\left(\text{density}(x), \text{classification_consistency}(x), \text{surface_residual}(x), \text{artifact_flags}(x)\right)$$

Where lower confidence indicates higher risk that derived products are unstable or acceptance-sensitive.

QA Dimensions

  • Coverage and density adequacy.
  • Classification consistency and plausibility.
  • Surface residual quality relative to expected terrain behavior.
  • Artifact prevalence and hotspot concentration.

These dimensions support pass/review/reprocess gating with auditable rationale.

Methodological Considerations

  • Treat profile mode (strict, balanced, permissive) as governance policy, not cosmetic tuning.
  • Use checkpoint validation when available to ground vertical confidence in external control.
  • Compare hotspot severity and fail fraction together before acceptance decisions.

Practical Interpretation Pitfalls

Typical misreads include using mean confidence without hotspot context, interpreting fast-mode outputs as full QA equivalence, and approving borderline datasets without documenting residual risk.

Source-Verified Contract

Tool id: lidar_qa_and_confidence

Required Input

ParameterRequiredDescription
inputYesInput LiDAR file path.

Optional Settings

ParameterDefaultDescription
qa_modebalancedOne of strict, balanced, permissive, auto (auto runs balanced profile).
block_size1.0Grid cell size in xy units.
max_building_size150.0Maximum expected object width in xy units.
slope_threshold15.0Minimum edge slope in degrees.
elev_threshold0.15Reference-surface threshold in z units.
high_confidence_threshold0.8High-confidence threshold for summary metrics (must be in [0, 1]).
adapt_by_slopetrueEnable slope-adaptive tolerance behavior.
adapt_by_roughnesstrueEnable roughness-adaptive tolerance behavior.
density_window5Local confidence-density window size; odd and >= 3.
roughness_window5Local roughness window size; odd and >= 3.
hotspot_min_cells9Minimum connected hotspot size in cells; must be >= 1.
hotspot_rank_top_nunsetOptional cap on ranked hotspots; if set must be >= 1.
checkpointsunsetOptional checkpoint point layer path for vertical validation.
checkpoint_z_fieldunsetOptional checkpoint elevation field name.
fast_modefalseQuick exploratory mode; skips hotspot extraction/ranking, stratified metrics, and checkpoint validation.
output_prefixlidar_qaPrefix for generated QA artifacts.
outputunsetOptional output path for classified/filtered LiDAR result.

Output Artifacts

Output KeyDescription
classified_lidarClassified/filtered LiDAR output path.
dtmGenerated QA DTM raster.
confidenceConfidence raster.
uncertaintyUncertainty raster.
uncertainty_relRelative uncertainty raster.
qa_flagsQA flags raster.
qa_hotspotsHotspot GeoPackage output.
summarySummary JSON report.
html_reportHTML report path.

Important Fast Mode Note

Even in fast mode, the workflow still emits a qa_hotspots artifact path. The hotspot layer is written as empty rather than omitted.

Example: Standard QA

import whitebox_workflows as wbw

wbe = wbw.WbEnvironment()

wbe.lidar_qa_and_confidence(
    input="site_delivery.laz",
    qa_mode="balanced",
    output_prefix="site_delivery_qa",
    output="site_delivery_classified.laz"
)

Example: Compliance-Oriented QA

wbe.lidar_qa_and_confidence(
    input="contract_block_11.laz",
    qa_mode="strict",
    elev_threshold=0.12,
    high_confidence_threshold=0.85,
    checkpoints="contract_block_11_checkpoints.gpkg",
    checkpoint_z_field="z_control",
    hotspot_rank_top_n=20,
    output_prefix="contract_block_11_qa",
    output="contract_block_11_classified.laz"
)

Example: Fast Intake Triage

wbe.lidar_qa_and_confidence(
    input="incoming.laz",
    qa_mode="auto",
    fast_mode=True,
    output_prefix="incoming_quickqa"
)

When To Use This Workflow

  • You need a single QA workflow before downstream terrain or corridor products.
  • You need repeatable confidence and uncertainty diagnostics for acceptance reviews.
  • You need consistent report artifacts for operations, audit, or vendor feedback.

Results Delivery Checklist

  • Confirm summary JSON (summary) exists and is archived.
  • Confirm confidence/uncertainty/QA-flag rasters are generated.
  • Confirm hotspot artifact exists for every run (including fast mode).
  • Confirm optional checkpoints are only configured when checkpoint data is available.

Common Questions

Does this workflow require checkpoints?

No. checkpoints is optional.

What is the best default mode?

balanced is the default and a good starting point for most production QA.

Can I reduce runtime for exploratory checks?

Yes. Set fast_mode=true.

Does qa_mode=auto pick a unique model?

No. auto currently resolves to balanced behavior.

  • lidar_terrain_product_suite
  • lidar_change_and_disturbance_analysis

LiDAR Terrain Product Suite

Purpose

LiDAR Terrain Product Suite generates a comprehensive set of terrain analysis products from point cloud data: Digital Elevation Models (DEMs), Digital Surface Models (DSMs), Canopy Height Models (CHMs), and derived topographic attributes (slope, aspect, curvature). Enables terrain-based analysis and landform characterization.

Typical Questions This Tool Helps Answer

  • What is the bare-earth terrain surface and which derived topographic attributes (slope, aspect, curvature) are needed for the next analysis step?
  • Which terrain features are visible at this acquisition resolution that would be missed or smoothed out in coarser reference DEMs?
  • Are the DEM and DSM products of sufficient quality and resolution for hydrological conditioning, flow routing, and further terrain analysis?

Background

Terrain product suites transform raw point clouds into hydrologically and geomorphically meaningful surfaces. Typical derivatives include slope, aspect, curvature, roughness, and drainage-support layers derived from a conditioned terrain model.

A foundational relation is local gradient magnitude:

$$|\nabla z| = \sqrt{\left(\frac{\partial z}{\partial x}\right)^2 + \left(\frac{\partial z}{\partial y}\right)^2}$$

From these derivatives, downstream terrain interpretations are scale-dependent and sensitive to smoothing/conditioning choices.

Product-Scale Dependency

Fine-resolution products preserve microtopography but amplify noise; coarser products improve stability but can erase operationally relevant features. End-use should drive scale and filtering strategy.

Hydrologic Conditioning Context

Depression treatment, breach/fill rules, and stream-initiation assumptions can materially alter flow-support derivatives. These are modeling assumptions and should be documented as part of delivery.

Methodological Considerations

  • Validate ground classification before DEM/DTM derivation.
  • Keep derivative parameter settings consistent across adjacent tiles to avoid seam artifacts.
  • Use suitability checks for each derivative relative to target workflow scale.

Practical Interpretation Pitfalls

Frequent mistakes include mixing derivatives generated with incompatible conditioning rules and interpreting artifacts at tile boundaries as real geomorphic signals.

Inputs

ParameterTypeRequiredDescription
inputPathYesLiDAR input (las/laz).
profileEnumNostrict, balanced, permissive (default balanced).
block_sizeFloatNoGrid cell size (default 1.0).
max_building_sizeFloatNoExpected max object width (default 150.0).
slope_thresholdFloatNoOff-terrain slope threshold (default 15.0).
elev_thresholdFloatNoReference-surface threshold (default 0.15).
z_factorFloatNoVertical exaggeration for derivatives (default 1.0).
hillshade_azimuthFloatNoHillshade azimuth (default 315.0).
hillshade_altitudeFloatNoHillshade altitude (default 45.0).
high_confidence_thresholdFloatNoConfidence threshold in [0,1] (default 0.8).
output_prefixStringNoOutput prefix (default terrain_suite).
outputPathNoOptional classified LiDAR output path.

Parameters

Profile presets adjust threshold behavior:

  • strict: tighter acceptance behavior
  • balanced: default behavior
  • permissive: broader acceptance behavior

QA status categories:

  • pass: terrain package ready for normal use
  • review: flagged zones should be checked
  • reprocess: elevated QA issues, rerun advised

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
DTM rasterdtmGeoTIFFTerrain elevation raster.
DSM rasterdsmGeoTIFFSurface elevation raster.
Slope rasterslopeGeoTIFFSlope raster.
Hillshade rasterhillshadeGeoTIFFHillshade raster.
Confidence rasterconfidenceGeoTIFFPer-cell confidence surface.
Uncertainty rasteruncertaintyGeoTIFFPer-cell uncertainty surface.
Metadata contractmetadataJSONQA metrics, status, parameters, and outputs (<output_prefix>_metadata.json).
Summary aliassummaryJSONAlias key to the same metadata contract file as metadata.
Optional reporthtml_reportHTMLOptional formatted report.
Optional classified LiDARclassified_lidarLiDAR pathOptional when output is supplied.

Output filenames:

  • <output_prefix>_dtm.tif
  • <output_prefix>_dsm.tif
  • <output_prefix>_slope.tif
  • <output_prefix>_hillshade.tif
  • <output_prefix>_confidence.tif
  • <output_prefix>_uncertainty.tif
  • <output_prefix>_metadata.json
  • <output_prefix>_report.html

Metadata-contract additions in summary/metadata:

  • output_semantics: machine-readable output intent and certification scope per output key.
  • confidence_contract: confidence metric declaration including threshold and low-confidence fraction.
  • interpretation_warnings: plain-language warnings on proxy limits and profile/threshold comparability.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.lidar_terrain_product_suite(
        input="survey_2026.laz",
        profile="balanced",
        block_size=1.0,
        max_building_size=150.0,
        slope_threshold=15.0,
        elev_threshold=0.15,
        z_factor=1.0,
        hillshade_azimuth=315.0,
        hillshade_altitude=45.0,
        high_confidence_threshold=0.8,
        output_prefix="outputs/terrain_suite",
        output="outputs/terrain_suite_classified.laz"
)
  • What is the bare-earth terrain surface and which derived products - slope and hillshade - are suitable for the next analysis step, and does the QA status indicate the outputs are production-ready?

  • How much did ground-point density and classification quality improve after filtering and interpolation?

  • Are the generated DTM and DSM surfaces clean and reliable enough for hydrologic, engineering, or ecological downstream workflows?

  • Kraus, K., & Pfeifer, N. (1998). "Determination of Terrain Models in Wooded Areas with Airborne Laser Scanning Data." ISPRS J. Photogramm. Remote Sens. 53(4), 193–203.

Parameter Interaction Notes

Output quality is most affected by profile choice, block size, and terrain-filter thresholds.

  • Smaller cells increase detail and sensitivity.
  • More aggressive terrain filtering can suppress non-ground artifacts but may over-smooth edges.
  • Confidence threshold influences high-confidence fraction in summary metrics.

QA and Acceptance Criteria

Use a staged acceptance approach for LiDAR Terrain Product Suite:

  1. Confirm all expected outputs are generated.
  2. Check metadata status (pass/review/reprocess).
  3. Review confidence and uncertainty maps in flagged areas.
  4. Validate slope/hillshade plausibility versus terrain knowledge.
  5. Confirm metadata includes output_semantics, confidence_contract, and interpretation_warnings.

Recommended acceptance checks:

  • Metadata workflow ID is correct.
  • High-confidence fraction is reasonable for data quality.
  • reprocess runs are escalated before delivery.

Advanced Operational Guidance

For production deployment of LiDAR Terrain Product Suite:

  • Standardize profile defaults across teams.
  • Archive metadata JSON for audit and reproducibility.
  • Use strict profile for high-stakes regulatory outputs.

Implementation Patterns

Common implementation patterns with LiDAR Terrain Product Suite:

  • Standard balanced production run.
  • Strict QA run for delivery sign-off.
  • Sensitivity run around block size and thresholds.

Use LiDAR Terrain Product Suite together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

Common Questions

Q: What should teams inspect first?
A: Start with metadata status and confidence/uncertainty summaries, then inspect DTM and slope outputs.

Q: Why did we get review instead of pass?
A: Warning/fail fractions exceeded conservative QA cutoffs but not full reprocess criteria.

Q: What does reprocess imply?
A: QA failure fractions are high enough that rerunning with revised settings or data checks is recommended.

Q: Is CHM generated directly by this workflow?
A: No direct CHM output is emitted by this tool; outputs focus on DTM/DSM/derivatives and QA surfaces.

Q: When should output be provided?
A: Provide it when you need a persisted classified/filtered LiDAR product in addition to raster outputs.

LiDAR Change and Disturbance Analysis

What This Tool Does

LiDAR Change and Disturbance Analysis compares baseline and monitoring LiDAR tile sets to produce per-tile change rasters, QA diagnostics, and optional attribution products.

What You Need

InputRequiredNotes
baseline_tilesYesArray of tile paths or a directory of las/laz/zlidar files.
monitor_tilesYesArray of tile paths or a directory of las/laz/zlidar files.
resolutionNoOutput raster resolution (default 2.0, must be > 0).
min_change_mNoAbsolute change threshold (default 1.0, must be > 0).
reference_perimetersNoOptional vector layer for disturbance attribution hints.
attribution_buffer_metersNoBuffer for attribution matching (default 0.0, must be >= 0).
min_overlap_fractionNoOverlap needed for attribution match (default 0.10, in [0, 1]).
output_prefixNoOutput prefix (default lidar_change).

What You Get

Output KeyDescription
tile_directoryFolder of per-tile delta rasters.
tile_manifestJSON with per-tile metrics and paths.
summaryJSON with warnings, diagnostics, and aggregate metrics.
attributed_change_zonesOptional GeoPackage written when reference_perimeters is provided.
attribution_summaryOptional JSON attribution diagnostics.
html_reportOptional HTML report.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
result = env.lidar_change_and_disturbance_analysis(
        baseline_tiles=["baseline/tile_001.laz", "baseline/tile_002.laz"],
        monitor_tiles=["monitor/tile_001.laz", "monitor/tile_002.laz"],
        reference_perimeters="reference/harvest_blocks.gpkg",
        attribution_buffer_meters=10.0,
        min_overlap_fraction=0.15,
        output_prefix="outputs/lidar_change"
)

Common Questions

Q: Why can a run fail even when tile counts match? A: Pairing is key-based, not count-based. Duplicate or unmatched normalized keys are rejected.

Q: When are attribution files written? A: Only when reference_perimeters is provided.

Q: What does review status mean in summary? A: One or more QA warnings were triggered and should be inspected before operational use.

Forestry Structure and Biomass Analysis

Purpose

Forestry Structure and Biomass Analysis estimates forest structure classes, canopy-height metrics, stand units, confidence, and a terrain-adaptive biomass proxy from LiDAR. Outputs are suitable for carbon accounting, resource management, and inventory planning.

Typical Questions This Tool Helps Answer

  • What are the estimated carbon stocks and dominant canopy-height metrics across this forest inventory area?
  • Which stand units have sufficient LiDAR point density to support high-confidence biomass estimation versus where are results provisional?
  • How does forest structure vary spatially across the landscape and are the patterns consistent with reported stand age and disturbance history?

Background

Forest-structure and biomass inference from LiDAR is based on vertical return distribution, canopy height metrics, and terrain-normalized geometry. A common conceptual relation is:

$$B(x) = f\left(H_{p95}(x), \text{cover}(x), \sigma_z(x), \text{density}(x)\right)$$

Where $B$ is biomass proxy, $H_{p95}$ is high-percentile canopy height, and remaining terms describe cover and structural variability.

Structural Signal Components

  • Height distribution metrics capture stand vertical development.
  • Point-density support drives confidence and output robustness.
  • Terrain-adaptive biomass scaling helps reduce underestimation in heterogeneous stands.

Because LiDAR sampling is discrete, metric reliability depends on point density, occlusion, scan geometry, and normalization quality.

Methodological Considerations

  • Verify ground normalization quality before interpreting canopy-height derivatives.
  • Use density/confidence diagnostics to bound where biomass interpretation is decision-grade.
  • Match metric scale to management question (stand-level planning versus fine-scale habitat mapping).

Practical Interpretation Pitfalls

Frequent errors include treating low-density areas as true low biomass, mixing acquisitions with incompatible pulse geometry, and using a single structural metric as a complete ecological condition signal.

Inputs

ParameterTypeRequiredDescription
inputLiDAR (LAS/LAZ or typed lidar object)YesPrimary LiDAR source.

Parameters

  • profile (optional): fast, balanced, strict; default balanced.
  • resolution (optional): output raster resolution; default 2.0.
  • stand_block_cells (optional): stand aggregation block size; default 12, minimum 2.
  • biomass_cap (optional): max biomass proxy value; default 25.0.
  • terrain_adaptation (optional): off, moderate, strong; default moderate.
  • output_prefix (optional): output naming prefix; default forest_structure.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Canopy height metrics rastercanopy_height_metricsRasterCanopy-height metrics layer.
Vertical structure class rastervertical_structure_classRasterStructure class map (1-4).
Stand structure units vectorstand_structure_unitsVector (GPKG)Stand polygons with summarized structural attributes.
Biomass proxy rasterbiomass_proxyRasterBiomass proxy map for planning analytics.
Confidence rasterconfidenceRasterConfidence map based on LiDAR support quality.
Summary contractsummaryJSONRun contract with metrics, interpretation, and output inventory.
Optional reporthtml_reportHTMLOptional stakeholder-friendly report.

Summary contract also includes:

  • output_semantics
  • confidence_contract
  • interpretation_warnings

Runtime note:

  • This workflow is Pro-only and requires include_pro=True with a valid Pro/Enterprise runtime.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment(include_pro=True, tier="pro")
lidar = wbw.Lidar("survey_classified.laz")
env.forestry_structure_and_biomass_intelligence(
        input=lidar,
        profile="balanced",
        resolution=2.0,
        stand_block_cells=12,
        biomass_cap=25.0,
        terrain_adaptation="moderate",
        output_prefix="outputs/forest_structure"
)
  • What is the biomass proxy and dominant canopy-height metric distribution across this forest inventory area, and which stand units show the strongest structure signal?

  • Which stands show structural complexity consistent with mature habitat conditions versus simplified plantation-like structure?

  • Where do canopy-gap and understory-density indicators suggest priority locations for thinning, regeneration support, or biodiversity interventions?

  • Chave, J., et al. (2014). "Improved Allometric Models to Estimate the Aboveground Biomass of Tropical Trees." J. Ecol. 102(3), 726–736.

Parameter Interaction Notes

Results are sensitive to profile, terrain adaptation, and stand block size.

  • Strict profile tends to classify fewer cells into the tallest structure classes.
  • Strong terrain adaptation can raise biomass proxy in high-relief stands.
  • Larger stand blocks provide smoother but less local detail.

QA and Acceptance Criteria

Use a staged acceptance approach for Forestry Structure and Biomass Analysis:

  1. Confirm LiDAR input quality and expected coverage.
  2. Confirm all outputs are generated with the selected prefix.
  3. Validate stand summaries against known forest compartments.
  4. Review confidence map before operational targeting.

Recommended acceptance checks:

  • Summary workflow id is correct.
  • Class distributions are plausible for forest condition.
  • Stand-unit attributes are populated and usable.

Advanced Operational Guidance

For production deployment of Forestry Structure and Biomass Analysis:

  • Keep profile/settings fixed within annual reporting cycles.
  • Use confidence and complexity outputs to prioritize field validation.
  • Archive summary contracts for program governance and audit trails.

Implementation Patterns

Common implementation patterns with Forestry Structure and Biomass Analysis:

  • Baseline stand intelligence run.
  • Terrain-sensitivity comparison run.
  • Executive reporting run with coarser stand aggregation.

Use Forestry Structure and Biomass Analysis together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Use this workflow when teams need integrated forest structure and biomass-proxy outputs from LiDAR without stitching multiple intermediate tools manually.

Results Delivery Checklist

  1. Include raster outputs, stand vector layer, summary JSON, and report HTML.
  2. Document profile, terrain adaptation, and resolution settings.
  3. Flag low-confidence zones before tactical decisions.
  4. Provide stand-level interpretation notes for non-technical stakeholders.
  5. Archive run metadata for repeatability.

Common Questions

Q: Is biomass proxy equivalent to formal biomass certification?
A: No. It is a planning and prioritization proxy, not a formal certification output by itself.

Q: Why did class maps change after switching from balanced to strict?
A: Profile changes adaptive thresholds and therefore alters class assignment behavior.

Q: Why do some areas have good biomass proxy but lower confidence?
A: Biomass and confidence are separate diagnostics; low point-density support can reduce confidence even with strong biomass proxy signals.

Q: What does stand complexity represent?
A: It is a normalized stand-level indicator derived from mean height, biomass proxy, and height variability.

Q: Why are small stand patches disappearing with larger stand blocks?
A: Larger block aggregation smooths local variability and merges fine-grained patterns.

Q: How should we use the confidence layer operationally?
A: Prioritize high-confidence zones for immediate decisions and route low-confidence zones for validation.

Q: Can we compare outputs from different resolutions?
A: Yes, but comparisons should account for resolution-driven differences in structure detail and aggregation.

Q: What causes many nodata cells in outputs?
A: Gaps in LiDAR support or invalid cells during intermediate gridding steps can propagate nodata.

Q: Which output is best for stand-level planning meetings?
A: stand_structure_units paired with biomass_proxy and confidence usually provides the best decision context.

Q: How often should this be rerun?
A: Typically after major LiDAR updates or when management planning cycles require refreshed stand intelligence.

Sidewalk Vegetation Accessibility Monitoring

What This Tool Does

Sidewalk Vegetation Accessibility Monitoring uses LiDAR point cloud data to assess vegetation clearance along sidewalk corridors. It classifies each sidewalk segment as obstructed, clear, or no_lidar_coverage and delivers a GeoPackage with per-segment metrics, a JSON summary report, and an HTML report.

Typical Questions This Tool Helps Answer

  • Which sidewalk or trail segments have vegetation encroachment that currently violates minimum pedestrian clearance standards?
  • Where is the maintenance backlog most severe, and which corridor segments should be prioritized for this season's vegetation crew?
  • What percentage of total corridor length currently meets versus fails the clearance requirements based on this LiDAR survey?

When To Use

  • Systematic vegetation clearance compliance audits against a minimum clearance height
  • Dispatch prioritization for maintenance crews based on LiDAR-identified obstructions
  • Pre-growing-season and post-storm screening of pedestrian corridor accessibility
  • Monitoring program baselines for year-over-year clearance trend tracking

What You Need

InputDescription
LiDAR tilesLAS/LAZ tile files or a directory path containing tiles.
Sidewalk networkA line or polygon vector layer of the sidewalk network to audit.

Key Settings

SettingDefaultGuidance
clearance_height_m2.5 mMinimum vegetation height considered obstructive. Adjust to match local standards (e.g., 2.4 m for ADA contexts).
buffer_distance_m3.0 mRadius around each segment sampled for vegetation height. Should exceed the sidewalk half-width.
segment_length_m10.0 mSplits long sidewalk lines into segments for fine-grained mapping. Use a large value (e.g., 9999) to keep original features unsegmented.

What You Get

DeliverableFormatDescription
sidewalk_accessibilityGeoPackagePer-segment classification with obstruction metrics.
summaryJSONRun-level statistics and QA assessment.
html_reportHTMLVisual summary of the monitoring run.

The output GeoPackage contains a field STATUS with values obstructed, clear, or no_lidar_coverage for each analysis unit, plus MAX_OBSTR (maximum vegetation height m), MEAN_OBSTR (mean obstruction m), and TILE_HITS (number of tiles covering the unit).

Reading the Summary Report

The JSON summary key items to review:

  • status: "pass" (coverage adequate) or "review" (coverage below 75% threshold)
  • summary.coverage_fraction: proportion of sidewalk units with LiDAR data
  • summary.obstructed_fraction_of_observed: fraction of covered units classified as obstructed
  • summary.no_lidar_coverage_features: count of units without data (coverage gaps)
  • interpretation.qa_assessment: plain-language guidance based on run statistics

Runtime Output Keys

result.outputs["sidewalk_accessibility"]  # path to output GeoPackage
result.outputs["summary"]                 # path to summary JSON
result.outputs["html_report"]             # path to HTML report

Common Questions

Q: What does STATUS=no_lidar_coverage mean? A: No LiDAR tiles with data were found near that segment. These units are not included in obstruction statistics. Confirm tile coverage extent and reprocess after adding missing tiles if applicable.

Q: The obstruction fraction looks higher than expected. What should I check? A: First confirm clearance_height_m matches the local standard — a lower threshold will flag more units. Also check season: summer LiDAR will include full-leaf canopy. Values above 80% in a relatively open area should trigger a spot-check of several obstructed units in the field.

Q: Why does the output have many more features than my input sidewalk layer? A: The tool splits line features into segments of segment_length_m (default 10 m) for fine-grained location of obstructions. Each output segment has a SOURCE_FID field pointing back to the original sidewalk feature.

Q: How do I filter just the obstructed segments for field dispatch? A: In QGIS or ArcGIS, filter the GeoPackage layer by STATUS = 'obstructed'. For severe priority, add a secondary filter on MAX_OBSTR (e.g., MAX_OBSTR > 3.5).

Results Delivery Checklist

  • summary["status"] confirmed as "pass" (or coverage gaps documented)
  • Output GeoPackage reviewed — STATUS field populated for all analysis units
  • obstructed_fraction_of_observed reviewed for plausibility given season and land cover
  • HTML report reviewed and archived with project deliverables
  • clearance_height_m and segment_length_m values recorded in project documentation

Operational Notes

  • This workflow classifies each analysis unit strictly as obstructed, clear, or no_lidar_coverage using LiDAR-derived obstruction heights and local coverage.
  • Priority dispatch should be based on STATUS plus obstruction magnitude (MAX_OBSTR, MEAN_OBSTR), not on corridor length alone.
  • This workflow does not output a separate confidence raster; QA confidence is represented through coverage and summary diagnostics (status, coverage_fraction, and tile-hit statistics).
  • lidar_change_and_disturbance_analysis
  • lidar_terrain_product_suite
  • lidar_qa_and_confidence

References

  • Runtime implementation: wbtools_pro/src/tools/lidar_processing/change_and_accessibility.rs
  • LiDAR and Forest Analytics bundle overview: manual/pro-tools-customer/src/lidar_forest/overview.md

When To Use This Workflow

Use Sidewalk Vegetation Accessibility Monitoring when you need repeatable, segment-level accessibility screening from LiDAR tiles to drive maintenance triage and dispatch planning.

Terrain and Infrastructure Siting Bundle

Overview

The Terrain and Infrastructure Siting bundle provides specialized tools for assessing site suitability, terrain constraints, and constructability for renewable energy infrastructure, utility corridors, and linear transportation networks.

Key Concepts

Suitability Analysis

Multi-criteria evaluation combining terrain, environmental, economic, and social factors to identify optimal locations for specific infrastructure types.

Terrain Constraints

Identification and quantification of physical limitations: slope steepness, soil bearing capacity, hydrologic hazards (flooding, erosion), and geomorphic instability.

Constructability Assessment

Evaluation of development feasibility considering terrain, cost implications, environmental mitigation, and schedule risk.

Infrastructure Routing

Least-cost path and corridor analysis balancing terrain, environmental, and economic objectives.

Typical Workflows

Wind Farm Siting

  1. Acquire wind resource data (speed, direction, turbulence intensity)
  2. Identify high-wind locations (Wind Turbine Siting Analysis)
  3. Assess terrain constructability (Terrain Constructability and Cost Analysis)
  4. Evaluate environmental constraints (viewshed, habitat, noise)
  5. Optimize turbine placement and access roads

Solar Farm Development

  1. Evaluate solar irradiance and shading (Solar Site Suitability Analysis)
  2. Assess topographic slope and aspect suitability
  3. Check soil conditions and foundation requirements
  4. Plan electrical interconnection and transmission routing

Corridor Planning

  1. Define corridor endpoints and width constraints
  2. Evaluate environmental sensitivity (Corridor Mapping and Route Planning)
  3. Assess terrain for constructability (Terrain Constraint and Conflict Analysis)
  4. Identify conflict zones and alternatives
  5. Generate routing options and cost estimates

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. Solar Site Suitability Analysis
  2. Corridor Mapping and Route Planning
  3. Wind Turbine Siting Analysis
  4. Terrain Constraint and Conflict Analysis
  5. Utility Corridor Encroachment Detection
  6. Terrain Constructability and Cost Analysis

Performance Considerations

  • Spatial resolution: 10–30 m resolution sufficient for infrastructure planning; finer for detailed site design
  • Multi-criteria weighting: Weights should reflect stakeholder priorities (renewable energy, environmental protection, cost)
  • Sensitivity analysis: Test weighting variations to ensure robust siting recommendations

References

  • National Renewable Energy Laboratory (NREL) Siting Tools and Guidelines
  • ESRI Site Suitability Analysis Best Practices

Solar Site Suitability Analysis

Purpose

Solar Site Suitability Analysis creates a terrain-based suitability map, visual-impact proxy, and ranked candidate sites for early solar siting.

Typical Questions This Tool Helps Answer

  • Which candidate areas are strongest when balancing terrain suitability and visual impact?
  • How much do transmission lines, substations, and roads change candidate ranking?
  • Are top candidates stable under threshold/profile sensitivity checks?

Background

Solar siting is a screening and prioritization workflow, not a final approval workflow. This chapter is designed to support early-stage shortlist generation by combining terrain-derived suitability with optional infrastructure-aware reranking.

The workflow separates base score and final reranked score so teams can explain why rank changes occurred when infrastructure context is introduced. Final decisions still require permitting, interconnection, land-control, and environmental review.

Methodological Considerations

  • Use a DEM appropriate to your planning scale and keep it consistent across comparisons.
  • Add infrastructure layers when you want practical deployment-aware ranking behavior.
  • Use sweep outputs to test shortlist stability before operational decisions.

Practical Interpretation Pitfalls

Common mistakes include treating top-ranked outputs as final decisions, ignoring sensitivity diagnostics, and comparing runs with different profile/threshold settings without documenting those differences.

Inputs

InputRequiredNotes
demYesInput DEM raster.
candidate_thresholdNoCandidate score threshold (default 0.7).
max_candidate_sitesNoCandidate cap (default 200).
min_candidate_separation_cellsNoMinimum candidate spacing in cells (default 3, set 0 to disable).
transmission_linesNoOptional transmission lines for infrastructure-aware ranking.
substationsNoOptional substations for infrastructure-aware ranking.
road_networkNoOptional roads for access-aware ranking.
infra_weight_profileNobalanced, grid_priority, or access_priority (default balanced).
sweep_specNoOptional JSON sweep specification. When supplied, the tool executes sweep runs and writes run-matrix and sensitivity outputs.
output_prefixNoOutput prefix (default solar_siting).

Outputs

Output KeyDescription
suitability_scoreSuitability raster.
visual_impactVisual-impact proxy raster.
candidate_sitesRanked candidate points.
summaryJSON summary with candidate and infrastructure reranking metrics.
run_matrix_summaryOptional CSV sweep run matrix.
sensitivity_reportOptional JSON sweep sensitivity report with normalized span and stability_class indicators.
sensitivity_report_htmlOptional HTML sweep sensitivity report.
stability_mapOptional GeoTIFF sweep stability classes (3=high, 2=medium, 1=low).
html_reportOptional HTML report.

Candidate-site attributes include RANK, SCORE, VIS_IMPACT, FINAL_SCORE, INFRA_BONUS, GRID_DIST_M, and ACCESS_DIST_M.

When sweep_spec is supplied, summary includes an executed sweep block and companion run-matrix/sensitivity artifacts for scenario traceability, including primary_relative_span and stability_class.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
result = env.solar_site_suitability_analysis(
        dem="dem_30m.tif",
        transmission_lines="grid/transmission_lines.gpkg",
        substations="grid/substations.gpkg",
        road_network="transport/roads.gpkg",
        infra_weight_profile="grid_priority",
        output_prefix="solar_siting"
)

Common Questions

Q: What changes when infrastructure layers are added? A: Candidate ranking is adjusted using infrastructure bonus, and reranking impact is reported in summary metrics.

Q: Which setting usually changes shortlist size the most? A: candidate_threshold, followed by separation and max-site limits.

Q: Are top scores always final decisions? A: No. Use this as screening output and combine with land-control, permitting, and interconnection checks.

Corridor Mapping and Route Planning

Purpose

Corridor Mapping and Route Planning identifies optimal transportation, utility, or recreational corridor routes that balance cost, environmental sensitivity, and stakeholder constraints. Generates multiple routing alternatives and comparative analysis.

Typical Questions This Tool Helps Answer

  • Which route corridor minimizes combined environmental impact, terrain construction cost, and stakeholder conflict under our stated constraint priorities?
  • How do the alternative corridor routes compare against each other when different constraint weights or thresholds are applied?
  • Which corridor segment has the highest conflict concentration and requires the most detailed engineering and permitting review?

Background

Terrain siting workflows convert topographic and contextual constraints into suitability or conflict surfaces. The methodological goal is to compress many physical and operational factors into transparent, reviewable decision layers.

Because suitability is relative to assumptions, the recommended practice is to run sensitivity scenarios and compare candidate zones under alternative thresholds before final siting commitments.

Corridor mapping intelligence consolidates terrain, access, and constraint surfaces into reviewable corridor alternatives. Background interpretation should emphasize trade-off transparency rather than single-score dominance.

Methodological Considerations

  • Treat suitability/conflict scores as relative rankings under stated assumptions.
  • Run threshold sensitivity tests to identify stable candidate zones.
  • Preserve assumptions and parameter profiles in decision records for reproducibility.

Practical Interpretation Pitfalls

Over-interpreting a single scoring run as a final siting decision can conceal constraint trade-offs that emerge under alternate but reasonable parameter settings.

Inputs

ParameterTypeRequiredDescription
demRasterYesDigital elevation model (defines slope cost)
start_featuresVector (point or polygon)YesCorridor start terminals.
end_featuresVector (point or polygon)YesCorridor end terminals.
constraintsVector (polygon)NoOptional exclusion zones.

Parameters

  • cost_profile (optional): slope_only, slope_roughness, conservative.
  • terminal_anchor_strategy (optional): mixed, centroid_only, boundary_only.
  • corridor_tolerance (optional): fraction above optimum cost used to define corridor suitability band.
  • output_prefix (optional): output naming prefix.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Cost surface rastercost_surfaceRasterTraversal impedance surface.
Accumulated cost rasteraccumulated_costRasterCost-to-reach map from start anchor.
Optimal route vectoroptimal_routeVectorBest route polyline and route metrics.
Corridor suitability rastercorridor_suitabilityRasterFeasible corridor area around best route based on tolerance.
Summary contractsummaryJSONFull run contract and interpretation diagnostics.
Optional reporthtml_reportHTMLStakeholder-ready report artifact.

Route metrics in optimal output

  • Route length
  • Mean slope along route
  • Accumulated route cost
  • Cost profile used

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.corridor_mapping_intelligence(
        dem="dem_10m.tif",
        start_features="route_start.gpkg",
        end_features="route_end.gpkg",
        constraints="protected_areas.gpkg",
        cost_profile="slope_roughness",
        terminal_anchor_strategy="mixed",
        corridor_tolerance=0.15,
        output_prefix="outputs/corridor"
)

References

  • Dijkstra, E. W. (1959). "A Note on Two Problems in Connexion with Graphs." Numerische Mathematik 1(1), 269–271.

Parameter Interaction Notes

Planning outcomes are sensitive to profile, terminal strategy, and tolerance settings.

  • Conservative profile tends to avoid rough terrain more aggressively.
  • Anchor strategy can shift route origin/destination cells when polygons are used.
  • Larger tolerance produces wider corridors suitable for alternatives screening.

QA and Acceptance Criteria

Use a staged acceptance approach for Corridor Mapping and Route Planning:

  1. Confirm endpoints and optional constraints are valid and in compatible CRS.
  2. Confirm route output is generated and includes expected metrics.
  3. Confirm corridor suitability aligns with project tolerance intent.
  4. Validate summary interpretation notes for anchor stability and reprojection actions.

Recommended acceptance checks:

  • Route is present and continuous.
  • Cost and suitability outputs are non-empty for feasible scenarios.
  • Summary output paths align with generated artifacts.

Advanced Operational Guidance

For production deployment of Corridor Mapping and Route Planning:

  • Use centroid-only anchors when strict repeatability is required.
  • Keep constraints layer governance-controlled for design review cycles.
  • Archive summary JSON and report for route approval packages.

Implementation Patterns

Common implementation patterns with Corridor Mapping and Route Planning:

  • Baseline corridor feasibility run.
  • Tolerance sweep for corridor-width decision support.
  • Constraint update rerun for permitting iterations.

Use Corridor Mapping and Route Planning together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

Common Questions

Q: Why did the route move after changing anchor strategy?
A: Polygon terminals can provide many candidate anchor points; strategy controls how candidates are chosen.

Q: Why is corridor area much larger than expected?
A: Corridor area scales with corridor_tolerance; lowering tolerance tightens the feasible band.

Q: Why are some areas completely avoided?
A: Constraint polygons are rasterized as impassable cells.

Wind Turbine Siting Analysis

Purpose

Wind Turbine Siting Analysis produces a siting score, confidence map, candidate points, high-confidence zones, and threshold-sensitivity diagnostics.

Typical Questions This Tool Helps Answer

  • Which candidate locations satisfy terrain and settlement-visibility constraints while maintaining strong confidence?
  • How sensitive is the shortlist to threshold changes and selected profile settings?
  • Where are high-score zones that are also confidence-stable for feasibility follow-up?

Background

Wind siting is a constrained screening process where physical suitability and uncertainty must be interpreted together. This workflow explicitly separates siting_score (suitability) and confidence (stability/reliability) so ranking decisions are easier to explain.

The output is designed for early-stage planning and prioritization. Final wind deployment decisions still require grid studies, land access confirmation, permitting, environmental review, and local policy compliance.

Methodological Considerations

  • Ensure DEM and settlement data are in aligned projected coordinates.
  • Keep profile selection (fast, balanced, quality) consistent across alternatives when comparing results.
  • Use threshold and sweep diagnostics to assess shortlist robustness before selecting field targets.

Practical Interpretation Pitfalls

Common mistakes include interpreting high score as high certainty, comparing runs with inconsistent profile/threshold settings, and skipping threshold-sensitivity diagnostics.

Inputs

InputRequiredNotes
demYesInput DEM raster with CRS metadata.
settlementsYesSettlement locations as vector or CSV.
settlements_epsgConditionalRequired for CSV settlements; optional override otherwise.
visibility_radius_metersNoVisibility radius (default 5000, range [1000, 50000]).
min_slope_degreesNoMinimum slope (default 5.0).
max_slope_degreesNoMaximum slope (default 35.0).
candidate_thresholdNoCandidate threshold in [0, 1] (default 0.7).
max_candidate_sitesNoCandidate cap (default 200).
min_candidate_separation_cellsNoCandidate spacing in cells (default 3, set 0 to disable).
transmission_regionNodense_grid, sparse_grid, or remote (default dense_grid).
profileNofast, balanced, or quality (default balanced).
sweep_specNoOptional JSON sweep specification. When supplied, the tool executes sweep runs and writes run-matrix and sensitivity outputs.
output_prefixNoOutput prefix (default wind_siting).

Outputs

Output KeyDescription
siting_scoreCombined siting score raster.
confidenceConfidence raster.
candidate_sitesRanked candidate points.
high_score_confident_zonesPolygon zones passing score and confidence rules.
threshold_sensitivity_summaryJSON threshold-sensitivity diagnostics.
run_matrix_summaryOptional CSV sweep run matrix.
sensitivity_reportOptional JSON sweep sensitivity report with normalized span and stability_class indicators.
sensitivity_report_htmlOptional HTML sweep sensitivity report.
stability_mapOptional GeoTIFF sweep stability classes (3=high, 2=medium, 1=low).
summaryJSON metrics and interpretation guidance.
html_reportOptional HTML report.

When sweep_spec is supplied, summary includes an executed sweep block and companion run-matrix/sensitivity artifacts for scenario traceability, including primary_relative_span and stability_class.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
result = env.wind_turbine_siting(
        dem="dem.tif",
        settlements="settlements.shp",
        transmission_region="dense_grid",
        profile="balanced",
        output_prefix="wind_siting"
)

Common Questions

Q: Why is EPSG required for CSV settlements? A: CSV files do not carry CRS metadata, so EPSG is needed to align with the DEM.

Q: What is the difference between score and confidence? A: Score ranks suitability; confidence indicates how stable that score is across components.

Q: Where do I check threshold robustness? A: Review threshold_sensitivity_summary and the threshold_sensitivity section in summary JSON.

Utility Corridor Encroachment Intelligence

Background: Why Corridor Encroachment Monitoring Matters

Linear utility infrastructure such as transmission powerlines, distribution lines, gas pipelines, telecom corridors, drainage canals, and electrified rail corridors all share a persistent operational problem: the corridor changes continuously between inspections.

Vegetation regrowth can quickly reduce safety clearances along transmission lines, increase wildfire risk, and obstruct access roads. Along pipelines, unmanaged brush and tree growth can hide signs of ground movement, complicate access for integrity crews, and create higher-cost maintenance windows. In mixed utility rights-of-way, multiple assets and ownership boundaries make prioritization even harder.

Traditional patrol methods are valuable but expensive and episodic. They also do not always provide a consistent, quantitative record of where risk is increasing and how fast conditions are changing.

This tool addresses that gap by converting dense LiDAR point clouds into actionable corridor intelligence:

  • It isolates points inside a configurable corridor of interest.
  • It estimates local ground elevation and height-above-ground for each retained point.
  • It classifies points into operational categories (vegetation, infrastructure, ground, unknown).
  • It detects clustered encroachment events and merges them into maintenance intervals.
  • It aggregates risk windows along chainage for dispatch-ready planning.
  • It optionally writes GIS-ready spatial layers for mapping and work assignment.

What This Tool Does

Utility Corridor Encroachment Intelligence is a corridor-first LiDAR workflow for detecting and prioritizing encroachment risk. It produces both summary statistics and optional spatial outputs that can be loaded directly into standard GIS software.

Typical Questions This Tool Helps Answer

  • Which segments of this transmission or pipeline corridor have vegetation encroachment that exceeds the safety clearance thresholds requiring immediate response?
  • Where are clearance violations most severe and concentrated, and what is the ranked field-response priority queue for this patrol cycle?
  • What is the total linear extent of at-risk corridor segments, and how does the risk profile compare to the previous survey cycle?

When To Use

  • Routine corridor inspections and annual or seasonal vegetation assessments
  • Pre-fire-season screening for transmission and distribution corridors
  • Pipeline right-of-way condition audits and access planning
  • Maintenance prioritization and crew dispatch planning
  • Compliance reporting and right-of-way documentation
  • Multi-epoch monitoring to compare encroachment growth over time

Required Inputs

InputFormatDescription
LiDAR tilesLAS/LAZOne or more point-cloud tiles covering the corridor area
Corridor centerlinesGeoPackage/ShapefileLine geometry representing the centerline(s) to monitor
Corridor typeTextType-specific profile controlling encroachment classification

Supported corridor types:

  • pipeline
  • powerline_transmission
  • powerline_distribution
  • telecom_aerial
  • rail_overhead_electrified
  • canal_drainage_infrastructure
  • mixed_utility_row
  • generic_linear_utility

Key Parameters

ParameterDefaultPractical Guidance
corridor_width_m12.0Total corridor width. Increase for wide rights-of-way; reduce for narrow easements.
ground_percentile0.05Ground candidate percentile. Keep near default unless terrain/vegetation structure requires adjustment.
k_neighbors9Neighbors used for local ground modeling. Higher smooths noise; lower increases local sensitivity.
hag_reuse_cell_m2.0HAG reuse grid size. 2.0 is a balanced speed/accuracy default for large jobs.
chainage_window_m25.0Along-corridor window length for risk aggregation and dispatch-scale outputs.

Outputs

OutputDescriptionTypical Use
summary_jsonJSON contract with counts, diagnostics, and timingReporting, dashboards, QA/QC checks
events_output (optional)Point features for encroachment eventsHotspot mapping and spot-treatment planning
intervals_output (optional)Spatial features for merged problem intervalsZone-based maintenance planning
windows_output (optional)Spatial features for risk windows and priority bandsDispatch planning and operational scheduling

How To Read the Results

Event Layer

Represents localized encroachment clusters. Use this layer to identify precise intervention targets and confirm recurring hotspots near structures.

Interval Layer

Represents merged event zones along corridor chainage. Use this layer for budgeting and planning contiguous treatment blocks instead of isolated point actions.

Risk Window Layer

Represents regular chainage windows with class counts, mean/max HAG, risk score, and priority band. Use this for crew allocation and week-by-week work packaging.

Summary JSON

Use the summary for program-level metrics:

  • Total points seen and retained in the corridor ROI
  • Counts by class label
  • Number of events, intervals, and risk windows
  • Culling diagnostics and timing by phase

Common Workflow

  1. Validate overlap between corridor centerlines and LiDAR coverage.
  2. Start with defaults (hag_reuse_cell_m = 2.0, k_neighbors = 9).
  3. Generate all optional spatial outputs for mapping and operational review.
  4. Review event/interval/risk-window densities with corridor managers.
  5. Export selected zones to field operations for verification and treatment.

Troubleshooting Tips

  • No retained ROI points: verify CRS alignment and increase corridor_width_m.
  • Very low event count in dense vegetation: review corridor type selection and ground settings.
  • Runtime too high: keep hag_reuse_cell_m enabled and split very large AOIs into manageable runs.

Operational Notes

The strongest value of this tool is repeatability. Running the same corridor with the same parameters over multiple LiDAR acquisition dates provides a stable basis for trend analysis, vegetation growth tracking, and defensible maintenance prioritization.

Terrain Constraint and Conflict Analysis

What This Tool Does

Terrain Constraint and Conflict Analysis scores terrain conflict severity from slope and optional wetness, flood-risk, and landcover-penalty rasters. It outputs a conflict score raster, a conflict class raster, a summary JSON, and an HTML report.

Typical Questions This Tool Helps Answer

  • Which areas of this study region have terrain and environmental constraints severe enough to effectively preclude cost-effective development?
  • Where do multiple constraint types overlap to create compounded conflict zones that will drive the highest mitigation costs?
  • Which candidate development footprints fall in low-conflict terrain versus areas requiring significant engineering mitigation?

When To Use

  • Early siting review where terrain and environmental constraints need a single comparable score
  • Corridor or project screening before more detailed engineering review
  • Rapid ranking of high-risk terrain areas for mitigation planning

What You Need

InputDescription
DEM rasterThe reference elevation raster.
Optional normalized rastersWetness, flood risk, or landcover penalty layers in the range 0 to 1.

Key Settings

SettingDefaultGuidance
slope_limit_deg15.0Lower values make the tool more aggressive about calling conflict.
Optional rastersnullLeave them empty if a constraint category is not available.

What You Get

DeliverableFormatDescription
conflict_scoreRasterConflict severity score in the range 0 to 1.
conflict_classRasterFour-class conflict map from low to very high.
summaryJSONRun summary, validity counts, and QA status.
html_reportHTMLHuman-readable report.

The summary status becomes review when the high-conflict fraction exceeds 0.40.

Runtime Output Keys

result.outputs["conflict_score"]
result.outputs["conflict_class"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which result should I review first? A: Start with summary.high_conflict_fraction, then inspect where classes 3 and 4 concentrate in conflict_class.

Q: What is a common interpretation mistake? A: Assuming class 2 is always acceptable without checking local slope and wetness conditions.

Q: Which settings most change outcomes? A: slope_limit_deg and optional layers (wetness, flood_risk, landcover_penalty) have the largest influence on high-conflict footprint.

Q: How should planning teams use the outputs? A: Use high-conflict clusters to screen or reroute alignments before committing to final site or corridor decisions.

Results Delivery Checklist

  • summary["status"] was reviewed
  • conflict_class was inspected in GIS software
  • Any high-conflict hotspots were checked before siting or mitigation decisions

Operational Notes

  • Conflict class 3 and 4 cells should be treated as redesign or mitigation triggers in early siting workflows.
  • slope_limit_deg is the highest-leverage parameter; adjust it intentionally and compare high_conflict_fraction across scenarios.
  • Optional layers (wetness, flood_risk, landcover_penalty) are expected to be normalized to [0,1] for stable scoring behavior.
  • terrain_constructability_and_cost_analysis
  • corridor_mapping_intelligence
  • utility_corridor_encroachment_intelligence

References

  • Runtime implementation: wbtools_pro/src/tools/siting/terrain_constraint_and_cost.rs
  • Terrain and Infrastructure Siting bundle overview: manual/pro-tools-customer/src/terrain_siting/overview.md

When To Use This Workflow

Use Terrain Constraint and Conflict Analysis when you need a repeatable conflict surface to screen and compare candidate routes or development footprints before detailed design.

Terrain Constructability and Cost Analysis

What This Tool Does

Terrain Constructability and Cost Analysis converts terrain, conflict, wetness, and access context into constructability and relative cost surfaces. It produces a constructability raster, a cost-class raster, a summary JSON, and an HTML report.

Typical Questions This Tool Helps Answer

  • What is the relative construction cost surface for this project area, and which zones drive the highest grading and site preparation costs?
  • Which portions of the proposed development footprint can be built at acceptable cost with minimal earthwork and site preparation?
  • How does constructability and relative cost compare across the candidate site alternatives under review?

When To Use

  • Preliminary constructability screening
  • Relative cost comparison between development alternatives
  • Early budget framing before detailed engineering estimates

What You Need

InputDescription
DEM rasterThe reference elevation raster.
Optional normalized rastersExisting conflict, wetness, or access-cost layers in the range 0 to 1.

Key Settings

SettingDefaultGuidance
output_prefixterrain_constructabilityOutput file prefix.
Optional rastersnullLeave them empty if a context layer is not available.

What You Get

DeliverableFormatDescription
constructability_scoreRasterRelative constructability score.
cost_classRasterFive-class relative cost map.
summaryJSONRun summary and QA status.
html_reportHTMLHuman-readable report.

The summary status becomes review when the high-cost fraction exceeds 0.45.

Runtime Output Keys

result.outputs["constructability_score"]
result.outputs["cost_class"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which output metric should I review first? A: Start with summary.high_cost_fraction and summary.mean_cost_class, then map class 4 and 5 concentrations in cost_class.

Q: What is a common interpretation mistake? A: Treating class values as absolute currency. Classes are relative constructability cost bands, not direct budget amounts.

Q: Which settings most change outcomes? A: Including or excluding optional inputs (existing_conflict, wetness, access_cost) usually causes the largest shifts in high-cost area.

Q: How should project teams use these outputs? A: Use high-cost zones to adjust alignment and staging alternatives before final budget and sequencing decisions.

Results Delivery Checklist

  • summary["status"] was reviewed
  • cost_class was inspected in GIS software
  • High-cost areas were checked before development planning decisions

Operational Notes

  • cost_class is a relative constructability indicator, not a direct currency estimate.
  • Including existing_conflict, wetness, and access_cost together usually increases high-cost (4 and 5) footprint extent.
  • Review high_cost_fraction with mapped class distribution before budget and sequencing decisions.
  • terrain_constraint_and_conflict_analysis
  • corridor_mapping_intelligence
  • utility_corridor_encroachment_intelligence

References

  • Runtime implementation: wbtools_pro/src/tools/siting/terrain_constraint_and_cost.rs
  • Terrain and Infrastructure Siting bundle overview: manual/pro-tools-customer/src/terrain_siting/overview.md

When To Use This Workflow

Use Terrain Constructability and Cost Analysis when you need comparative constructability/cost surfaces to rank route or site alternatives before detailed engineering estimates.

Earth Observation and SAR Operations Bundle

Overview

The Earth Observation and SAR Operations bundle provides specialized tools for:

  • Remote sensing analysis — Change detection, time series processing, multi-temporal analysis
  • SAR (Synthetic Aperture Radar) processing — Coregistration, interferometry, coherence analysis
  • Multi-sensor fusion — Integrated workflows combining optical, thermal, and radar data
  • UAV and drone workflows — Integration of high-resolution aerial imagery with reference data

Key Concepts

Change Detection

Change detection identifies differences between images acquired at different times or locations. Applications include:

  • Urban growth monitoring
  • Vegetation dynamics
  • Disaster impact assessment
  • Environmental monitoring

SAR Fundamentals

Synthetic Aperture Radar is an active microwave sensor that:

  • Operates day/night and through cloud cover
  • Measures backscatter intensity and phase
  • Enables interferometric and polarimetric analysis
  • Provides consistent geometric reference

Interferometry

Interferometry leverages phase differences between radar acquisitions to measure:

  • Elevation (InSAR-DEM generation)
  • Deformation (subsidence, uplift, landslides)
  • Temporal coherence (surface stability)

Multi-Sensor Integration

Combining optical, thermal, radar, and elevation data enables:

  • Robust change detection
  • Enhanced classification accuracy
  • Redundancy and validation
  • Cross-sensor calibration

Bundle Tools

Nine tools comprise this bundle. Each addresses specific aspects of remote sensing and SAR workflows. See the individual tool documentation for technical details, parameter guidance, and worked examples.

Typical Workflows

Change Monitoring Pipeline

  1. Acquire multi-temporal imagery (optical or SAR)
  2. Coregister images to common reference frame (SAR Coregistration)
  3. Detect changes (Remote Sensing Change Detection or Time Series Change Intelligence)
  4. Validate results using ancillary data (fusion, UAV imagery)
  5. Report change maps and statistics

SAR Data Conditioning

  1. Import raw SAR data
  2. Verify system readiness (SAR Readiness QA)
  3. Coregister to external reference (SAR Coregistration)
  4. Assess coherence (SAR Interferogram and Coherence)
  5. Prepare for advanced analysis (interferometry, polarimetry)

Multi-Sensor Fusion

  1. Prepare individual sensor data streams (optical, SAR, thermal)
  2. Ensure geometric and temporal alignment
  3. Apply fusion algorithms (Multi-Sensor Fusion Monitoring)
  4. Generate integrated analysis products
  5. Validate results against ground truth

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. Remote Sensing Change Detection
  2. Time Series Change Intelligence
  3. UAV Image Intake QA
  4. SAR Coregistration
  5. SAR Readiness QA
  6. SAR Interferogram and Coherence
  7. Multi-Sensor Fusion Monitoring
  8. Surface Reflectance Consistency Analysis
  9. Image Registration Diagnostics

Performance Considerations

  • Raster Size: Large images (10K+ pixels) benefit from tiling and parallel processing
  • Number of Bands/Time Steps: Time series workflows may require substantial memory
  • Coregistration Accuracy: Sub-pixel precision improves downstream analyses
  • Coherence Thresholds: Conservative thresholds reduce false positives but may miss subtle changes

References

  • Rosen, P. A., et al. (2000). "Synthetic Aperture Radar Interferometry." Proceedings of the IEEE 88(3).
  • Tupin, F., Inglada, J., & Rocca, F. (2016). "Remote Sensing Image Analysis: including the Spatial Dimension." Springer.
  • Lillesand, T., Kiefer, R. W., & Chipman, J. (2015). Remote Sensing and Image Interpretation (7th ed.). Wiley.

Remote Sensing Change Detection

Purpose

Remote Sensing Change Detection identifies areas where spectral, thermal, or structural properties have changed between two or more satellite, aerial, or SAR image acquisitions. Applications include urban growth mapping, vegetation dynamics assessment, post-disaster impact analysis, and environmental monitoring.

This tool is designed for:

  • Bi-temporal analysis — Comparing two image acquisitions to isolate change
  • Multi-temporal stacking — Analyzing 3+ images in temporal sequence
  • Multi-sensor comparison — Detecting changes across different sensor modalities (optical, thermal, SAR)
  • Threshold-based and statistical methods — Flexible detection algorithms tuned to application requirements

Typical Questions This Tool Helps Answer

  • Where has significant land surface change occurred between these two acquisition dates, and how large is the affected area?
  • Which change classes — vegetation gain or vegetation loss — dominate the scene, and what is their spatial distribution and relative fraction across the study area?
  • Does the detected change pattern match known event footprints such as fire perimeters, flood extents, harvest units, or construction boundaries?

Background

Change detection leverages the principle that unchanged areas remain spectrally or radiometrically similar between acquisitions, while changed areas show measurable differences. Key methodological approaches include:

Differencing (Absolute Change)

$$\Delta I = I_{t_2} - I_{t_1}$$

Simple subtraction identifies magnitude of change but is sensitive to illumination and atmospheric differences.

Ratio (Relative Change)

$$R = \frac{I_{t_2}}{I_{t_1}}$$

Reduces atmospheric effects and sensor calibration bias; particularly effective for vegetation indices.

Normalized Difference Index (NDI)

For multispectral data with Red and Near-Infrared bands: $$\text{NDI} = \frac{\text{NIR} - \text{Red}}{\text{NIR} + \text{Red}}$$

Then compute change as: $$\Delta \text{NDI} = \text{NDI}{t_2} - \text{NDI}{t_1}$$

Reduces atmospheric and illumination variation while emphasizing vegetation dynamics.

Spectral Angle Mapper (SAM)

For hyperspectral or multispectral data, compute the spectral angle between two pixels: $$\theta = \arccos\left(\frac{\mathbf{s}_1 \cdot \mathbf{s}_2}{|\mathbf{s}_1| |\mathbf{s}_2|}\right)$$

Smaller angles indicate spectral similarity (no change); larger angles indicate spectral difference (change).

Statistical Testing

For time series analysis, hypothesis tests (e.g., t-test, Mann-Whitney) determine if differences are statistically significant or within expected noise.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
baseline_bundleMultiband rasterYesMust be a readable multiband raster with accessible red and NIR bands.Baseline scene bundle.
change_bundleMultiband rasterYesMust be a readable multiband raster with accessible red and NIR bands.Change-date scene bundle.
intermediate_ndviSingle-band rasterNoMust be a readable raster. If provided, it is harmonized to the baseline NDVI grid.Optional intermediate-date NDVI for temporal validation.

Parameters

ArgumentTypeRequiredDefaultDescription
baseline_red_band_indexIntegerNo0Zero-based red-band index in baseline_bundle.
baseline_nir_band_indexIntegerNo1Zero-based NIR-band index in baseline_bundle.
change_red_band_indexIntegerNo0Zero-based red-band index in change_bundle.
change_nir_band_indexIntegerNo1Zero-based NIR-band index in change_bundle.
profileStringNobalancedaggressive, balanced, or conservative.
high_confidence_thresholdFloatNo0.85Threshold used for high-confidence summary counts. Must be in [0, 1].
outputStringNochange_detectionOutput prefix for generated artifacts.

Parameters baseline_red, baseline_nir, change_red, and change_nir are not part of this workflow and are rejected.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Change map (${prefix}_change.tif)change_mapGeoTIFF rasterSigned NDVI change surface.
Confidence map (${prefix}_confidence.tif)confidenceGeoTIFF rasterConfidence score raster in [0, 1].
Class-area table (${prefix}_class_area_table.csv)class_area_tableCSVPer-class area accounting for vegetation_loss, vegetation_gain, and unchanged with fractions over valid pixels.
Summary contract (${prefix}_summary.json)summaryJSONSummary contract including workflow metadata, profile, inputs, parameters, summary statistics, interpretation, outputs, and a timings_ms block.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the summary JSON.

Important summary fields

KeyMeaning
inputs.input_descriptionBundle-mode description including selected band indices.
inputs.intermediate_ndviPath to the optional intermediate NDVI raster, or null.
parameters.min_change_thresholdProfile-specific minimum NDVI change threshold.
parameters.magnitude_scaleProfile-specific magnitude scaling value.
parameters.high_confidence_thresholdThreshold used for summary counts.
parameters.temporal_validation_enabledtrue when intermediate_ndvi was provided.
summary.valid_pixelsNumber of valid analyzed pixels.
summary.pixels_with_changeNumber of changed pixels.
summary.change_fraction_of_imagePercent-string fraction of the image showing change.
summary.vegetation_loss_pixelsCount of loss pixels.
summary.vegetation_gain_pixelsCount of gain pixels.
summary.unchanged_pixelsCount of valid pixels below the profile change threshold.
summary.vegetation_loss_fraction_of_valid_pixelsFraction of valid pixels in the vegetation_loss class.
summary.vegetation_gain_fraction_of_valid_pixelsFraction of valid pixels in the vegetation_gain class.
summary.unchanged_fraction_of_valid_pixelsFraction of valid pixels in the unchanged class.
summary.high_confidence_changePercent-string share of changed pixels above the high-confidence threshold.
summary.high_confidence_change_pixelsCount of high-confidence changed pixels.
summary.mean_confidenceMean confidence over valid pixels.
summary.mean_temporal_consistencyMean temporal consistency over valid pixels.
class_definitionsExplicit class rules for vegetation_loss, vegetation_gain, and unchanged.
class_area_accountingReconciliation block ensuring class totals equal valid pixels.
output_semanticsMachine-readable semantics tags per output key.
confidence_contractStandardized confidence method and low-confidence summary fields.
interpretation_warningsExplicit warning statements about class and confidence interpretation constraints.
interpretationContains dominant_trend, confidence_assessment, and temporal_consistency.
outputsContains change_map, confidence, and class_area_table.
timings_ms.step5g_write_summaryTest-required timing key present in the timing block.

Returned payload keys

The workflow returns these output keys:

  • change_map
  • confidence
  • class_area_table
  • summary
  • html_report

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.remote_sensing_change_detection(
    baseline_bundle="baseline_scene.tif",
    baseline_red_band_index=0,
    baseline_nir_band_index=1,
    change_bundle="change_scene.tif",
    change_red_band_index=0,
    change_nir_band_index=1,
    intermediate_ndvi="intermediate_ndvi.tif",
    profile="balanced",
    high_confidence_threshold=0.85,
    output="forest_change_2026",
)

References

  • Bovolo, F., & Bruzzone, L. (2005). Unsupervised change detection based on change vector analysis. IEEE Transactions on Geoscience and Remote Sensing.
  • Zhu, Z., & Woodcock, C. E. (2014). Continuous change detection and classification using Landsat data. Remote Sensing of Environment.

Parameter Interaction Notes

  • The four band-index parameters are part of the core contract; wrong indices will produce wrong NDVI change even if the workflow runs successfully.
  • profile changes the minimum change threshold and the weighting of magnitude versus temporal consistency, so it materially affects confidence scoring.
  • high_confidence_threshold changes summary counts only; it does not reclassify the confidence raster itself.
  • Adding intermediate_ndvi can substantially change temporal consistency and the narrative in the interpretation block.

QA and Acceptance Criteria

  1. Verify baseline_bundle and change_bundle are treated as required inputs.
  2. Verify the example uses bundle-mode arguments exactly.
  3. Verify the summary JSON contains the documented keys, including interpretation and timings_ms.
  4. Verify the returned payload contains change_map, confidence, summary, and html_report.
  5. Verify timings_ms.step5g_write_summary exists in the summary.
  6. If intermediate_ndvi is supplied, verify parameters.temporal_validation_enabled=true.

The workflow fails if unsupported per-band parameters are used, if required bundles are missing, if rasters cannot be read, if harmonization requires missing CRS EPSG metadata, if a band index is out of range, if profile is invalid, or if high_confidence_threshold falls outside [0, 1].

Advanced Operational Guidance

  • Treat the band indices as part of the deliverable record; they are essential for auditability.
  • Use intermediate_ndvi when seasonality or cloud contamination could make two-date comparison ambiguous.
  • Review the confidence raster together with the change raster before field or regulatory use.
  • Use distinct output prefixes for scenario comparison runs.

Implementation Patterns

  • Two-date screening run: baseline and change bundles only.
  • Three-date validation run: add intermediate_ndvi for stronger temporal support.
  • Profile sensitivity run: compare aggressive, balanced, and conservative.
  • Delivery run: publish change, confidence, summary, and HTML report together.
  • multi_sensor_fusion_monitoring
  • time_series_change_intelligence
  • sar_analysis_readiness

When To Use This Workflow

Use this workflow when you need a repeatable NDVI change package from multiband scene bundles and you want confidence-aware reporting instead of a generic menu of change methods.

What this workflow helps you do:

  • Compare two multiband scenes with explicit red/NIR band control.
  • Add optional temporal validation from an intermediate NDVI surface.
  • Deliver both signed change and confidence outputs with a report-ready summary.

Results Delivery Checklist

  1. Deliver the change raster, confidence raster, summary JSON, and HTML report together.
  2. Record the exact band indices used for both bundles.
  3. State whether intermediate_ndvi was used.
  4. Review the interpretation block before operational or regulatory use.
  5. Confirm timings_ms and summary keys are present before handoff.

Common Questions

Q: Why can confidence stay low even when the signed change looks strong?
A: Because confidence is not based on magnitude alone. It also reflects spectral quality and temporal consistency.

Q: What is the main misinterpretation risk here?
A: Treating this as a generic change-detection engine. The implementation is specifically bundle-based NDVI change detection with explicit red/NIR indexing.

Q: Which setting matters most for scenario sensitivity?
A: profile, because it changes the minimum change threshold and the weighting between magnitude and temporal consistency.

Q: When should operations add intermediate_ndvi?
A: Add it when seasonal effects, clouds, or transient disturbance could otherwise make a two-date comparison ambiguous.

Time-Series Change Analysis

What This Tool Does

Time Series Change Intelligence analyzes a multiband raster time series to detect trends, structural breaks, seasonal behavior, and anomalies. It produces change rasters, a confidence raster, a summary JSON, and an HTML report.

Typical Questions This Tool Helps Answer

  • Is the change observed in this pixel a long-term trend, a seasonal cycle, a sudden structural break, or a short-lived anomaly?
  • Which locations show statistically significant long-term decline or recovery versus high-frequency variability that is likely noise?
  • What is the timing and magnitude of the most significant disturbance event detected in this time series?

When To Use

  • Forest disturbance and recovery monitoring
  • Crop stress and phenology tracking
  • Urban expansion timing checks
  • Wetland or hydrology change screening

What You Need

InputDescription
Time-series raster stackOne band per acquisition, ordered chronologically.
Optional QA stackA matching multiband QA stack where positive values mark valid observations.

Key Settings

SettingDefaultGuidance
algorithm_modefastUse fast for screening, iterative for breakpoint-focused work, or bfast when decomposition stability matters more than speed.
min_observations24Raise if the stack is sparse or noisy.
break_threshold0.08Raise to suppress weak break candidates.
cadence_profileautoLet the tool adapt to dense, sparse, or seasonal sampling patterns.

What You Get

DeliverableFormatDescription
trend_changeRasterTrend or change surface.
breakpoint_countRasterBreakpoint count or dominant breakpoint index.
breakpoint_dateRasterBreakpoint date or date index.
change_confidenceRasterConfidence score in the range 0 to 1.
summaryJSONSummary metrics and QA guidance.
html_reportHTMLHuman-readable report.

Runtime Output Keys

result.outputs["trend_change"]
result.outputs["breakpoint_count"]
result.outputs["breakpoint_date"]
result.outputs["change_confidence"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which result should I review first? A: Start with summary.changed_fraction_valid_pixels and summary.mean_confidence, then inspect trend_change and change_confidence together.

Q: What is a common interpretation mistake? A: Treating breakpoint_count as impact severity. It reflects temporal complexity, not necessarily impact magnitude.

Q: Which settings most affect change detection? A: break_threshold, min_observations, and the selected cadence_profile usually produce the largest change-rate differences.

Q: How should teams use the outputs operationally? A: Prioritize areas with high change fraction and stable confidence, then use breakpoint_date timing to schedule targeted verification windows.

Results Delivery Checklist

  • The input stack is chronological and co-registered
  • The QA stack, if used, is aligned to the input stack
  • summary["changed_fraction_valid_pixels"] and summary["mean_confidence"] were reviewed together
  • Breakpoints were checked against known events or disturbance dates

Operational Notes

  • Evaluate changed_fraction_valid_pixels and mean_confidence together; high change with low confidence should trigger follow-up QA before action.
  • Use breakpoint_date for investigation timing, and treat breakpoint_count as temporal complexity rather than impact severity.
  • For sparse stacks, document the applied cadence profile and adjusted thresholds from summary output before comparing runs.
  • remote_sensing_change_detection
  • multi_sensor_fusion_monitoring
  • sar_analysis_readiness

References

  • Runtime implementation: wbtools_pro/src/tools/remote_sensing/time_series_change_intelligence.rs
  • Earth Observation and SAR Operations bundle overview: manual/pro-tools-customer/src/earth_observation_sar/overview.md

When To Use This Workflow

Use Time Series Change Intelligence when you need repeatable multi-date trend and breakpoint screening with confidence-aware outputs for monitoring and reporting programs.

UAV Image Intake QA

Purpose

UAV Image Intake QA provides a structured process for integrating high-resolution drone (UAV) imagery into Whitebox analysis workflows. Includes georeferencing, radiometric calibration, tie-point generation, and alignment with existing reference data.

Typical Questions This Tool Helps Answer

  • Does this UAV flight have sufficient overlap, exposure stability, and geotag integrity to produce a reliable orthomosaic and surface model?
  • Which images have camera model inconsistencies or geotag errors that will cause bundle-adjustment failures downstream?
  • Is the dataset ready to proceed to photogrammetric processing, or does it require a remediation step or re-flight?

Background

Background sections in this workflow family should make explicit how signal change can be confounded by acquisition geometry, atmosphere, calibration drift, and georegistration error. A reliable interpretation pipeline therefore separates physical signal change from acquisition artifacts through normalization, alignment, and uncertainty-aware thresholds.

Operationally, users should treat these tools as evidence-weighting systems rather than single-threshold detectors. The most robust workflows combine pre-processing diagnostics, method-specific quality indicators, and post-run plausibility checks before decisions are escalated.

UAV intake quality is dominated by overlap geometry, exposure stability, geotag integrity, and camera model consistency. Intake-stage controls reduce downstream bundle-adjustment failure modes and improve reproducibility for orthomosaic and surface products.

Methodological Considerations

  • Ensure geometric alignment is within the tolerance required by the downstream metric (pixel-level for many raster differences, sub-pixel for interferometric phase workflows).
  • Separate radiometric normalization from change inference so threshold choices reflect physical behavior rather than acquisition artifacts.
  • Prefer multi-run sensitivity checks on normalization and detection thresholds when decisions depend on marginal signal differences.

Practical Interpretation Pitfalls

Common failure modes include treating sensor noise as change signal, over-trusting single-date anomalies, and ignoring confidence/context layers when operational prioritization is made.

Inputs

ParameterTypeRequiredDescription
images_dirDirectory pathYesUAV image folder. Supported formats: jpg, jpeg, tif, tiff, png.
profileEnumNofast, balanced, strict (default balanced).
recursiveBooleanNoScan nested folders (default true).
output_prefixStringNoOutput artifact prefix (default uav_intake).
blur_modeEnumNooff, fast, full blur scoring mode.

Parameters

Profile behavior summary:

  • fast: permissive thresholds for rapid triage
  • balanced: standard mission QA
  • strict: conservative acceptance thresholds

Sidecar GPS support:

  • Optional sidecar files can backfill missing EXIF GPS.
  • Delimited and whitespace sidecar formats are supported.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Image inventory fileimage_inventoryCSVPer-image metadata and quality fields.
QA report fileqa_reportJSONStructured QA checks and warning diagnostics.
Summary contractsummaryJSONIntake status and mission summary metrics.
Image centers layerimage_centersGeoJSONPoint locations of GPS-tagged images.
Flight path lines layerflight_path_linesGeoJSONOrdered flight path line from image centers.
Optional reporthtml_reportHTMLOptional mission intake report.

image_inventory schema

image_path,bytes,has_exif,has_gps,gps_source,latitude,longitude,altitude_m,focal_length_mm,blur_score,gimbal_yaw_deg,gimbal_pitch_deg,gimbal_roll_deg,flight_yaw_deg,rtk_fix,timestamp

Intake status values

  • pass: ready for downstream workflows
  • review: usable with QA follow-up
  • fail: major intake issues detected

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.guided_uav_image_intake_workflow(
        images_dir="/data/uav_flight_20240515",
        profile="balanced",
        recursive=True,
        blur_mode="fast",
        output_prefix="outputs/uav_intake"
)

References

  • Lowe, D. G. (2004). "Distinctive Image Features from Scale-Invariant Keypoints." IJCV 60(2), 91–110.

Parameter Interaction Notes

Results are most sensitive to profile thresholds, GPS completeness, and blur/overlap evidence.

  • Stricter profile settings improve quality assurance but can increase review/fail rates.
  • Sidecar GPS can materially improve readiness when EXIF GPS is incomplete.
  • Blur mode selection influences quality coverage and runtime.

QA and Acceptance Criteria

Use a staged acceptance approach for UAV Image Intake QA:

  1. Confirm image discovery and supported file coverage.
  2. Confirm inventory and QA outputs were generated.
  3. Verify summary status aligns with mission QA policy.
  4. Validate warning list before approving downstream processing.

Recommended acceptance checks:

  • Summary workflow ID is correct.
  • Image totals match inventory expectations.
  • GPS and blur coverage metrics are plausible for mission type.

Advanced Operational Guidance

For production deployment of UAV Image Intake QA:

  • Standardize profile selection by mission class and contractor.
  • Keep sidecar metadata packaged with source images.
  • Require strict-profile pass before high-cost processing pipelines.

Implementation Patterns

Common implementation patterns with UAV Image Intake QA:

  • Fast triage run for same-day checks.
  • Standard intake gate run for daily operations.
  • Strict pre-production acceptance run.

Use UAV Image Intake QA together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Use this workflow at mission-ingest time to catch metadata and quality issues before committing resources to full processing.

Results Delivery Checklist

  1. Deliver inventory CSV, summary JSON, and QA report JSON.
  2. Include image center and flight-path GeoJSON outputs.
  3. Include optional HTML report for stakeholder review.
  4. Document chosen profile and blur mode.
  5. Escalate any warning-driven review or fail outcomes.

Common Questions

Q: What is the first file to check after a run?
A: Start with summary JSON status and warnings, then inspect inventory CSV details.

Q: Why do we get review despite high image count?
A: Missing GPS, low overlap, blur quality issues, or orientation gaps can still trigger review.

Q: How can sidecar files help?
A: Sidecars can restore GPS coverage when EXIF GPS is missing, improving overlap and readiness metrics.

Q: Why is overlap basis shown as assumed FOV?
A: That appears when focal length metadata is unavailable and the tool falls back to an assumed field-of-view model.

Q: Why might blur metrics be missing?
A: Blur mode may be off, or certain image files may not decode for blur scoring.

Q: What does GPS outlier warning imply?
A: One or more image positions are isolated from the main cluster and should be inspected for metadata errors.

Q: Does this tool produce orthomosaics?
A: No. It is an intake QA gate that prepares readiness evidence.

Q: How should strict profile be used?
A: Use strict mode for high-stakes campaigns where downstream processing cost is high and quality tolerance is low.

Q: Can we run this recursively across mission subfolders?
A: Yes, set recursive=true.

Q: What does RTK coverage indicate?
A: It reports how many images include RTK fix hints, which helps assess positional reliability.

SAR Coregistration

Purpose

SAR Coregistration aligns a secondary SAR acquisition to a reference SAR geometry with sub-pixel precision for downstream phase-sensitive products.

Primary use cases:

  • InSAR and coherence workflows
  • Multi-temporal SAR change analysis
  • Polarimetric stack harmonization
  • Cross-track quality control before interferometric differencing

Typical Questions This Tool Helps Answer

  • Are the reference and secondary SAR acquisitions sufficiently aligned to produce reliable interferometric phase measurements?
  • What is the residual misregistration across the scene, and where does it exceed acceptable limits for the intended product?
  • Which areas have poor coregistration quality that will contaminate coherence estimates or phase-unwrapping results?

When To Use This Workflow

Use SAR Coregistration when:

  • You have two or more SAR acquisitions that need geometric alignment before phase-sensitive analysis
  • Downstream workflows (coherence, interferogram, change detection) require sub-pixel alignment
  • You want machine-readable pass/fail QA gates embedded in deliverables for governance or audit purposes

Do not use SAR Coregistration as a substitute for orthorectification or radiometric calibration — those steps should precede coregistration.

Background

SAR coregistration aligns secondary imagery to a reference geometry so phase and amplitude comparisons are physically meaningful. The core objective is to estimate transform $\mathcal{T}$ such that:

$$I_s'(x,y)=I_s(\mathcal{T}(x,y))\approx I_r(x,y)$$

Where $I_r$ is reference (master) and $I_s$ is secondary (slave).

Why Sub-Pixel Accuracy Matters

Interferometric quality can degrade rapidly with registration error. A practical approximation is that coherence decreases as residual misregistration variance rises, so sub-pixel residual control is required for reliable downstream interferometric and coherence products.

Estimation Approaches

Frequency-domain phase correlation estimates global translation from normalized cross-power:

$$R(u,v)=\frac{F_r(u,v)F_s^(u,v)}{|F_r(u,v)F_s^(u,v)|}$$

The inverse FFT peak gives coarse offset $(\Delta x,\Delta y)$.

Spatial-domain normalized cross-correlation refines local alignment:

$$\rho=\frac{\sum(A-\bar A)(B-\bar B)}{\sqrt{\sum(A-\bar A)^2\sum(B-\bar B)^2}}$$

High-$\rho$ tie windows support local correction and residual diagnostics.

Transform and Residual Models

  • Translation-only for near-rigid alignment cases.
  • Affine for rotation/scale/shear effects.
  • Higher-order or piecewise models where residual distortion is spatially non-linear.

Methodological Considerations

  • Use a coarse-to-fine strategy: global offset first, then local residual correction.
  • Track residual displacement statistics across the scene, not just mean shift.
  • Reject low-information windows to avoid propagating unstable tie estimates.

Practical Interpretation Pitfalls

Typical failures include accepting visually plausible alignment without residual statistics, mixing low-coherence windows into tie solutions, and assuming one transform family is valid for all terrain/scene conditions.

Inputs

ArgumentTypeRequiredDescription
reference_sarString pathConditionalReference SAR raster (direct raster mode). Required unless reference_sar_bundle is provided.
reference_sar_bundleString pathConditionalReference SAR sensor bundle root or archive (.zip/.tar/.tar.gz/.tgz). Required unless reference_sar is provided.
reference_measurement_keyStringNoMeasurement key within reference bundle when bundle contains multiple SAR assets.
moving_sarString pathConditionalMoving SAR raster (direct raster mode). Required unless moving_sar_bundle is provided.
moving_sar_bundleString pathConditionalMoving SAR sensor bundle root or archive. Required unless moving_sar is provided.
moving_measurement_keyStringNoMeasurement key within moving bundle.
input_demString pathNoOptional DEM raster for geometry initialization in mountainous terrain.

Parameters

ArgumentTypeDefaultDescription
coreg_modeStringtranslationCoregistration model: translation (production), affine (experimental), local_offset_grid (experimental).
max_offset_pxInteger24Maximum pixel search radius in x and y.
decimationInteger4Sampling stride during search (larger = faster, coarser).
min_overlap_fractionFloat0.20Minimum valid overlap fraction required to accept a candidate shift.
dem_z_factorFloat1.0Vertical exaggeration for DEM slope derivation.
resample_methodStringbilinearResampling method: bilinear or nearest.
output_prefixStringsar_coregFile name prefix for all output artifacts.
phase_a_residual_mae_threshold_pxFloat2.0Phase-A gate: max allowed residual MAE (px).
phase_a_dem_informative_fraction_minFloat0.01Phase-A gate: min DEM informative fraction (when DEM provided).
phase_a_continuity_jump_threshold_pxFloat0.75Phase-A gate: max burst-boundary offset jump (px).
phase_a_continuity_residual_jump_thresholdFloat0.08Phase-A gate: max adjacent-burst residual MAE jump.

Outputs

OutputTypeDescription
moving_alignedRasterMoving raster aligned to reference geometry.
offset_xRaster (Float32)Per-pixel estimated X-offset in pixels.
offset_yRaster (Float32)Per-pixel estimated Y-offset in pixels.
transformJSONEstimated transform, Phase-A QA gates, and per-burst diagnostics.
summaryJSONRun summary with parameters and Phase-A gate results.
html_reportHTMLHuman-readable coregistration report.

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
moving_alignedAligned moving raster file
offset_xX-offset raster file
offset_yY-offset raster file
transformTransform JSON artifact
summarySummary JSON artifact
html_reportHTML report

Transform JSON Schema (transform)

  • workflow: "sar_coregistration"
  • coreg_mode: mode used
  • dx_px: estimated global x-offset (translation mode)
  • dy_px: estimated global y-offset (translation mode)
  • qa.phase_a_acceptance_gates:
    • residual_mae_px, residual_mae_threshold_px, residual_mae_pass
    • burst_continuity_pass
    • dem_informative_fraction (null when no DEM provided)
    • dem_informative_fraction_threshold, dem_informative_fraction_pass
    • overall_pass

Summary JSON Schema (summary)

  • schema_version: "1.0.0"
  • summary.phase_a_acceptance_gates: same schema as transform.qa.phase_a_acceptance_gates
  • parameters: echo of Phase-A threshold parameters used

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.working_directory = "/data/sar_project"

result = env.earth_observation_sar.sar_coregistration(
    reference_sar="s1_20260401_vv.tif",
    moving_sar="s1_20260413_vv.tif",
    coreg_mode="translation",
    max_offset_px=24,
    decimation=4,
  resample_method="bilinear",
  output_prefix="outputs/s1_20260413_coreg"
)

import json
summary = json.loads(open(result.outputs["summary"]).read())
print(summary["summary"]["phase_a_acceptance_gates"]["overall_pass"])

Bundle Mode (Sentinel-1 SAFE)

result = env.earth_observation_sar.sar_coregistration(
    reference_sar_bundle="s1_20260401.SAFE",
    reference_measurement_key="vv",
    moving_sar_bundle="s1_20260413.SAFE",
    moving_measurement_key="vv",
  output_prefix="outputs/s1_20260413_coreg"
)

References

  • Bamler, R., & Hartl, P. (1998). Synthetic aperture radar interferometry. Inverse Problems, 14(4), R1–R54.
  • Eineder, M., et al. (2011). Imaging geodesy — toward centimeter-level ranging accuracy with TerraSAR-X. IEEE TGRS, 49(2), 661–671.
  • Zitova, B., & Flusser, J. (2003). Image registration methods: a survey. Image and Vision Computing, 21(11), 977–1000.

Parameter Interaction Notes

  • max_offset_px and decimation interact: high decimation with small max offset can silently miss the true peak. Reduce decimation before increasing max_offset_px.
  • coreg_mode=affine and local_offset_grid are experimental and can produce unstable results on speckle-dominated inputs; use translation for production.
  • Phase-A gate thresholds evaluate residuals post-warp regardless of mode; phase_a_residual_mae_threshold_px=0.5 is appropriate for InSAR-quality assurance.
  • resample_method=nearest degrades sub-pixel alignment quality; use bilinear for all phase-sensitive products.

QA and Acceptance Criteria

  1. Input compatibility: use sar_analysis_readiness to confirm the pair is compatible before coregistration.
  2. Phase-A gate: summary["summary"]["phase_a_acceptance_gates"]["overall_pass"] must be true before using outputs in coherence or interferogram workflows.
  3. Residual MAE: < 0.3 px for deformation campaigns; < 1.0 px for change detection.
  4. Burst continuity: burst_continuity_pass: false requires investigation — often resolved by providing input_dem for mountainous terrain.
  5. Visual check: flicker reference vs aligned moving raster; stable edges must show no lateral shift.

Advanced Operational Guidance

  • Archive transform.json per pair as the canonical alignment record for audit trails.
  • Do not proceed to sar_interferogram_coherence without verifying overall_pass=true.
  • If DEM informative fraction gate fails, check whether the DEM covers the SAR scene; remove input_dem if overlap is insufficient.
  • For large multi-date stacks, use a single fixed reference scene and apply coregistration independently per date.

Implementation Patterns

  • Sentinel-1 InSAR preparation: sar_analysis_readinesssar_coregistrationsar_interferogram_coherence
  • Multi-temporal change stack: run coregistration per date against a fixed reference; archive transform JSON per pair
  • DEM-assisted complex terrain: supply input_dem and set decimation=2
  • Rapid QA screening: decimation=8, max_offset_px=16 before full production run
  • sar_analysis_readiness — validate scene compatibility before coregistration
  • sar_interferogram_coherence — consumes moving_aligned output
  • registration_oriented_feature_workflow — complementary alignment QC for optical/SAR pairs

Results Delivery Checklist

  • moving_aligned delivered and spot-checked visually
  • transform.json archived as alignment record
  • Phase-A overall_pass=true confirmed before downstream use
  • HTML report reviewed and attached to project record
  • Input pair compatibility confirmed via sar_analysis_readiness

Common Questions

Q: What does overall_pass: false mean for my project? A: One or more Phase-A gates failed — residual MAE exceeded threshold, burst continuity was poor, or DEM coverage was insufficient. Inspect residual_mae_px and burst_continuity_pass to determine corrective action. Do not use the moving_aligned raster for coherence or interferogram products until the issue is resolved.

Q: The offset rasters are non-zero everywhere — did the coregistration fail? A: No. Small non-zero offsets are normal and expected even for well-aligned pairs — they reflect local speckle, topographic effects, and interpolation residuals. Evaluate alignment quality by residual_mae_px in the summary JSON and by visual flickering, not by expecting zero-valued offset rasters.

Q: Should I supply a DEM for every run? A: Only when the scene contains significant topographic relief. For flat or low-relief terrain, omitting input_dem has no penalty. For mountainous or hilly terrain, supplying a DEM improves initialization and typically reduces residual MAE.

Q: How do I know the coregistration is accurate enough for my coherence product? A: Check residual_mae_px in the summary JSON. For deformation/InSAR, target < 0.3 px. The default Phase-A gate of 2.0 px is a minimum production floor; tighten phase_a_residual_mae_threshold_px to 0.5 px for InSAR-quality assurance.

SAR Readiness QA

What This Tool Does

SAR Readiness QA prepares SAR for downstream analysis by producing calibrated backscatter, RTC support, optional coherence proxy, and readiness diagnostics.

What You Need

InputRequiredNotes
input_sar or input_sar_bundleYes (exactly one)Primary SAR source in raster mode or bundle mode.
input_demYesDEM used for RTC support.
pair_sar or pair_sar_bundleNoOptional pair scene for coherence-proxy estimation (at most one).
input_measurement_key / pair_measurement_keyNoOptional selectors for bundle mode.

Optional controls include look-angle checks, auto-coregistration settings, speckle_window, z_factor, and output_prefix.

What You Get

Output KeyDescription
sar_backscatter_calibratedCalibrated primary SAR raster.
speckle_filteredSpeckle-filtered raster.
rtc_factorRTC factor raster.
coherence_proxyOptional pair-based coherence proxy raster.
readiness_rule_traceJSON readiness rule evaluation trace.
readiness_blockersCSV blocker list for triage/reporting.
summaryJSON summary with warnings, timings, readiness score, and outputs.
html_reportOptional HTML report.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
result = env.sar_analysis_readiness(
        input_sar_bundle="sentinel1_scene.SAFE",
        input_measurement_key="vv",
        input_dem="dem_30m.tif",
        pair_sar_bundle="sentinel1_scene_pair.SAFE",
        pair_measurement_key="vv",
        auto_coregister_pair=True,
        coreg_max_offset_px=24,
        coreg_decimation=4,
        coreg_min_overlap_fraction=0.20,
        output_prefix="sar_ready"
)

Common Questions

Q: Why is coherence_proxy sometimes missing? A: It is only written when a pair scene is supplied.

Q: What should I review first for go/no-go? A: Check summary.warnings, summary.readiness_score, and the readiness_blockers CSV.

Q: Why are there auto-coregistration warnings? A: They indicate pair-scene harmonization was required before coherence-proxy estimation.

SAR Interferogram and Coherence

Purpose

SAR Interferogram and Coherence computes spatial and temporal coherence from SAR image pairs, quantifying phase stability for interferometric analysis. High coherence indicates reliable phase information; low coherence suggests volume scattering or temporal decorrelation.

Typical Questions This Tool Helps Answer

  • Which areas of the scene have stable coherence suitable for surface displacement mapping or subsidence monitoring?
  • Where is temporal or volumetric decorrelation too severe to produce reliable interferometric phase, and should those zones be masked?
  • Are the coherence values consistent with the expected land-cover behavior — strong in urban areas, lower in vegetated and agricultural zones?

When To Use This Workflow

Use SAR Interferogram and Coherence when:

  • You have a registered (or registerable) SAR pair and need coherence and/or interferogram products
  • You need embedded acceptance gates in your deliverable for governance or QA purposes
  • You want a compact inline pipeline that handles coregistration and coherence in a single step

For best results, run sar_analysis_readiness on the pair before this tool to confirm scene compatibility.

Background

Coherence quantifies phase stability between two SAR acquisitions:

$$\gamma = \frac{\left|E[s_1 s_2^*]\right|}{\sqrt{E[|s_1|^2]E[|s_2|^2]}}$$

With $\gamma\in[0,1]$, high values indicate stable scattering and reliable interferometric support, while low values suggest decorrelation or poor registration/support.

Physical Decorrelation Components

Observed coherence is often interpreted as the product of multiple effects:

$$\gamma_{obs} \approx \gamma_{geom},\gamma_{temp},\gamma_{vol},\gamma_{snr},\gamma_{proc}$$

Where geometric baseline, temporal change, volumetric scattering, SNR, and processing quality each contribute to coherence loss.

Estimation Trade-Offs

Coherence is estimated over finite windows (or multilook neighborhoods). Larger windows reduce variance but blur fine features; smaller windows preserve detail but increase estimator noise. Production choices should match the scale of the decision task.

Methodological Considerations

  • Enforce strong coregistration before coherence estimation to avoid artificial decorrelation.
  • Use consistent windowing/multilook settings when comparing scenarios or dates.
  • Interpret coherence jointly with land-cover and geometry context; low coherence is not a single-cause diagnosis.

Practical Interpretation Pitfalls

Common errors include using fixed coherence thresholds across heterogeneous terrain, confusing low SNR effects with true temporal change, and over-interpreting isolated high-coherence patches without neighborhood continuity.

Inputs

ArgumentTypeRequiredDescription
reference_sarString pathConditionalReference SAR raster (direct mode).
moving_sarString pathConditionalMoving SAR raster (direct mode).
reference_sar_realString pathConditionalReference real component (complex mode).
reference_sar_imagString pathConditionalReference imaginary component (complex mode).
moving_sar_realString pathConditionalMoving real component (complex mode).
moving_sar_imagString pathConditionalMoving imaginary component (complex mode).
reference_sar_bundleString pathConditionalReference SAR bundle root or archive (bundle mode).
moving_sar_bundleString pathConditionalMoving SAR bundle root or archive (bundle mode).
reference_measurement_keyStringNoMeasurement key within reference bundle.
moving_measurement_keyStringNoMeasurement key within moving bundle.
input_demString pathNoOptional DEM for terrain-context masking.

Parameters

ArgumentTypeDefaultDescription
auto_coregister_pairBoolfalseRun built-in coregistration before coherence.
assume_prealigned_pairBoolfalseAssert pair is on matching grids; skip coregistration.
coreg_modeStringtranslationCoregistration mode for handoff: translation, affine, local_offset_grid.
coreg_max_offset_pxInteger24Max offset searched during auto-coregistration.
coreg_decimationInteger4Sampling stride during auto-coregistration.
coreg_min_overlap_fractionFloat0.20Minimum valid overlap fraction during auto-coregistration.
coherence_windowInteger7Odd-valued estimation window (px).
coherence_decimationInteger1Coherence sampling stride; > 1 uses coarser grid.
performance_profileStringbalancedbalanced or fast.
acceptance_min_valid_fractionFloat0.25Acceptance gate: min valid-sample fraction.
acceptance_min_mean_coherenceFloat0.20Acceptance gate: min mean coherence.
acceptance_max_coreg_residual_mae_pxFloat2.0Acceptance gate: max coreg residual MAE (px).
write_interferogramBooltrueWrite interferogram raster.
write_coherenceBooltrueWrite coherence raster.
write_valid_maskBooltrueWrite valid-sample mask.
write_html_reportBooltrueWrite HTML report.
output_layoutStringstandardGeoTIFF layout: standard or cog.
output_compressionStringnoneGeoTIFF compression: none or deflate.
output_tile_sizeInteger512Tile size for COG layout.
output_prefixStringsar_interferogram_coherenceFile name prefix for output artifacts.

Outputs

OutputTypeDescription
interferogramRasterPhase difference raster.
coherenceRaster (Float32)Per-pixel coherence (0–1).
valid_maskRaster (UInt8)Binary valid-sample mask.
summaryJSONRun metadata, acceptance gates, spatial statistics.
html_reportHTMLHuman-readable coherence report.

Runtime output keys (returned in ToolRunResult.outputs):

KeyPoints to
interferogramInterferogram raster (only present when write_interferogram=true)
coherenceCoherence raster (only present when write_coherence=true)
valid_maskValid-sample mask raster (only present when write_valid_mask=true)
summarySummary JSON artifact
html_reportHTML report (only present when write_html_report=true)

Summary JSON Schema (summary)

Top-level keys:

  • workflow: "sar_interferogram_coherence"
  • schema_version: "1.0.0"
  • acceptance_gates:
    • valid_fraction, valid_fraction_threshold, valid_fraction_pass
    • mean_coherence, mean_coherence_threshold, mean_coherence_pass
    • coreg_residual_gate_applicable, coreg_residual_mae_px, coreg_residual_mae_threshold_px, coreg_residual_mae_pass
    • overall_pass (bool)
  • summary: rows, cols, valid_fraction, mean_coherence
  • coregistration: performed, residual_mae_px, search_best_score
  • parameters: echo of all runtime parameter values

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.working_directory = "/data/sar_project"

# Pre-aligned pair
result = env.earth_observation_sar.sar_interferogram_coherence(
    reference_sar="s1_20260401_vv.tif",
    moving_sar="outputs/s1_aligned.tif",
    assume_prealigned_pair=True,
    coherence_window=7,
  output_prefix="outputs/coherence_run"
)

import json
s = json.loads(open(result.outputs["summary"]).read())
print(s["acceptance_gates"]["overall_pass"])
print(s["summary"]["mean_coherence"])

Inline Coregistration Example

result = env.earth_observation_sar.sar_interferogram_coherence(
    reference_sar="s1_20260401_vv.tif",
    moving_sar="s1_20260413_vv.tif",
    auto_coregister_pair=True,
    coherence_window=9,
  output_prefix="outputs/coherence_run"
)

References

  • Rosen, P. A., et al. (2000). Synthetic aperture radar interferometry. Proc. IEEE, 88(3), 333–382.
  • Bamler, R., & Hartl, P. (1998). Synthetic aperture radar interferometry. Inverse Problems, 14(4), R1–R54.
  • Touzi, R., et al. (1999). Coherence estimation for SAR imagery. IEEE TGRS, 37(1), 135–149.

Parameter Interaction Notes

  • auto_coregister_pair=true and assume_prealigned_pair=true are mutually exclusive — setting both is an error.
  • coherence_window and coherence_decimation: large window + decimation > 1 saves runtime at the cost of local spatial detail.
  • acceptance_min_mean_coherence should be adjusted for land cover context: vegetated or water-heavy scenes will naturally report lower values.
  • write_interferogram=false suppresses the interferogram output — use when only coherence is needed.

QA and Acceptance Criteria

  1. Input readiness: use sar_analysis_readiness to confirm scene compatibility first.
  2. Acceptance gate: summary["acceptance_gates"]["overall_pass"] must be true before delivering coherence products.
  3. Mean coherence plausibility: values < 0.2 are expected over vegetation/water; > 0.7 expected over stable urban surfaces.
  4. Valid fraction: if valid_fraction < 0.25, check terrain masking extent and DEM/scene overlap.
  5. Visual review: coherence map should show spatial gradients aligned with land cover; uniform blobs indicate artifacts.

Advanced Operational Guidance

  • For deformation monitoring, use complex component mode for true interferometric phase.
  • Archive summary.json per pair as the canonical processing record.
  • Fix coherence_window and output_compression across all pairs in a multi-date stack to ensure comparability.

Implementation Patterns

  • InSAR prep: sar_analysis_readinesssar_coregistrationsar_interferogram_coherence (with assume_prealigned_pair=true)
  • Inline pipeline: sar_interferogram_coherence with auto_coregister_pair=true
  • Coherence-only: write_interferogram=false to skip interferogram output
  • COG delivery: output_layout=cog, output_compression=deflate
  • sar_coregistration — dedicated coregistration step for full per-burst QA record
  • sar_analysis_readiness — scene pair compatibility validation
  • time_series_change_intelligence — multi-date coherence-stack change analysis

Results Delivery Checklist

  • acceptance_gates.overall_pass=true confirmed
  • coherence raster delivered and visually inspected
  • summary.json archived per pair as processing record
  • valid_fraction reviewed to confirm masking is not excessive
  • HTML report reviewed and attached to project record

Common Questions

Q: What does overall_pass: false mean for my deliverable? A: One or more acceptance gates failed. Check valid_fraction_pass (excessive masking?), mean_coherence_pass (expected for vegetation/water?), and coreg_residual_mae_pass (alignment quality). Each has its own threshold value in the summary for diagnosis.

Q: Mean coherence is 0.12 — is the processing wrong? A: Not necessarily. Values below 0.2 are normal over dense vegetation, agricultural land, or scenes spanning seasonal change. Check valid_fraction to confirm enough valid samples are present, then consider whether low coherence is physically meaningful given the land cover.

Q: Should I run sar_coregistration first, or use auto_coregister_pair=true? A: Use the standalone sar_coregistration tool when you need the per-burst diagnostic transform JSON as a separate QA record. Use auto_coregister_pair=true for a compact pipeline when only the coherence product and summary JSON are needed.

Q: What does coherence_window=7 mean for my spatial resolution? A: Coherence is estimated over a 7×7 pixel neighborhood. Larger windows produce smoother maps at the cost of spatial detail. For Sentinel-1 IW (10 m pixels), the effective resolution of the coherence estimate is ~70 m.

Multi-Sensor Fusion Monitoring

Purpose

Multi-Sensor Fusion Monitoring integrates optical, thermal, and SAR data into unified analysis products, leveraging complementary sensor strengths: optical for reflectance, thermal for energy flux, SAR for structure/phase. Applications include change detection robustness, land cover accuracy, and multi-dimensional risk assessment.

Typical Questions This Tool Helps Answer

  • Where does optical change detection fail due to cloud cover or shadow, and can SAR or thermal fill those monitoring gaps?
  • Which areas show consistent change signal across all three sensor modalities, and which signals are sensor-specific artifacts?
  • How much does fusing optical, thermal, and SAR improve land-cover classification accuracy compared to any single sensor source?

Background

Background sections in this workflow family should make explicit how signal change can be confounded by acquisition geometry, atmosphere, calibration drift, and georegistration error. A reliable interpretation pipeline therefore separates physical signal change from acquisition artifacts through normalization, alignment, and uncertainty-aware thresholds.

Operationally, users should treat these tools as evidence-weighting systems rather than single-threshold detectors. The most robust workflows combine pre-processing diagnostics, method-specific quality indicators, and post-run plausibility checks before decisions are escalated.

Multi-sensor fusion combines complementary observables (for example optical texture, thermal state, and SAR backscatter/coherence) to reduce blind spots of any single modality. Fusion quality depends on cross-sensor alignment and calibration-aware weighting.

Methodological Considerations

  • Ensure geometric alignment is within the tolerance required by the downstream metric (pixel-level for many raster differences, sub-pixel for interferometric phase workflows).
  • Separate radiometric normalization from change inference so threshold choices reflect physical behavior rather than acquisition artifacts.
  • Prefer multi-run sensitivity checks on normalization and detection thresholds when decisions depend on marginal signal differences.

Practical Interpretation Pitfalls

Common failure modes include treating sensor noise as change signal, over-trusting single-date anomalies, and ignoring confidence/context layers when operational prioritization is made.

Inputs

ParameterTypeRequiredDescription
baseline_bundleMultiband rasterYesBaseline optical bundle.
change_bundleMultiband rasterYesChange-date optical bundle.
input_sarRasterYesPrimary SAR raster.
input_demRasterYesDEM for terrain context.
pair_sarRasterNoOptional second SAR for coherence-aware fusion.
thermal_bundleRasterNoOptional thermal raster for three-modality fusion diagnostics.
thermal_band_indexIntegerNo0-based thermal band index in thermal_bundle (default 0).
baseline_red_band_indexIntegerNoBaseline red band index (default 0).
baseline_nir_band_indexIntegerNoBaseline NIR band index (default 1).
change_red_band_indexIntegerNoChange red band index (default 0).
change_nir_band_indexIntegerNoChange NIR band index (default 1).
profileEnumNofast, balanced, conservative (default balanced).
harmonization_modeEnumNooff, robust, conservative (default robust).
high_confidence_thresholdFloatNoHigh-confidence zone threshold (default 0.8).
max_zone_featuresIntegerNoZone feature cap (default 25000).
vector_output_formatEnumNogpkg, geojson, shp (default gpkg).
output_prefixStringYesOutput prefix for all emitted artifacts.

Parameters

Operational parameter notes:

  • harmonization_mode controls cross-sensor disagreement penalties.
  • profile controls fusion weighting behavior.
  • vector_output_format selects zone output format for integration pipelines.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Fused change probability rasterfused_change_probabilityGeoTIFFFused disturbance probability map.
Sensor agreement rastersensor_agreementGeoTIFFSensor-agreement confidence map.
Terrain context rasterterrain_contextGeoTIFFTerrain-context support layer.
Uncertainty inflation rasteruncertainty_inflationGeoTIFFPer-pixel uncertainty inflation diagnostic layer.
High-confidence change zoneshigh_confidence_change_zonesVectorHigh-confidence disturbance polygons.
Thermal input contractthermal_input_contractJSONThermal input/coverage contract for this run.
Modality contribution diagnosticsmodality_contribution_diagnosticsJSONModality contribution-share and coverage diagnostics.
Agreement metricsagreement_metricsObject (in summary)Pairwise and three-way agreement diagnostics (mean_optical_vs_sar, optional thermal pair metrics, and mean_three_way_agreement).
Summary contractsummaryJSONInputs, parameters, aggregate metrics, harmonization diagnostics, outputs.
Optional reporthtml_reportHTMLOptional reporting artifact.

Output files:

  • <output_prefix>_fused_change_probability.tif
  • <output_prefix>_sensor_agreement.tif
  • <output_prefix>_terrain_context.tif
  • <output_prefix>_uncertainty_inflation.tif
  • <output_prefix>_high_confidence_change_zones.<ext>
  • <output_prefix>_thermal_input_contract.json
  • <output_prefix>_modality_contribution_diagnostics.json
  • <output_prefix>_summary.json
  • <output_prefix>_report.html

Agreement metrics are stored in summary.agreement_metrics and include pairwise agreement means plus three-way agreement when thermal input is provided.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.multi_sensor_fusion_monitoring(
        baseline_bundle="baseline_scene.tif",
        baseline_red_band_index=0,
        baseline_nir_band_index=1,
        change_bundle="change_scene.tif",
        change_red_band_index=0,
        change_nir_band_index=1,
        input_sar="sar_scene.tif",
        input_dem="dem.tif",
        pair_sar="sar_scene_pair.tif",
        profile="balanced",
        harmonization_mode="robust",
        high_confidence_threshold=0.8,
        max_zone_features=25000,
        vector_output_format="gpkg",
        output_prefix="outputs/multi_sensor_fusion"
  • Where does the optical-only change signal disagree with the SAR-based indicator, and which areas should be treated with lower confidence due to single-sensor detection only?

  • Which areas have both high fused change probability and high cross-sensor agreement, confirming detections that are robust across optical and SAR modalities?

  • How does adding a SAR coherence pair (pair_sar) change the fused change probability and sensor agreement outputs compared to a single-SAR run?

  • Pohl, C., & van Genderen, J. L. (1998). "Multisensor Image Fusion in Remote Sensing: Concepts, Methods, and Applications." Int. J. Remote Sens. 19(5), 823–854.

Parameter Interaction Notes

Outcome quality is primarily sensitive to sensor bias harmonization and threshold tuning.

  • Conservative harmonization reduces disagreement-driven false positives.
  • Threshold settings directly affect zone volume and review effort.
  • Coherence-enabled fusion generally improves confidence where pair SAR exists.

QA and Acceptance Criteria

Use a staged acceptance approach for Multi-Sensor Fusion Monitoring:

  1. Validate required inputs and optional pair SAR.
  2. Confirm expected raster/vector outputs are created.
  3. Review summary bias and resolution diagnostics.
  4. Validate zone counts and confidence distribution against context.

Recommended acceptance checks:

  • Workflow ID and key metrics exist in summary.
  • Zone count is consistent with thresholds and cap.
  • Resolution profile is interpreted before reporting high-confidence zones.

Advanced Operational Guidance

For production deployment of Multi-Sensor Fusion Monitoring:

  • Standardize profile and harmonization mode by monitoring program.
  • Keep vector format fixed per downstream system requirements.
  • Track bias diagnostics longitudinally to identify acquisition drift.

Implementation Patterns

Common implementation patterns with Multi-Sensor Fusion Monitoring:

  • Balanced default production run.
  • Conservative QA run for sensitive reporting contexts.
  • Threshold sensitivity run for operational zoning calibration.

Use Multi-Sensor Fusion Monitoring together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

Common Questions

Q: What output should analysts inspect first?
A: Start with summary diagnostics and fused probability, then inspect agreement and zones.

Q: Why are high-confidence zones fewer than expected?
A: Zones require both fused probability and agreement thresholds, plus max-feature cap.

Q: Does this tool require thermal imagery?
A: No. This runtime workflow uses optical bundles, SAR, and DEM.

Q: What is the purpose of harmonization_mode?
A: It controls how strongly optical-vs-SAR disagreement penalizes agreement confidence.

Q: Can I keep legacy output parameter behavior?
A: Yes, legacy output is accepted as alias for output_prefix.

Q: What does severe resolution mismatch mean?
A: Baseline-to-SAR cell-size ratio indicates stronger mixed-resolution risk; inspect diagnostics before publication.

Q: Which vector format should I use?
A: Use gpkg by default; choose geojson or shp only when required by downstream systems.

Q: How do I reduce false positives?
A: Use conservative harmonization and higher confidence thresholds.

Surface Reflectance Consistency Analysis

Purpose

Surface Reflectance Consistency Analysis models and corrects directional reflectance artifacts (Bidirectional Reflectance Distribution Function effects) that vary with sun and view geometry. Produces nadir-normalized, view-invariant reflectance suitable for multi-temporal and multi-sensor comparison.

Typical Questions This Tool Helps Answer

  • Are the apparent reflectance differences between these two dates a real land-surface change, or are they artifacts of different sun and view geometry?
  • Which pixels carry strong BRDF effects that need normalization before a time-series vegetation index analysis is credible?
  • Is our multi-date optical stack view-invariant enough to support cross-scene comparison, or does angular variation still bias the results?

Background

Background sections in this workflow family should make explicit how signal change can be confounded by acquisition geometry, atmosphere, calibration drift, and georegistration error. A reliable interpretation pipeline therefore separates physical signal change from acquisition artifacts through normalization, alignment, and uncertainty-aware thresholds.

Operationally, users should treat these tools as evidence-weighting systems rather than single-threshold detectors. The most robust workflows combine pre-processing diagnostics, method-specific quality indicators, and post-run plausibility checks before decisions are escalated.

BRDF consistency analysis addresses anisotropic reflectance, where measured brightness changes with viewing and illumination geometry. A common approximation is the kernel-weighted reflectance model $R( heta_i, heta_v,\phi)=f_{iso}+f_{vol}K_{vol}+f_{geo}K_{geo}$, used to normalize scenes before cross-date comparison.

Methodological Considerations

  • Ensure geometric alignment is within the tolerance required by the downstream metric (pixel-level for many raster differences, sub-pixel for interferometric phase workflows).
  • Separate radiometric normalization from change inference so threshold choices reflect physical behavior rather than acquisition artifacts.
  • Prefer multi-run sensitivity checks on normalization and detection thresholds when decisions depend on marginal signal differences.

Practical Interpretation Pitfalls

Common failure modes include treating sensor noise as change signal, over-trusting single-date anomalies, and ignoring confidence/context layers when operational prioritization is made.

Inputs

ParameterTypeRequiredDescription
input_redRasterYesRed band input.
input_nirRasterYesNear-infrared band input.
input_greenRasterNoOptional green band input.
input_demRasterYesDEM used for terrain-aware correction support.
solar_zenith_degFloatYesSolar zenith in degrees (0 <= value < 90).
solar_azimuth_degFloatYesSolar azimuth in degrees (0 <= value <= 360).

Parameters

  • profile (optional): fast, balanced, conservative; default balanced.
  • stress_test_level (optional): none, standard, extreme; default standard.
  • output_prefix (optional): artifact prefix; default brdf_consistency.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Normalized reflectance rasterbrdf_normalized_reflectanceRaster (GeoTIFF)Corrected reflectance proxy for stable comparison.
Normalization delta rasternormalization_deltaRaster (GeoTIFF)Correction magnitude map showing change from raw to corrected signal.
Consistency confidence rasterconsistency_confidenceRaster (GeoTIFF)Confidence score (0-1) for corrected reflectance consistency.
Summary contractsummaryJSONRun contract, diagnostics, and output inventory.
Optional reporthtml_reportHTMLCustomer-friendly summary report (<output_prefix>_report.html).

Summary diagnostics included

  • Valid cell count
  • Mean and standard deviation of normalization delta
  • Mean consistency confidence
  • Stress-adjusted mean consistency confidence
  • Illumination angle stress indicator

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.brdf_surface_reflectance_consistency(
        input_red="red.tif",
        input_nir="nir.tif",
        input_green="green.tif",
        input_dem="dem.tif",
        solar_zenith_deg=40.0,
        solar_azimuth_deg=165.0,
        profile="balanced",
        stress_test_level="standard",
        output_prefix="outputs/brdf_consistency"
)

References

  • Roujean, J. L., Leroy, M., & Deschamps, P. Y. (1992). "A Bidirectional Reflectance Model." Remote Sens. Env. 41(2–3), 123–134.

Parameter Interaction Notes

Performance and confidence are influenced by acquisition geometry and stress settings.

  • Higher solar zenith values increase geometry stress.
  • extreme stress testing applies stricter confidence penalties than standard.
  • conservative profile is appropriate for high-governance reporting workflows.

QA and Acceptance Criteria

Use a staged acceptance approach for Surface Reflectance Consistency Analysis:

  1. Validate all required inputs and angle ranges.
  2. Confirm output rasters and summary JSON are generated under the selected prefix.
  3. Verify confidence maps are spatially coherent with expected terrain/illumination behavior.
  4. Verify stress-adjusted confidence aligns with policy thresholds.

Recommended acceptance checks:

  • summary.workflow is brdf_surface_reflectance_consistency.
  • Output inventory in summary.outputs matches generated files.
  • Stress-adjusted confidence does not exceed unadjusted mean confidence.

Advanced Operational Guidance

For production deployment of Surface Reflectance Consistency Analysis:

  • Keep consistent profile/stress settings across comparison campaigns.
  • Archive JSON and HTML artifacts with project metadata for audit traceability.
  • Use stress-adjusted confidence as the decision gate for high-angle scenes.

Implementation Patterns

Common implementation patterns with Surface Reflectance Consistency Analysis:

  • Baseline monitoring with balanced + standard.
  • Governance validation with conservative + extreme.
  • Periodic reruns with fixed settings for longitudinal comparability.

Use Surface Reflectance Consistency Analysis together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

Common Questions

Q: Why is stress-adjusted confidence lower than mean confidence?
A: Stress adjustment applies an illumination-geometry penalty based on zenith angle and selected stress level.

Q: What if optional green band is unavailable?
A: The workflow runs with red, nir, and dem; green is optional.

Q: How do we pick between standard and extreme stress tests?
A: Use standard for routine QA and extreme for conservative governance gates.

Image Registration Diagnostics

Purpose

Image Registration Diagnostics extracts and matches robust image features (corners, edges, keypoints) across multiple images to facilitate registration, tie-point generation, and multi-temporal alignment without explicit ground control.

Typical Questions This Tool Helps Answer

  • Is this image pair geometrically aligned well enough to support meaningful change analysis without ground control points?
  • Where are spatial registration errors largest, and which areas should be excluded or flagged for downstream interpretation?
  • Can adequate tie-point coverage be achieved automatically, or does the image geometry require manual GCP support?

Background

Background sections in this workflow family should make explicit how signal change can be confounded by acquisition geometry, atmosphere, calibration drift, and georegistration error. A reliable interpretation pipeline therefore separates physical signal change from acquisition artifacts through normalization, alignment, and uncertainty-aware thresholds.

Operationally, users should treat these tools as evidence-weighting systems rather than single-threshold detectors. The most robust workflows combine pre-processing diagnostics, method-specific quality indicators, and post-run plausibility checks before decisions are escalated.

Feature-oriented registration relies on stable keypoints, robust correspondence filtering, and outlier rejection (for example RANSAC) to estimate transforms. Registration confidence should be interpreted with both residual statistics and spatial distribution of tie points.

Methodological Considerations

  • Ensure geometric alignment is within the tolerance required by the downstream metric (pixel-level for many raster differences, sub-pixel for interferometric phase workflows).
  • Separate radiometric normalization from change inference so threshold choices reflect physical behavior rather than acquisition artifacts.
  • Prefer multi-run sensitivity checks on normalization and detection thresholds when decisions depend on marginal signal differences.

Practical Interpretation Pitfalls

Common failure modes include treating sensor noise as change signal, over-trusting single-date anomalies, and ignoring confidence/context layers when operational prioritization is made.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
modeStringNoMust be set or pair. Default is set.Chooses directory-based pair planning or one explicit pair.
images_dirDirectory pathConditionalRequired when mode=set. Must exist and contain supported image types: jpg, jpeg, tif, tiff, png.Directory used for set-mode candidate planning.
left_imageImage pathConditionalRequired when mode=pair. File must exist.Left image in pair mode.
right_imageImage pathConditionalRequired when mode=pair. File must exist.Right image in pair mode.

Parameters

ArgumentTypeRequiredDefaultDescription
max_pairsIntegerNo24Maximum number of ranked pairs kept in set mode. Must be greater than 0.
max_features_per_imageIntegerNo500Maximum keypoints extracted per image. Must be in [50, 5000].
ratio_testFloatNo0.80Descriptor ratio-test threshold in [0.5, 0.99).
min_matchesIntegerNo24Minimum accepted match count per pair. This is the main QA gate.
min_match_countIntegerNo24Pair-level QC threshold for minimum accepted match count. Must be at least 1.
min_inlier_ratioFloatNo0.18Pair-level QC threshold for minimum accepted inlier proxy ratio. Must be in [0, 1].
qc_policyStringNobalancedQC policy preset. Must be one of strict, balanced, permissive.
output_prefixStringNoregistration_workflowPrefix used to derive all output files.
emit_pair_match_vizBooleanNofalseEnables side-by-side PNG visualizations with tie-point lines.
max_pair_visualizationsIntegerNo8Maximum visualization PNGs to write. Must be in [1, 200].
max_lines_per_pairIntegerNo150Maximum tie-point lines drawn per PNG. Must be in [1, 5000].
viz_scaleFloatNo0.5Visualization downscale factor in [0.05, 1.0].

The runtime also accepts output as an alias for output_prefix.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Pair diagnostics (${prefix}_pair_diagnostics.json)pair_diagnosticsJSONPair-by-pair diagnostics including image names, candidate score, keypoint counts, matches, inlier proxy, mean confidence, fallback flag, and attempt trace.
Match summary (${prefix}_match_summary.json)match_summaryJSONRun summary with status, pair counts, match totals, fallback counts, fallback policy, visualization settings, and output paths.
Summary alias (${prefix}_match_summary.json)summaryJSONAlias key to the same JSON file as match_summary.
Tie points (${prefix}_tie_points.csv)tie_pointsCSVHeader is exactly pair_id,left_x,left_y,right_x,right_y,confidence.
Pair QC table (${prefix}_pair_qc_table.csv)pair_qc_tableCSVHeader is exactly pair_id,left_image,right_image,matches,inlier_proxy,qc_status,fallback_recommended,reason_codes. One row per successful pair with reason codes such as LOW_MATCH_COUNT and LOW_INLIER_RATIO.
QC summary (${prefix}_qc_summary.json)qc_summaryJSONPair-level QC counts/fractions by policy and thresholds.
Pair visualization directory (${prefix}_pair_match_viz/)pair_match_viz_dirDirectory of PNGsOptional visualization directory, written only when emit_pair_match_viz=true.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the match summary.

Important summary fields

KeyMeaning
statuspass, review, or fail.
pair_countNumber of successful pairs included in the run.
total_matchesTotal tie-point matches across successful pairs.
mean_inlier_proxyMean match quality proxy across successful pairs.
low_quality_pairsNumber of successful pairs that still fell below min_matches.
pairs_requiring_fallbackNumber of pairs that needed fallback strategy selection.
failed_pair_countNumber of pair computations that failed outright.
qcPair-level QC object with policy, thresholds, counts, and fractions.
fallback_policyThresholds and deltas used by the fallback logic.
visualizationVisualization settings and output counts.
outputsPaths to diagnostics, summary, tie points, pair QC artifacts, and optional visualization directory.

Returned payload keys

The workflow returns these output keys:

  • pair_diagnostics
  • match_summary
  • summary (same file as match_summary)
  • tie_points
  • pair_qc_table
  • qc_summary
  • html_report
  • pair_match_viz_dir when visualization is enabled

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.registration_oriented_feature_workflow(
        mode="pair",
        left_image="frame_001.jpg",
        right_image="frame_002.jpg",
        max_features_per_image=750,
        ratio_test=0.80,
        min_matches=24,
        emit_pair_match_viz=True,
        max_pair_visualizations=4,
        max_lines_per_pair=120,
        viz_scale=0.5,
        output_prefix="registration_pair_a",
)
  • Which image pairings in this stack provide robust tie-point support for stable geometric registration?

  • Which image pairs have too few matches or low inlier quality, and do those fall below the minimum match threshold requiring fallback strategies or manual intervention?

  • Are registration residuals and inlier ratios within acceptable thresholds for reliable change analysis?

  • Lowe, D. G. (2004). Distinctive image features from scale-invariant keypoints. IJCV.

  • Bay, H., Tuytelaars, T., & Van Gool, L. (2006). "SURF: Speeded Up Robust Features." ECCV, 404-417.

Parameter Interaction Notes

  • min_matches is the strongest QA threshold. It affects fallback acceptance and the final status.
  • min_match_count and min_inlier_ratio define pair-level QC gate criteria and drive pair_qc_table.csv and qc_summary.json status counts.
  • qc_policy scales pair-level QC thresholds (strict tightens, permissive relaxes) and should be recorded with each production run.
  • ratio_test and max_features_per_image interact: one changes descriptor strictness and the other changes feature yield.
  • In set mode, max_pairs limits the ranked output list, not necessarily the number of candidate combinations considered internally.
  • Visualization parameters only change the optional PNG outputs, not the actual scoring.

QA and Acceptance Criteria

  1. Verify mode-specific required arguments are correct.
  2. Verify the example uses actual runtime argument names.
  3. Verify the tie-point CSV header exactly matches the documented schema.
  4. Verify both JSON outputs contain the documented fields.
  5. Verify the returned payload contains the documented keys.
  6. If visualization is enabled, verify the directory and PNG count match the summary.

The workflow fails if the mode is invalid, if required mode-specific paths are missing, if image files do not exist, if numeric limits are out of range, if min_match_count < 1, if min_inlier_ratio is outside [0, 1], if qc_policy is not one of strict, balanced, permissive, or if output_prefix / output is provided as an empty string.

Advanced Operational Guidance

  • Use pair mode for deterministic review of a known image pair.
  • Use set mode when the workflow needs to nominate promising pairs from a larger image collection.
  • Review pair_failures before dismissing a dataset; some failures are decode or image-quality issues rather than geometric incompatibility.
  • For cross-modal imagery, inspect attempt_trace and strategy_used to see whether preprocessing fallback was necessary.

Implementation Patterns

  • Pair QA run: one explicit pair, no visualization, for automated diagnostics.
  • Pair review run: same pair with visualization enabled for human inspection.
  • Set planning run: directory-based candidate ranking before downstream registration.
  • Threshold tuning run: vary min_matches, ratio_test, and max_features_per_image on the same imagery.
  • sar_coregistration
  • sar_analysis_readiness
  • guided_uav_image_intake_workflow

When To Use This Workflow

Use this workflow when you need evidence about registration readiness rather than a finished registered image. It is especially useful when teams must justify which pairs are good enough for downstream alignment and which ones require manual review.

What this workflow helps you do:

  • Rank and screen candidate image pairs.
  • Inspect fallback behavior rather than hiding it.
  • Hand off tie points and QA evidence to downstream registration steps.

Results Delivery Checklist

  1. Deliver pair_diagnostics.json, match_summary.json, and tie_points.csv together.
  2. State clearly whether the run used mode=pair or mode=set.
  3. Record the final min_matches, min_match_count, min_inlier_ratio, qc_policy, ratio_test, and max_features_per_image values.
  4. If visualization was enabled, include the visualization directory and note the scaling settings.
  5. Review status, low_quality_pairs, and pairs_requiring_fallback before approving downstream registration.

Common Questions

Q: Why can a run have many matches and still end up as review?
A: Because review is triggered when match count alone is not enough. Low mean_inlier_proxy or pairs below min_matches can still keep the run out of pass.

Q: What is the main misinterpretation risk with tie_points.csv?
A: Treating it as a final registration model. It only contains tie points, not a solved transformation or warped image.

Q: Which settings matter most for scenario sensitivity?
A: min_matches, ratio_test, and max_features_per_image because they determine whether fallback is needed and whether pairs stay above the QA gate.

Q: When should teams enable the optional visualizations?
A: Enable them when a pair is borderline, cross-modal, or heading to manual review. They are evidence outputs for people, not part of the scoring itself.

Precision Agriculture Intelligence Bundle

Overview

The Precision Agriculture Intelligence bundle provides specialized tools for site-specific crop management, soil-crop-climate analysis, and farm operations planning. Integrates soil properties, topography, climate, crop genetics, and remote sensing to optimize yield, input efficiency, and sustainability.

Key Concepts

Soil-Landscape Relationships

Soil properties (texture, drainage, organic matter, fertility) vary systematically with terrain position and parent material. Soil-landscape mapping predicts soil variability using topography and other geographic data.

Yield Potential and Limiting Factors

Crop yield depends on genetics (variety, hybrid), environment (water, nutrients, temperature), and management. Precision AG identifies which factors limit yield in different field areas, enabling targeted intervention.

Temporal Crop Stress

In-season monitoring detects early water and nutrient stress via multispectral indices (NDVI, NDRE, chlorophyll), enabling timely intervention to prevent yield loss.

Field Operations Planning

Terrain suitability (trafficability) affects machinery efficiency, soil compaction risk, and harvest timing. Operations planning optimizes equipment selection and field logistics.

Typical Workflows

Soil-Based Prescription Application

  1. Map soil types and properties (Soil Landscape Classification)
  2. Conduct trials relating soil to yield potential
  3. Generate fertilizer/lime prescription maps
  4. Apply variable-rate inputs during spring/fall operations

In-Season Crop Stress Response

  1. Acquire multispectral imagery (1–2 week frequency)
  2. Compute vegetation indices (NDVI, NDRE)
  3. Compare to field-specific or regional baseline
  4. Detect stress early (In-Season Crop Stress Intervention Planning)
  5. Implement tactical response (irrigation, fungicide, foliar nutrient)

Yield Analysis and Mapping

  1. Harvest yield data with GPS georeference
  2. Clean and grid yield map (Yield Data Conditioning and QA)
  3. Analyze yield zones and drivers (Precision AG Yield Zone Intelligence)
  4. Identify top-yielding areas and associated factors
  5. Plan next-year management to replicate success

Field Trafficability Workflow

  1. Assess soil texture, slope, drainage
  2. Model trafficability for different equipment (Field Trafficability and Operation Planning)
  3. Identify at-risk compaction areas (wet soils, steep slopes)
  4. Plan harvest timing and machinery routes to minimize compaction

The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:

  1. Yield Data Conditioning and QA
  2. Precision AG Yield Zone Intelligence
  3. In-Season Crop Stress Intervention Planning
  4. Precision Irrigation Optimization
  5. Field Trafficability and Operation Planning
  6. Soil Landscape Classification

Performance and Data Considerations

  • Spatial Resolution: Field-level variability detectable at 5–30 m (satellite), 0.5–5 m (UAV)
  • Temporal Frequency: Weekly satellite, 2–4 week UAV, daily ground sensors (if available)
  • Soil Data: Primary soil map should reflect field-level variability (within-field mapping preferred)
  • Yield Data Quality: Filter outliers, account for equipment yield-sensor calibration
  • Ground Truth: 5–10% ground-sampled plots validate remote sensing and model predictions

References

  • Stafford, J. V. (Ed.). (2020). Precision Agriculture for Sustainability. Burleigh Dodds Science Publishing.
  • National Corn Growers Association (NCGA). Precision Agriculture Guidelines.

Yield Data Conditioning and QA

What This Tool Does

Yield Data Conditioning and QA runs a full yield-cleaning pipeline and produces cleaned points, a cleaned map, confidence points, and a summary report.

Typical Questions This Tool Helps Answer

  • Are the raw yield monitor data from this harvest clean enough to use for management zone analysis, field benchmarking, and agronomic reporting?
  • Which passes or spatial areas contain yield artifacts from machine start-stop, lag effects, or speed anomalies that would distort zone-level statistics?
  • After conditioning and outlier removal, what is the spatial pattern of yield variability and which QA flags remain for agronomist review?

When To Use

  • End-of-season yield monitor cleanup
  • Multi-machine or multi-header harmonization
  • Production QA before agronomic analytics

What You Need

InputDescription
Yield point layerRaw point data from monitor export.
Yield fieldField containing raw yield values.
Optional telemetry fieldsSpeed and heading fields for telemetry QA.
Optional moisture fieldMoisture field for dry-yield normalization.

Key Settings

SettingDefaultGuidance
output_prefixrequiredPrefix used for all emitted artifacts.
profilebalancedUse fast, balanced, or strict.
keep_intermediatestrueKeep intermediate branch outputs for review.
filtering_modeprofile-basedstandard or robust.
lag_correction_modenoneSet distance only when lag distance is known.
target_moisture_pct15.5Used only if a moisture field is supplied.

What You Get

DeliverableFormatDescription
qa_flagsGeoPackageEdge QA points.
clean_pointsGeoPackageFinal normalized points.
clean_mapGeoPackageFinal swath map polygons.
confidence_pointsGeoPackageFinal points with confidence field (QA_CONF).
summaryJSONRun summary and branch diagnostics.
html_reportHTMLOptional report page.

Depending on settings, intermediate keys may also be emitted (for example pass_lines, pass_points, filtered_points, reconciled_points).

Runtime Output Keys

result.outputs["qa_flags"]
result.outputs["clean_points"]
result.outputs["clean_map"]
result.outputs["confidence_points"]
result.outputs["summary"]
result.outputs["html_report"]

Common Questions

Q: Which QA metrics should I review first? A: Start with summary.mean_confidence, summary.telemetry_points_removed, and summary.clean_points_no_edges to assess quality improvement versus retention.

Q: What is a common interpretation mistake? A: Assuming reduced point count means failure; it often indicates successful outlier and edge-noise removal.

Q: Which settings most change final outputs? A: Branch controls for telemetry QA, lag correction, moisture normalization, robust filtering, and keep_intermediates usually drive the largest differences.

Q: How should operations use the outputs? A: Use confidence_points (QA_CONF) and clean_map for downstream mapping, and keep qa_flags plus intermediates for audit traceability.

Results Delivery Checklist

  • Yield field mapping and alias resolution were confirmed
  • Pass reconstruction output was reviewed
  • Final cleaned points and map were reviewed
  • Summary counts and mean confidence were checked

Operational Notes

  • Keep branch settings (telemetry QA, lag correction, moisture normalization, robust filtering) explicit in delivery notes because they materially change retained-point counts.
  • Review mean_confidence and retained-point metrics together before approving downstream zone analytics.
  • Retain intermediates for governance-heavy programs; they are the clearest evidence of why records were removed or adjusted.
  • precision_ag_yield_zone_intelligence
  • field_trafficability_and_operation_planning
  • precision_irrigation_optimization

References

  • Runtime implementation: wbtools_pro/src/tools/workflow_products/yield_data_conditioning_and_qa.rs
  • Precision Agriculture Intelligence bundle overview: manual/pro-tools-customer/src/precision_agriculture/overview.md

When To Use This Workflow

Use Yield Data Conditioning and QA when you need an auditable cleaning pipeline before yield zoning, benchmarking, and prescription-support analytics.

Precision Ag Yield Zone Analysis

Purpose

Precision AG Yield Zone Intelligence analyzes yield variability within fields, clusters yield-similar areas into management zones, and relates zones to underlying soil, topography, and management drivers. Enables hypothesis-driven precision management.

Typical Questions This Tool Helps Answer

  • Which management zones have the highest yield stability score and which have the lowest, and how does adding terrain context change the zone boundaries?
  • When I vary the number of zones from 3 to 6 using the same yield surface, do zone patterns remain spatially consistent enough to support stable management prescriptions?
  • Which areas of the field have low zone confidence scores, indicating transition zones where the management class assignment is least certain?

Background

Precision agriculture workflows model spatial heterogeneity in soil, crop condition, trafficability, or yield using a combination of remote sensing, terrain context, and machine telemetry. Agronomic interpretation is strongest when temporal conditions and management history are considered alongside the map outputs.

Users should treat these models as decision-support surfaces for scouting, sampling, and intervention targeting. Confidence, QA flags, and scenario sensitivity should guide where to act first.

Yield-zone intelligence partitions fields into management-consistent productivity zones by combining yield history and contextual drivers. Zones should be treated as intervention hypotheses and validated agronomically.

Methodological Considerations

  • Align input timing with agronomic windows; stale observations reduce actionability even when model quality is high.
  • Use QA/confidence indicators to drive scouting and sampling intensity.
  • Reassess thresholds across season stages so intervention logic tracks crop development dynamics.

Practical Interpretation Pitfalls

High map contrast is not always agronomic significance; validate intervention zones with field observations before broad prescription changes.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
yield_surfaceRasterYesMust be a readable raster.Primary yield or normalized productivity surface.
terrain_contextRasterNoMust be a readable raster. It is resampled to the yield_surface grid if needed.Optional terrain proxy such as wetness or slope.

Parameters

ArgumentTypeRequiredDefaultDescription
profileStringNobalancedSupported values: fast, balanced, conservative. Changes how strongly terrain moderates the stability score.
zone_countIntegerNo4Number of management zones. Must be between 2 and 8.
max_zone_featuresIntegerNo5000Maximum number of polygon regions written to the GeoPackage. Must be greater than 0.
sweep_specJSON objectNonullOptional sweep specification. When supplied, the workflow executes multi-run sweeps and emits sweep diagnostics.
output_prefixStringYes-Prefix used to derive all output artifact names. Must not be empty.

The runtime also accepts the legacy alias output anywhere output_prefix would be used.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Yield stability raster (${prefix}_yield_stability.tif)yield_stabilityGeoTIFF rasterPer-cell stability score in the range [0, 1].
Management zones raster (${prefix}_management_zones.tif)management_zonesGeoTIFF rasterPer-cell integer zone assignments from 1 to zone_count.
Management zones vector (${prefix}_management_zones.gpkg)management_zones_vectorPolygon vectorLayer management_zones with fields ZONE_ID, ZONE, STABILITY, and CONF. One feature is written per contiguous zone region until the cap is reached.
Zone confidence raster (${prefix}_zone_confidence.tif)zone_confidenceGeoTIFF rasterPer-cell confidence score in the range [0, 1].
Sweep run matrix (optional)run_matrix_summaryCSVPer-run matrix with parameter overrides and zone-confidence metrics.
Sweep sensitivity report (optional)sensitivity_reportJSONSweep summary including normalized span and stability_class.
Sweep sensitivity report (optional)sensitivity_report_htmlHTMLRendered sweep report.
Sweep stability map (optional)stability_mapGeoTIFFPer-cell sweep stability classes (3=high, 2=medium, 1=low).
Summary contract (${prefix}_summary.json)summaryJSONSummary contract with top-level keys workflow, schema_version, generated_at_utc, schema_migration_notes, error_taxonomy, inputs, parameters, warnings, summary, output_semantics, confidence_contract, interpretation_warnings, and outputs.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the same summary content.

Important summary keys

KeyMeaning
inputsContains yield_surface and terrain_context.
parametersContains profile, zone_count, and max_zone_features.
warningsHolds truncation messages if the vector layer was capped.
summary.valid_cellsNumber of non-nodata cells assigned to zones.
summary.zone_histogramPer-zone cell counts.
summary.zone_features_writtenNumber of vector features actually written.
summary.zone_features_candidate_totalNumber of contiguous regions detected before truncation.
summary.zone_features_omittedNumber of omitted vector regions.
summary.zone_vector_truncatedtrue when the GeoPackage is incomplete because of the feature cap.
output_semanticsMachine-readable semantic tags for zone outputs and confidence diagnostics.
confidence_contractStandardized confidence metadata including method and low-confidence summary fields.
interpretation_warningsExplicit warnings about planning interpretation and transition-zone validation.
outputsContains paths for yield_stability, management_zones, management_zones_vector, zone_confidence, and summary.

Returned payload keys

The workflow returns these output keys:

  • yield_stability
  • management_zones
  • management_zones_vector
  • zone_confidence
  • run_matrix_summary (with sweep_spec)
  • sensitivity_report (with sweep_spec)
  • sensitivity_report_html (with sweep_spec)
  • stability_map (with sweep_spec)
  • summary
  • html_report

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.precision_ag_yield_zone_intelligence(
    yield_surface="yield_2024_interpolated.tif",
    terrain_context="wetness_index.tif",
    profile="balanced",
    zone_count=4,
    max_zone_features=5000,
    output_prefix="yield_zones_2024",
)

References

  • Stafford, J. V., & Werner, B. (2002). "Challenges for Practical Exploitation of Precision Farming." J. Agric. Eng. 33(1), 37-48.

Parameter Interaction Notes

  • profile changes the relative influence of yield and terrain on the stability score.
  • zone_count affects both the number of classes and how narrow each confidence band becomes.
  • max_zone_features only affects the vector layer, not the raster outputs, so truncation can occur even when the rasters are fully valid.
  • If you omit terrain_context, the workflow uses a neutral terrain term and the result becomes mostly yield-driven.

QA and Acceptance Criteria

  1. Verify the example uses the real runtime argument names.
  2. Verify zone_count is within [2, 8] and max_zone_features > 0.
  3. Verify the GeoPackage fields are exactly ZONE_ID, ZONE, STABILITY, and CONF.
  4. Verify summary.json contains the documented top-level and nested keys.
  5. If you intentionally cap max_zone_features, verify warnings and summary.zone_vector_truncated report that truncation.
  6. Verify the returned payload includes yield_stability, management_zones, management_zones_vector, zone_confidence, summary, and html_report.

The workflow fails if required rasters cannot be read, if terrain_context still does not match the yield_surface grid after harmonization, if profile is unsupported, if zone_count falls outside [2, 8], if max_zone_features is 0, or if output_prefix / output is provided as an empty string.

Advanced Operational Guidance

  • Use the rasters as the primary analysis outputs and the GeoPackage as a delivery convenience layer.
  • Always check summary.zone_vector_truncated before distributing the vector layer downstream.
  • Keep scenario prefixes unique; the workflow writes a family of files from the same prefix.
  • If terrain context comes from a different grid, inspect pilot runs because bilinear harmonization can soften abrupt terrain transitions.

Implementation Patterns

  • Baseline run: omit terrain_context and produce a yield-driven zoning baseline.
  • Terrain-aware run: add terrain_context and compare shifts in zone_histogram and vector fragmentation.
  • Sensitivity run: vary profile and zone_count to see whether management interpretations are stable.
  • Delivery run: choose a max_zone_features large enough to avoid truncation or explicitly document the truncation before handoff.
  • precision_irrigation_optimization
  • yield_data_conditioning_and_qa
  • remote_sensing_change_detection

When To Use This Workflow

Use this workflow when you need an interpretable zoning package for field operations rather than just a classified raster. It is especially useful when you need to compare management scenarios and document whether the vector delivery layer is complete.

What this workflow helps you do:

  • Build repeatable management zones from one required raster input.
  • Compare scenarios through profile, zone_count, and terrain inclusion.
  • Deliver both analysis rasters and a vector layer with explicit truncation reporting.

Results Delivery Checklist

  1. Deliver the three rasters, the GeoPackage, the JSON summary, and the HTML report together.
  2. Record the final profile, zone_count, and max_zone_features settings.
  3. State clearly whether terrain_context was used.
  4. Check and report summary.zone_vector_truncated before distributing the GeoPackage.
  5. Use a distinct output_prefix for every scenario package.

Common Questions

Q: Why can zone_confidence be low inside a zone that looks spatially coherent?
A: Confidence is based on how close a cell’s score is to the center of its assigned zone band, not on whether the polygon looks smooth on a map.

Q: What is the most common misread of management_zones_vector?
A: Treating it as a complete zone layer without checking summary.zone_vector_truncated. The rasters can be complete even when the GeoPackage is capped.

Q: Which settings matter most when testing scenario sensitivity?
A: zone_count and profile. zone_count changes class structure, while profile changes how strongly terrain influences the stability score.

Q: How should operational teams choose between the rasters and the GeoPackage?
A: Use the rasters as the analytic source of truth and use the GeoPackage for delivery only after confirming the summary shows no unacceptable truncation.

In-Season Crop Stress Intervention Planning

Purpose

In-Season Crop Stress Intervention Planning detects early crop water and nutrient stress via multispectral remote sensing (NDVI, NDRE, thermal data) and integrates with weather and soil data to recommend tactical interventions (irrigation, foliar spray, fungicide application) timed to maximize effectiveness and ROI.

Typical Questions This Tool Helps Answer

  • Where in this field is crop stress currently exceeding the threshold that justifies a targeted intervention this week?
  • Which areas show both high NDVI-based vigor stress and elevated canopy temperature or soil moisture deficit, confirming combined physiological stress that warrants immediate scouting?
  • What fraction of this field is classified at intervention urgency class 3 or 4, and which spatial clusters should field crews address first?

Background

Precision agriculture workflows model spatial heterogeneity in soil, crop condition, trafficability, or yield using a combination of remote sensing, terrain context, and machine telemetry. Agronomic interpretation is strongest when temporal conditions and management history are considered alongside the map outputs.

Users should treat these models as decision-support surfaces for scouting, sampling, and intervention targeting. Confidence, QA flags, and scenario sensitivity should guide where to act first.

In-season stress intervention planning identifies where crop response diverges from expected development trajectories. Effective use requires rapid feedback loops between map interpretation and field scouting.

Methodological Considerations

  • Align input timing with agronomic windows; stale observations reduce actionability even when model quality is high.
  • Use QA/confidence indicators to drive scouting and sampling intensity.
  • Reassess thresholds across season stages so intervention logic tracks crop development dynamics.

Practical Interpretation Pitfalls

High map contrast is not always agronomic significance; validate intervention zones with field observations before broad prescription changes.

Inputs

ParameterTypeRequiredDescription
ndviRaster pathYesNDVI/vigor input normalized to [0,1].
canopy_temperatureRaster pathNoOptional temperature stress raster normalized to [0,1].
soil_moistureRaster pathNoOptional moisture-deficit raster normalized to [0,1].
output_prefixStringYesOutput filename prefix.

Parameters

Scoring logic summary:

  • Vigor stress from NDVI has highest influence.
  • Thermal and moisture stress layers are optional modifiers.
  • Missing optional layers default to zero contribution.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Intervention priority rasterintervention_priorityGeoTIFFContinuous urgency score raster in [0,1].
Intervention class rasterintervention_classGeoTIFFDiscrete class raster (1 lowest urgency to 4 highest urgency).
Summary contractsummaryJSONStatus, warnings, diagnostics, and output paths.
Optional reporthtml_reportHTMLOptional formatted report view.

Output filenames:

  • <output_prefix>_intervention_priority.tif
  • <output_prefix>_intervention_class.tif
  • <output_prefix>_summary.json
  • <output_prefix>_report.html

Summary status values:

  • pass: high-priority fraction below review threshold
  • review: high-priority fraction at/above review threshold

Summary contract also includes:

  • output_semantics
  • confidence_contract
  • interpretation_warnings

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.in_season_crop_stress_intervention_planning(
        ndvi="ndvi_2024_07_15.tif",
        canopy_temperature="canopy_temp_stress_2024_07_15.tif",
        soil_moisture="soil_moisture_deficit_2024_07_15.tif",
        output_prefix="outputs/in_season/crop_stress"
)

References

  • Rouse, J. W., Haas, R. H., Schell, J. A., & Deering, D. W. (1974). "Monitoring Vegetation Systems in the Great Plains with Landsat." NASA GSF C Spec. Publ. 351, 309.

Parameter Interaction Notes

The model weights vigor stress most heavily. Optional thermal and moisture layers refine but do not replace NDVI-driven priority.

  • Ensure optional layers are normalized to [0,1] for consistent behavior.
  • Use comparable seasonal calibration when comparing runs over time.

QA and Acceptance Criteria

Use a staged acceptance approach for In-Season Crop Stress Intervention Planning:

  1. Validate all provided raster inputs are readable.
  2. Confirm output rasters and summary JSON are produced.
  3. Verify status and warning logic before intervention rollout.
  4. Confirm high-priority fraction aligns with observed field conditions.

Recommended acceptance checks:

  • Summary includes expected workflow ID and output paths.
  • High-priority fraction reflects score >= 0.7 cell share.
  • Review threshold in diagnostics is 0.45.

Advanced Operational Guidance

For production deployment of In-Season Crop Stress Intervention Planning:

  • Keep normalization methods fixed across campaigns.
  • Validate broad stress signals with agronomic scouting before blanket treatment.
  • Use warnings as governance checkpoints in weekly intervention meetings.

Implementation Patterns

Common implementation patterns with In-Season Crop Stress Intervention Planning:

  • NDVI-only quick pass.
  • Full-context pass (NDVI + thermal + moisture) for intervention staging.
  • Repeat pass after major weather/irrigation events.

Use In-Season Crop Stress Intervention Planning together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

Common Questions

Q: Do I need both optional rasters?
A: No. The workflow runs with NDVI only; optional rasters improve context.

Q: What does class 4 mean?
A: Highest intervention urgency.

Q: When does the run become review?
A: When high-priority fraction (score >= 0.7) is at least 0.45.

Q: Can this output be used directly for variable-rate prescriptions?
A: Use it as intervention prioritization input; prescription design still needs domain-specific rules.

Q: Why is priority high in large areas?
A: NDVI stress may be broad, or optional stress layers may reinforce vigor stress; validate with ground context.

Q: Does this workflow perform temporal trend analysis?
A: No. It evaluates supplied raster layers for the current run.

Q: Why normalize to [0,1]?
A: The fusion weights assume normalized stress values.

Q: What if optional rasters have different CRS or resolution?
A: They are harmonized to the NDVI raster grid during execution.

Q: What should teams review first?
A: Summary status/warnings, then intervention-priority hotspots.

Q: What is the key governance threshold?
A: high_priority_fraction_review = 0.45.

Precision Irrigation Optimization

Purpose

Precision Irrigation Optimization generates zone-specific irrigation plans that maximize agronomic return per unit water while controlling pumping cost, runoff risk, and avoidable leaching.

It integrates soil properties, terrain, crop water demand, and weather to produce actionable recommendations for:

  • Timing (when to irrigate)
  • Application depth (how much)
  • Delivery strategy (method and route)
  • Cost-yield tradeoffs (whether additional water is economical)

Typical Questions This Tool Helps Answer

  • Which field zones have the highest irrigation deficit score and what is the recommended prescription depth for each variable-rate zone?
  • Where is moisture stress risk highest across the field, and how does the high-stress zone fraction change between conservative and fast irrigation profiles?
  • If soil moisture data is unavailable, how does the slope-only heuristic prescription compare to a sensor-informed run, and where are the largest differences?

Background

Precision irrigation optimization couples crop water demand, soil storage dynamics, and operational constraints to produce schedule recommendations. A standard root-zone balance is:

$$S_{t+1}=S_t+P_t+I_t-ET_t-D_t-R_t$$

With irrigation decision variable $I_t$ selected to keep storage within agronomically acceptable depletion bounds.

Demand and Response Framing

Crop demand is often modeled with stage-sensitive coefficients:

$$ET_c=K_c\cdot ET_0$$

Where $ET_0$ is reference evapotranspiration and $K_c$ varies by crop stage. The optimization challenge is to satisfy demand while respecting delivery capacity and operational windows.

Objective Trade-Offs

Typical objective formulations balance yield protection against water and operating cost:

$$\max\big(Revenue(Y(I))-WaterCost(I)-OperatingCost(I)\big)$$

This is a multi-objective trade space in practice, even when represented as one scalar objective.

Methodological Considerations

  • Align weather and soil-moisture timing with irrigation decision windows.
  • Validate coefficient assumptions ($K_c$, depletion limits) against local agronomy guidance.
  • Compare schedule alternatives under dry and wet scenarios before deployment.

Practical Interpretation Pitfalls

Common mistakes include over-trusting a single optimized schedule, ignoring delivery-system constraints, and treating modeled savings as guaranteed without field feedback loops.

Inputs

ArgumentTypeRequiredGeometry / Type ConstraintsDescription
demRasterYesMust be a readable raster.Elevation surface used to derive local slope and terrain penalty.
soil_moistureRasterNoMust be a readable raster normalized to [0, 1]. It is harmonized to the DEM grid if needed.Optional soil moisture context raster.

Parameters

ArgumentTypeRequiredDefaultDescription
profileStringNobalancedSupported values: fast, balanced, conservative. Changes terrain penalty and stress boost coefficients.
target_moistureFloatNo0.6Target moisture setpoint in [0, 1].
max_irrigation_mmFloatNo18.0Maximum irrigation depth in millimetres. Must be greater than 0.
sweep_specJSON objectNonullOptional sweep specification. When supplied, the workflow executes multi-run sweeps and emits sweep diagnostics.
output_prefixStringNoprecision_irrigationPrefix used to derive all output artifact names.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeWhat It Contains
Irrigation prescription raster (${prefix}_irrigation_prescription.tif)irrigation_prescriptionGeoTIFF rasterPer-cell irrigation depth in millimetres, clamped to [0, max_irrigation_mm].
Moisture stress risk raster (${prefix}_moisture_stress_risk.tif)moisture_stress_riskGeoTIFF rasterPer-cell stress-risk score in [0, 1].
VRI zones raster (${prefix}_vri_zones.tif)vri_zonesGeoTIFF rasterPer-cell zone codes 1, 2, or 3 for low, medium, and high prescription tiers.
Sweep run matrix (optional)run_matrix_summaryCSVPer-run matrix with parameter overrides and irrigation summary metrics.
Sweep sensitivity report (optional)sensitivity_reportJSONSweep summary including normalized span and stability_class.
Sweep sensitivity report (optional)sensitivity_report_htmlHTMLRendered sweep report.
Sweep stability map (optional)stability_mapGeoTIFFPer-cell sweep stability classes (3=high, 2=medium, 1=low).
Summary contract (${prefix}_summary.json)summaryJSONTop-level keys workflow, schema_version, generated_at_utc, schema_migration_notes, error_taxonomy, inputs, parameters, summary, output_semantics, confidence_contract, interpretation_warnings, and outputs.
Optional report (${prefix}_report.html)html_reportHTMLHTML rendering of the JSON summary.

Important summary keys

KeyMeaning
inputsContains dem and soil_moisture.
parametersContains profile, target_moisture, and max_irrigation_mm.
summary.valid_cellsNumber of non-nodata cells included in the totals.
summary.total_prescribed_mmTotal prescribed millimetres across valid cells.
summary.mean_prescribed_mmMean prescription depth across valid cells.
summary.high_stress_fractionFraction of valid cells with stress-risk score greater than or equal to 0.7.
output_semanticsMachine-readable semantic tags per primary output.
confidence_contractStandardized confidence metadata including method and low-confidence summary fields.
interpretation_warningsExplicit warning statements about interpretation limits and validation needs.
outputsContains irrigation_prescription, moisture_stress_risk, vri_zones, and summary.

Returned payload keys

The workflow returns these output keys:

  • irrigation_prescription
  • moisture_stress_risk
  • vri_zones
  • run_matrix_summary (with sweep_spec)
  • sensitivity_report (with sweep_spec)
  • sensitivity_report_html (with sweep_spec)
  • stability_map (with sweep_spec)
  • summary
  • html_report

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.precision_irrigation_optimization(
    dem="field_dem_5m.tif",
    soil_moisture="soil_moisture_normalized.tif",
    profile="balanced",
    target_moisture=0.62,
    max_irrigation_mm=20.0,
    output_prefix="pivot_block_a",
)

References

  • Allen, R. G., Pereira, L. S., Raes, D., & Smith, M. (1998). Crop evapotranspiration. FAO Irrigation and Drainage Paper 56.
  • Irmak, S., et al. (2012). Irrigation scheduling using soil moisture and ET-based approaches. Applied Engineering in Agriculture.

Parameter Interaction Notes

  • target_moisture directly changes the moisture deficit and usually has the largest effect on prescription depth.
  • profile changes both terrain penalty and stress boost, so it affects irrigation depth and stress risk at the same time.
  • max_irrigation_mm acts as both an output cap and the threshold basis for VRI zones 1, 2, and 3.
  • If soil_moisture is omitted, the outputs become heuristic and should be treated differently from sensor-informed runs.

QA and Acceptance Criteria

  1. Verify the example uses the runtime argument names exactly.
  2. Verify target_moisture is within [0, 1] and max_irrigation_mm > 0.
  3. Verify the summary JSON contains the documented keys.
  4. Verify the returned payload includes irrigation_prescription, moisture_stress_risk, vri_zones, summary, and html_report.
  5. Verify the VRI zone raster contains only 1, 2, 3, plus nodata.
  6. If soil_moisture is provided from another grid, verify harmonization was acceptable before operational deployment.

The workflow fails if dem cannot be read, if optional soil_moisture cannot be read, if harmonized soil_moisture still does not match DEM dimensions, if target_moisture falls outside [0, 1], if max_irrigation_mm <= 0, or if profile is unsupported.

Advanced Operational Guidance

  • Prefer supplying soil_moisture for execution-grade recommendations.
  • Compare summary.high_stress_fraction across scenarios before adopting a more aggressive target moisture.
  • Inspect field margins because edge cells are set to nodata where neighborhood slope cannot be computed.
  • Keep scenario prefixes unique since the workflow writes a family of files from one prefix.

Implementation Patterns

  • DEM-only baseline: generate a heuristic first-pass prescription.
  • Sensor-informed run: add soil_moisture and compare prescription totals and stress fraction.
  • Profile sensitivity run: compare fast, balanced, and conservative.
  • Delivery run: package the three rasters with the JSON summary and HTML report, and record final parameters.
  • precision_ag_yield_zone_intelligence
  • yield_data_conditioning_and_qa
  • in_season_crop_stress_intervention_planning

When To Use This Workflow

Use this workflow when you need a compact variable-rate irrigation package from terrain and optional moisture data, and when the goal is reproducible scenario comparison rather than a full agronomic or economic optimizer.

What this workflow helps you do:

  • Produce irrigation depth and stress-risk surfaces quickly.
  • Compare moisture targets and profile settings consistently.
  • Hand off a complete raster-plus-summary package for operations review.

Results Delivery Checklist

  1. Deliver the three rasters, the JSON summary, and the HTML report together.
  2. Record whether soil_moisture was supplied or omitted.
  3. Record the final profile, target_moisture, and max_irrigation_mm values.
  4. Review edge-cell nodata behavior before downstream execution use.
  5. Compare summary.high_stress_fraction across scenarios before finalizing the recommendation.

Common Questions

Q: Why can high_stress_fraction remain high even after increasing max_irrigation_mm?
A: Because stress is driven by moisture deficit and terrain penalty. Raising the cap does not automatically remove steep-slope stress patterns.

Q: What is the most common misread of the VRI zone raster?
A: Treating zones 1, 2, and 3 as fixed agronomic classes. They are relative prescription tiers tied to the configured max_irrigation_mm.

Q: Which settings matter most for scenario sensitivity?
A: target_moisture and profile. One changes the deficit target and the other changes terrain moderation and stress amplification.

Q: When should teams trust a DEM-only run?
A: DEM-only runs are useful for exploratory planning or gap filling. Operations should prefer a run with current soil moisture when prescriptions will drive execution.

Field Trafficability and Operation Planning

Purpose

Field Trafficability and Operation Planning assesses terrain and soil suitability for machinery operations, identifies at-risk compaction zones, and recommends equipment selection and harvest scheduling to minimize soil damage while maintaining timeliness.

Typical Questions This Tool Helps Answer

  • Which zones of this field are currently safe for heavy machinery operations and which are at high risk for compaction or rutting given current soil moisture?
  • Should harvest or tillage operations be delayed based on current field conditions, and if so, which areas should be re-evaluated first?
  • What fraction of this field is currently in operation class 3 or 4 indicating elevated compaction risk, and where are those high-caution zones most concentrated?

Background

Precision agriculture workflows model spatial heterogeneity in soil, crop condition, trafficability, or yield using a combination of remote sensing, terrain context, and machine telemetry. Agronomic interpretation is strongest when temporal conditions and management history are considered alongside the map outputs.

Users should treat these models as decision-support surfaces for scouting, sampling, and intervention targeting. Confidence, QA flags, and scenario sensitivity should guide where to act first.

Field trafficability modeling estimates operational passability from terrain, moisture, and soil-condition proxies. Decision quality depends on matching temporal input conditions to actual machine operation windows.

Methodological Considerations

  • Align input timing with agronomic windows; stale observations reduce actionability even when model quality is high.
  • Use QA/confidence indicators to drive scouting and sampling intensity.
  • Reassess thresholds across season stages so intervention logic tracks crop development dynamics.

Practical Interpretation Pitfalls

High map contrast is not always agronomic significance; validate intervention zones with field observations before broad prescription changes.

Inputs

ParameterTypeRequiredDescription
demRasterYesDigital elevation model (defines slope; influences runoff and soil drainage)
soil_moistureRasterYesSoil moisture saturation raster normalized to [0,1].
rainfall_forecastRasterNoOptional rainfall-risk raster normalized to [0,1].

Contract Migration Note

This tool's audited runtime contract uses raster risk inputs (soil_moisture, optional rainfall_forecast) rather than JSON-style machinery/weather payloads.

Parameters

  • output_prefix (required): output file prefix.

Outputs

Output artifact keys below are runtime outputs, not input parameters.

ArtifactRuntime Output KeyTypeDescription
Trafficability score rastertrafficability_scoreRasterContinuous score in [0,1] (higher is better operability).
Operation class rasteroperation_classRasterClass map (1 best to 4 highest caution).
Summary contractsummaryJSONStatus, warnings, and key metrics.
Optional reporthtml_reportHTMLOptional report for stakeholder review.

Summary contract also includes:

  • output_semantics
  • confidence_contract
  • interpretation_warnings

Practical class guidance

  • Class 1: normal operations generally acceptable.
  • Class 2: moderate caution advised.
  • Class 3: high caution; reduce load or defer.
  • Class 4: avoid heavy operations unless verified in-field.

Example

import whitebox_workflows as wbw

env = wbw.WbEnvironment()
env.field_trafficability_and_operation_planning(
        dem="dem_field_10m.tif",
        soil_moisture="soil_moisture_20240930.tif",
        rainfall_forecast="rainfall_risk_7day.tif",
        output_prefix="outputs/field_trafficability"
)

References

  • Burt, E. C., & Bailey, A. C. (1982). "Prediction of Soil Compaction Due to Tillage Equipment." Trans. ASAE 25(4), 917–921.

Parameter Interaction Notes

Outcomes are most sensitive to moisture and slope conditions.

  • Wet soils can reduce operability even on flat terrain.
  • Steep slopes can reduce operability even when soils are relatively dry.
  • Forecast rain helps pre-empt risk by lowering scores before conditions worsen.

QA and Acceptance Criteria

Use a staged acceptance approach for Field Trafficability and Operation Planning:

  1. Confirm DEM and moisture rasters are valid and current.
  2. Confirm rainfall raster (if provided) aligns to field context.
  3. Validate operation classes against known wet/steep areas.
  4. Review status and warning messages in summary output.

Recommended acceptance checks:

  • Summary workflow ID is correct.
  • Class values are constrained to 1 through 4.
  • Warnings are reviewed before dispatching heavy equipment.

Advanced Operational Guidance

For production deployment of Field Trafficability and Operation Planning:

  • Re-run after major rain events before committing equipment routes.
  • Use class 3-4 zones to prioritize field checks.
  • Keep summary JSON with shift/day records for auditability.

Implementation Patterns

Common implementation patterns with Field Trafficability and Operation Planning:

  • Morning pre-operation run.
  • Post-rain reassessment run.
  • Weekly trend comparison run.

Use Field Trafficability and Operation Planning together with upstream conditioning and downstream validation tools in the same bundle to ensure end-to-end consistency and stronger decision confidence.

When To Use This Workflow

Use this workflow when teams need clear go/no-go guidance for machinery movement that balances operational urgency with soil protection.

Results Delivery Checklist

  1. Provide both score and class outputs.
  2. Include summary JSON and report HTML.
  3. Flag any review warnings in the delivery notes.
  4. State data date/time for moisture and rainfall inputs.
  5. Document follow-up field checks for high-risk zones.

Common Questions

Q: Which output should operators look at first?
A: Start with operation_class for quick decisioning, then use trafficability_score for finer routing detail.

Q: Why are some areas class 4 even without recent rain?
A: High slope or saturated baseline moisture can independently drive very low operability.

Q: Can we run this without rainfall forecast data?
A: Yes. Rainfall is optional; the workflow still uses DEM and soil moisture.

Q: Why did today’s map worsen compared to yesterday?
A: Updated moisture and rainfall conditions can rapidly shift scores across threshold classes.

Q: What does a review status mean?
A: Too much of the field is in low trafficability (<=0.35), so heavy operations should be delayed or restricted.

Q: Why do classes change sharply at field boundaries?
A: Boundaries often contain mixed slope, moisture, and nodata transitions; verify with field checks.

Q: Is high mean trafficability enough to proceed across the whole field?
A: No. Localized high-risk pockets can still exist and should be respected.

Q: Can this replace agronomist input?
A: It supports and prioritizes decisions but should be combined with agronomic and operational judgment.

Q: How often should we rerun during harvest windows?
A: Typically daily, and again after meaningful precipitation or irrigation events.

Soil Landscape Classification

What This Tool Does

Soil Landscape Classification classifies a DEM into Pennock-inspired landform units using multiscale terrain analysis. It returns a landform raster, an optional polygon layer, a summary JSON, and an HTML report.

Typical Questions This Tool Helps Answer

  • Which landform positions dominate this field (summit, backslope, footslope, depression), and how do their typical erosion, leaching, and moisture characteristics inform site-specific management decisions?
  • Which terrain positions show convergent or depressional characteristics that signal moisture accumulation or elevated compaction vulnerability?
  • Are the predicted soil landscape classes consistent with existing field observations and available soil survey records?

When To Use

  • Soil survey preparation
  • Terrain-based land management planning
  • Identifying convergent and depositional terrain positions
  • Building a simple landform map from a DEM

What You Need

InputDescription
DEM rasterThe elevation raster to classify.

Key Settings

SettingDefaultGuidance
flat_slope_threshold3.0Higher values make more terrain count as flat.
fine_scale2.0Smaller values preserve more local terrain detail.
coarse_scale8.0Larger values emphasize broader landform patterns.
pedology_regionnoneUse a regional calibration pack when the landscape matches a supported setting.

What You Get

DeliverableFormatDescription
landform_unitsRasterLandform class map.
multiscale_signatureRasterThree-band diagnostic raster.
landform_polygonsVectorOptional polygon layer.
summaryJSONRun statistics and interpretation guidance.
html_reportHTMLHuman-readable report.

The summary also includes dominant_class_code, dominant_class_name, and class_distribution entries with confidence ranges for each class.

It also includes:

  • output_semantics
  • confidence_contract
  • interpretation_warnings

Runtime Output Keys

result.outputs["landform_units"]
result.outputs["multiscale_signature"]
result.outputs["landform_polygons"]
result.outputs["summary"]
result.outputs["html_report"]
result.outputs["path"]

Common Questions

Q: Which output should agronomy teams review first? A: Start with summary.dominant_class_name plus class confidence ranges in summary.class_distribution, then verify map patterns in landform_units.

Q: What is a common interpretation mistake? A: Treating class boundaries as hard soil boundaries; transition zones with low confidence need field checks.

Q: Which settings most change class distribution? A: profile_curvature_threshold, plan_curvature_threshold, fine_scale, and coarse_scale usually produce the largest redistribution.

Q: How should teams use these outputs operationally? A: Use landform_polygons to plan sampling zones and target lower-confidence areas for pedology verification.

Results Delivery Checklist

  • summary["valid_cells"] is non-zero
  • summary["dominant_class_name"] matches the expected terrain setting
  • class_distribution looks plausible for the study area
  • If requested, landform_polygons was created and opens correctly in GIS software
  • The report was reviewed before delivery

Operational Notes

  • Curvature thresholds and smoothing scales are the most sensitive controls; keep them fixed when comparing fields or seasons.
  • Use confidence ranges from class_distribution to prioritize field checks in transitional terrain.
  • Treat mapped class boundaries as guidance for sampling and management zoning, not hard pedologic boundaries.
  • yield_data_conditioning_and_qa
  • precision_ag_yield_zone_intelligence
  • precision_irrigation_optimization

References

  • Runtime implementation: wbtools_pro/src/tools/geomorphometry/soil_landscape_classification.rs
  • Precision Agriculture Intelligence bundle overview: manual/pro-tools-customer/src/precision_agriculture/overview.md

When To Use This Workflow

Use Soil Landscape Classification when you need terrain-informed soil-position units for sampling design and variable-rate agronomic planning.