Pro Tools Technical Reference
Overview
This manual provides customer-facing technical documentation for Whitebox Workflows Pro tools, organized across six functional bundles:
- Earth Observation and SAR Operations — Remote sensing analysis, SAR processing, and multi-sensor integration
- Environmental Risk and Compliance — Risk assessment, environmental monitoring, and compliance workflows
- Terrain and Infrastructure Siting — Site suitability analysis for renewable energy, infrastructure, and utility planning
- LiDAR and Forest Analytics — Point cloud analysis, terrain products, and forestry intelligence
- Precision Agriculture Intelligence — Soil-crop-climate integration, yield analysis, and field operations
- 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.
Recommended First Steps
- Confirm which bundles and tools your organization has licensed.
- Open the relevant bundle overview chapter in this manual.
- Start with the first workflow listed in that bundle order.
- Run the tool once on a small pilot area before full production use.
- Validate outputs using the chapter's validation and troubleshooting sections.
Minimal First-Run Workflow
- Identify your tool chapter in the table of contents.
- Read sections in this order:
- Purpose
- Inputs
- Parameters
- Outputs
- Example
- Copy the example and adapt file paths and parameters to your dataset.
- Run on pilot data.
- 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:
- Tool name
- Data type and source
- Parameter set used
- Error message or unexpected behavior
- Sample output screenshot or summary
Next Steps
After your first successful run:
- Save your parameters as a standard profile.
- Define acceptance criteria for your team.
- Repeat on full project extents.
- 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
- Delineate potential wetland areas using topography, imagery, soils
- Classify by hydrogeomorphic type (Wetland Hydrogeomorphic Classification)
- Assess ecological function and vulnerability
- Report for regulatory compliance
Landslide Risk Assessment
- Prepare terrain (DEM, slope, aspect, curvature)
- Compile geological/soil data (lithology, depth, cohesion)
- Calculate susceptibility index (Landslide Susceptibility Assessment)
- Prioritize mitigation areas
- Monitor post-mitigation recovery
Carbon Verification Workflow
- Estimate baseline carbon stock (forest structure, soil)
- Implement restoration or conservation practice
- Monitor post-intervention carbon outcomes (repeat imagery, field surveys)
- Audit results against claims (Carbon Verification Audit)
- Generate verification report for carbon market or compliance program
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- Carbon Verification Audit
- Wildfire Fuel Risk Analysis
- Landslide Susceptibility Assessment
- Mine Reclamation Compliance Tracker
- Urban Expansion Impact Assessment
- Wetland Hydrogeomorphic Classification
- 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
Recommended Results Package
For customer delivery, this bundle performs best when packaged as a compliance-ready workflow set rather than isolated analyses.
Recommended packaging:
- Baseline condition map package
- Risk/compliance classification package
- Validation and uncertainty appendix
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| baseline_bundle | Raster (multiband) | Yes | Baseline scene bundle. |
| baseline_red_band_index | Integer | No | Red band index in baseline bundle; default 0. |
| baseline_nir_band_index | Integer | No | NIR band index in baseline bundle; default 1. |
| current_bundle | Raster (multiband) | Yes | Current scene bundle. |
| current_red_band_index | Integer | No | Red band index in current bundle; default 0. |
| current_nir_band_index | Integer | No | NIR band index in current bundle; default 1. |
| biomass_proxy | Raster | No | Optional 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-DDformat. - 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Baseline NDVI raster | ndvi_baseline | Raster | Baseline NDVI layer. |
| Current NDVI raster | ndvi_current | Raster | Current NDVI layer. |
| NDVI delta raster | ndvi_delta | Raster | NDVI change layer. |
| Carbon proxy raster | carbon_proxy | Raster | Carbon proxy change layer (biome-scaled, optional biomass blended). |
| Change confidence raster | change_confidence | Raster | Confidence in detected change signal. |
| Uncertainty raster | uncertainty | Raster | Pixel-level uncertainty estimate. |
| Verification zones vector | verification_zones | Vector (GPKG) | Aggregated polygons with gain/loss/neutral class and summary metrics. |
| Audit contract JSON | audit_contract | JSON | Full run contract including MRV metadata and output inventory. |
| Compliance evidence packet | compliance_evidence_packet | JSON | Submission-oriented compliance packet for regulator/auditor review. |
| Regulator-ready table | regulator_ready_table | CSV | Flat table with key metrics and MRV context for filing workflows. |
| Optional report | html_report | HTML | Optional 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_semanticsconfidence_contractinterpretation_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:
- Validate bundle bands and index mappings.
- Validate optional dates and MRV template selection.
- Confirm output artifacts are present and consistent with contract metadata.
- Review gain/loss/uncertainty outputs with domain experts.
Recommended acceptance checks:
audit_contract.workflowis 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.
Related Tools
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:
- Confirm AOI, CRS, and temporal scope match project statement of work.
- Verify assumptions and threshold values are documented in the run metadata.
- Export both primary outputs and summary tables for non-technical stakeholders.
- Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
- 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
| Input | Description |
|---|---|
| Optical multiband raster | Must include red and NIR bands; SWIR is optional. |
| Optional structure raster | Biomass/canopy proxy for ladder and canopy fuel refinement. |
| Optional terrain rasters | Slope and aspect for spread amplification effects. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
output_prefix | required | Prefix used for all emitted artifacts. |
profile | balanced | Choose conservative, balanced, or aggressive sensitivity. |
fuel_model | none | Select regional preset when appropriate. |
zone_block_cells | 20 | Controls risk-zone aggregation scale. |
swir_band_index | unset | When 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
| Deliverable | Format | Description |
|---|---|---|
moisture_index | GeoTIFF | Moisture signal raster. |
fuel_load_class | GeoTIFF | Fuel class raster (1 sparse, 2 surface, 3 ladder, 4 canopy). |
ladder_fuel_continuity | GeoTIFF | Vertical continuity index raster. |
risk_matrix | GeoTIFF | Per-cell wildfire risk score. |
risk_zones | GeoPackage | Aggregated planning zones with mean/max risk and dominant fuel. |
summary | JSON | Metrics, configuration, weather factors, and output references. |
html_report | HTML | Optional 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_indexbiomass_proxy,slope,aspectfuel_model,profile,zone_block_cellsoutput_prefix(required)air_temperature_c,relative_humidity_pct,wind_speed_kmh
Parameters
Defaults and behavior:
profiledefaults tobalanced.fuel_modeldefaults tonone.zone_block_cellsdefaults to20.swir_band_indexis optional; when absent, the workflow uses an NDWI-style moisture proxy.
Outputs
Primary runtime outputs:
moisture_indexfuel_load_classladder_fuel_continuityrisk_matrixrisk_zonessummaryhtml_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.
summaryincludes risk fractions and weather/modulation context fields.risk_zonescontains 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.
Related Tools
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
| Parameter | Type | Required | Description |
|---|---|---|---|
| dem | Raster path | Yes | Digital elevation model. |
| rainfall_intensity | Raster path | No | Optional rainfall-intensity proxy normalized to [0,1]. |
| profile | Enum | No | fast, balanced, conservative (default balanced). |
| factor_contribution_mode | Enum | No | none, basic, detailed (default basic). |
| susceptibility_threshold | Float | No | High-risk threshold in [0,1] (default 0.65). |
| max_zone_features | Integer | No | Max number of risk-zone polygons (default 5000). |
| output_prefix | String | No | Output 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Susceptibility raster | susceptibility | GeoTIFF | Continuous susceptibility score (0-1). |
| Trigger-pressure raster | trigger_pressure | GeoTIFF | Trigger-pressure surface (0-1). |
| Confidence raster | confidence | GeoTIFF | Agreement confidence (0-1). |
| Risk zones vector | risk_zones | GeoPackage | High-risk polygons with class labels. |
| Summary contract | summary | JSON | Status metrics, explainability, and output references. |
| Optional report | html_report | HTML | Optional 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_IDSUSCCONFCLASS
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, andinterpretation_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:
- Confirm DEM and optional rainfall inputs are valid.
- Confirm expected rasters, vector zones, and summary outputs are generated.
- Validate susceptibility threshold and resulting high-risk fractions.
- 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
basicmode for internal operations anddetailedmode 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.
Related Tools
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:
- Confirm AOI, CRS, and temporal scope match project statement of work.
- Verify assumptions and threshold values are documented in the run metadata.
- Export both primary outputs and summary tables for non-technical stakeholders.
- Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| baseline_bundle | Multiband raster | Yes | Baseline/pre-mining bundle. |
| current_bundle | Multiband raster | Yes | Current monitoring-date bundle. |
| baseline_red_band_index | Integer | No | Baseline red band index (default 0). |
| baseline_nir_band_index | Integer | No | Baseline NIR band index (default 1). |
| current_red_band_index | Integer | No | Current red band index (default 0). |
| current_nir_band_index | Integer | No | Current NIR band index (default 1). |
| slope | Raster | No | Optional slope raster (degrees). |
| reclamation_target_ndvi | Float | No | Target NDVI threshold (default 0.35, may be overridden by jurisdiction). |
| slope_stability_max_deg | Float | No | Max stable slope threshold in degrees (default 30, may be overridden by jurisdiction). |
| jurisdiction | Enum | No | Compliance template (us_federal_mtbs, us_california_mining, us_pennsylvania_coal, aus_western_australia, canada_bc_mines, south_africa_dmre, none). |
| monitoring_epoch | Integer | No | Optional epoch label for phase tracking. |
| site_name | String | No | Optional site/permit identifier. |
| has_hydrology_evidence | Boolean | No | Indicates hydraulic stability evidence is attached (default false). |
| has_soil_ph_evidence | Boolean | No | Indicates soil pH evidence is attached (default false). |
| has_perennial_vegetation_evidence | Boolean | No | Indicates perennial vegetation evidence is attached (default false). |
| report_interval_months | Integer | No | Reported monitoring cadence (1-120 months) used for diagnostics. |
| zone_block_cells | Integer | No | Zone aggregation block size (default 20). |
| output_prefix | String | Yes | Output 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Baseline NDVI raster | ndvi_baseline | GeoTIFF | Baseline NDVI layer. |
| Current NDVI raster | ndvi_current | GeoTIFF | Current NDVI layer. |
| Vegetation recovery raster | vegetation_recovery | GeoTIFF | NDVI change layer. |
| Reclamation progress raster | reclamation_progress | GeoTIFF | Progress-to-target layer [0,1]. |
| Compliance zones vector | compliance_zones | GeoPackage | Block zones with compliance status fields. |
| Compliance contract | compliance_contract | JSON | Milestones, grades, jurisdiction context, zone rationale, outputs, and timings. |
| Validation diagnostics | validation_diagnostics | JSON | Completeness diagnostics for required evidence fields by jurisdiction template. |
| Summary alias | summary | JSON | Alias key to the same contract JSON file as compliance_contract. |
| Optional report | html_report | HTML | Optional 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:
- Confirm bundle inputs and band indices are valid.
- Confirm output rasters and compliance contract are generated.
- Verify milestone statuses and overall grade against project expectations.
- 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_epochconsistently 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.
Related Tools
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:
- Confirm AOI, CRS, and temporal scope match project statement of work.
- Verify assumptions and threshold values are documented in the run metadata.
- Export both primary outputs and summary tables for non-technical stakeholders.
- Include at least one validation artifact (field check, independent layer comparison, or sensitivity run).
- 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
| Input | Description |
|---|---|
| Baseline urban raster | Existing urban footprint, binary or fractional. |
| Scenario urban raster | Future or proposed urban footprint, binary or fractional. |
| Stream network | Stream polyline layer to score against the impact surface. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
output_prefix | required | Prefix used for all emitted artifacts. |
scenario_template | balanced_growth | Use compact_infill, corridor_expansion, or conservation_priority when those planning frames better match the project. |
habitat_sensitivity | null | Optional sensitivity layer that increases habitat-loss severity in sensitive areas. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
impact_severity | Raster | Impact severity in the range 0 to 1. |
affected_streams | Vector | Stream segments scored with mean/max impact and a class label. |
habitat_loss | Raster | Habitat-loss surface. |
summary | JSON | New urban area, affected-stream counts, and scenario metadata. |
html_report | HTML | Human-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_streamswas reviewed in GIS software - The chosen scenario template matches the planning narrative
-
summary["new_urban_area_ha"]andsummary["high_impact_streams"]were checked before delivery -
summary["output_semantics"],summary["confidence_contract"], andsummary["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_urbanscenario_urbanstreams
Optional runtime arguments:
habitat_sensitivityscenario_templateoutput_prefix(required)
Parameters
Defaults and behavior:
scenario_templatedefaults tobalanced_growth.output_prefixis required.habitat_sensitivityis optional; when supplied, habitat-loss concentration is weighted by sensitivity.
Outputs
Primary runtime outputs:
impact_severityaffected_streamshabitat_losssummaryhtml_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.
summaryincludesnew_urban_area_ha,high_impact_streams, and interpretation blocks.affected_streamsschema 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.
Related Tools
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
| Input | Description |
|---|---|
| DEM raster | Elevation surface for terrain-based HGM classification. |
| Wetland mask raster | Wetland candidate cells (>0 are treated as wetland). |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
wetland_region | none | Choose a regional calibration pack only when study conditions match the region profile. |
max_polygon_features | 10000 | Maximum number of polygon features emitted. |
output_prefix | required | Prefix 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
| Deliverable | Format | Description |
|---|---|---|
hgm_class | GeoTIFF | HGM class raster (0 Nonwetland, 1 Depressional, 2 Slope, 3 Riverine). |
wetland_polygons | GeoPackage | Polygonized wetland regions with class and confidence fields. |
confidence | GeoTIFF | Confidence raster for the classification output. |
summary | JSON | Summary metrics, interpretation text, and output references. |
html_report | HTML | Optional 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:
demwetland_mask
Optional runtime arguments:
max_polygon_featureswetland_regionoutput_prefix(required)
Parameters
Defaults and behavior:
max_polygon_featuresdefaults to10000.wetland_regiondefaults tononeand controls regional calibration thresholds.output_prefixis required.
Outputs
Primary runtime outputs:
hgm_classwetland_polygonsconfidencesummaryhtml_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_classandconfidencerasters align in grid/extent.summary.class_distributionand 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.
Related Tools
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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| dem | Raster | Yes | Must be a readable DEM raster. | Terrain source used to derive erosion pressure and corridor confidence. |
| streams | Vector | Yes | Must be a readable line network. LineString and MultiLineString geometries are supported. | Stream network to classify and rank. |
Parameters
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| profile | String | No | balanced | Erosion-sensitivity preset: fast, balanced, or conservative. |
| restoration_priority_mode | String | No | health_score_only | Ranking mode: health_score_only, cost_weighted, or ecological_gradient. |
| output_prefix | String | No | river_corridor_health | Output 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.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
Erosion pressure raster (${prefix}_erosion_pressure.tif) | erosion_pressure | GeoTIFF raster | DEM-derived erosion pressure in [0, 1]. |
Corridor confidence raster (${prefix}_corridor_confidence.tif) | corridor_confidence | GeoTIFF raster | Confidence raster in [0, 1]. |
Stream health score vector (${prefix}_stream_health_score.gpkg) | stream_health_score | GeoPackage line layer | Fields: STREAM_ID, HEALTH, EROS_P90, CLASS. |
Restoration zones vector (${prefix}_restoration_zones.gpkg) | restoration_zones | GeoPackage line layer | Fields: STREAM_ID, HEALTH, ACTION, PRIORITY_IDX. |
Summary contract (${prefix}_summary.json) | summary | JSON | Summary contract with inputs, parameters, counts, interpretation blocks, and output paths. |
Optional report (${prefix}_report.html) | html_report | HTML | HTML rendering of the summary JSON. |
Health classes and actions
| Rule | Result |
|---|---|
HEALTH < 0.35 | CLASS=Critical, ACTION=Immediate stabilization |
0.35 <= HEALTH < 0.6 | CLASS=At-Risk, ACTION=Revegetate and monitor |
HEALTH >= 0.6 | CLASS=Stable, no restoration feature written |
Important summary fields
| Key | Meaning |
|---|---|
summary.streams_scored | Number of streams successfully scored. |
summary.restoration_streams | Number of non-stable streams written to restoration outputs. |
summary.mean_stream_health | Mean health score across scored streams. |
interpretation.crs_harmonization | Reports DEM EPSG, source stream EPSG, and whether reprojection occurred. |
interpretation.restoration_priority_index | Reports the ranking mode and aggregate priority statistics. |
interpretation.budget_scenarios | Reports tight, moderate, and extended budget stream counts and fractions. |
interpretation.watershed_rollup_summary | Reports critical, at-risk, stable counts and urgency classification. |
output_semantics | Declares machine-readable output intent and certification scope for each output key. |
confidence_contract | Declares confidence metric semantics, threshold, and low-confidence fraction for governance QA. |
interpretation_warnings | Lists plain-language warnings on proxy limits and cross-run comparison constraints. |
outputs | Reports paths to rasters, vectors, and the summary file. |
Returned payload keys
The workflow returns these output keys:
erosion_pressurecorridor_confidencestream_health_scorerestoration_zonessummaryhtml_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
profilechanges the erosion-pressure raster and therefore can shift stream classes.restoration_priority_modechanges the ordering of restoration candidates, not whether a stream is stable or unstable.output_prefixcontrols one tightly linked delivery package of rasters, vectors, JSON, and HTML.
QA and Acceptance Criteria
- Verify only
demandstreamsare documented as required inputs. - Verify the example uses the real runtime argument names.
- Verify the GeoPackage field names match the documented schema.
- Verify the summary JSON contains
inputs,parameters,summary,interpretation,output_semantics,confidence_contract,interpretation_warnings, andoutputs. - Verify the returned payload contains the documented output keys.
- 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.gpkgas the primary classification layer andrestoration_zones.gpkgas the intervention shortlist. - Review
EROS_P90together withHEALTHto 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.
Related Tools
terrain_constraint_and_conflict_analysisutility_corridor_encroachment_intelligencewetland_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
- Deliver both rasters, both GeoPackages, the summary JSON, and the HTML report together.
- Record the selected
profileandrestoration_priority_mode. - Review the CRS harmonization block before downstream use.
- Confirm class counts and urgency classification in the summary.
- 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
- Map critical facilities (schools, hospitals, high-density population)
- Define coverage zones (e.g., response time ≤ 8 min)
- Identify coverage gaps
- Use Network Readiness and Diagnostics to verify path quality
- Optimize Emergency Scenario Routing for rapid deployment
Utility Asset Management
- Create linear route network (roads, utility corridors)
- Establish linear referencing system (measure from route start)
- Inventory assets (poles, transformers, valves) with route/measure location
- Use Route Event Governance to track asset lifecycle (installation, maintenance, replacement)
Market Penetration Analysis
- Identify customer base and competitor locations
- Compute service areas and accessibility (Market Access and Site Planning)
- Identify underserved areas and expansion opportunities
- Optimize distribution network
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- Fleet Routing and Dispatch Optimizer
- Network Readiness and Diagnostics
- Service Area Planning and Coverage Optimization
- Market Access and Site Planning
- Emergency Accessibility Scenario Planning
- Route Event Governance
- Utility Corridor Access Planning
- 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
Recommended Results Package
For customer adoption, this bundle should be delivered as a KPI-driven operational improvement package.
Recommended package components:
- Baseline network performance dashboard
- Optimized scenario outputs with assumptions
- Stress-test scenarios (disruption, demand surge, resource loss)
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | Vector (Line or MultiLine) | Yes | Street/transit network used to build routing graph |
| depots | Vector (Point or MultiPoint) | Yes | Depot/warehouse features used as vehicle origins |
| stops | Vector (Point or MultiPoint) | Yes | Demand/service stop features |
| vehicles_csv | CSV | Yes | Vehicle specification table (6 required columns) |
| restrictions | CSV | No | Optional 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
depotsattribute lookup priority for depot id:depot_id,DEPOT_ID,id,ID.stopsattribute lookup priority for stop id:stop_id,STOP_ID,id,ID.stopsdemand field lookup:demand,DEMAND(default when missing:1.0).stopsservice 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_idon row 1 to be auto-detected as header. capacity,available_time_minutes,cost_per_minute, andcost_per_kmmust 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) default1.0closed(alias:is_closed) defaultfalse
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
| Parameter | Type | Default | Notes |
|---|---|---|---|
| objective | Enum | minimize_distance | One of: minimize_distance, minimize_time, minimize_cost, balanced |
| edge_cost_field | String | — | Optional 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_field | String | — | Optional line field marking one-way digitized edges; accepts FT/TF/B codes and legacy boolean values. |
| network_speed_kmph | Number | 80.0 | Network 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_report | String path | Not set | Optional HTML summary report output |
| routes_output | String path | None (required) | Output vector for routes |
| assignment_csv_output | String path | None (required) | Output CSV for stop assignments |
| route_kpis_csv_output | String path | None (required) | Output CSV for route/fleet KPIs |
| exceptions_csv_output | String path | None (required) | Output CSV for infeasible stops |
objective
minimize_distance: fuel and mileage focusminimize_time: SLA/response-time focusminimize_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 aFLEET_TOTALsummary 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Routes vector | routes | Vector (LineString) | Route geometry per vehicle with route-level attributes (written to routes_output path). |
| Assignment CSV | assignment_csv | CSV | Stop-to-route assignment timeline (written to assignment_csv_output path). |
| Route KPIs CSV | route_kpis_csv | CSV | Per-route and fleet-level KPIs (written to route_kpis_csv_output path). |
| Exceptions CSV | exceptions_csv | CSV | Stops that could not be assigned and reasons (written to exceptions_csv_output path). |
| Objective used | objective | String | Objective used in optimization run. |
| Route count | routes_count | Integer | Number of generated routes. |
| Stops assigned | stops_assigned | Integer | Number of assigned stops. |
| Stops failed | stops_failed | Integer | Number of unassigned stops. |
| Status flag | status | String | Run status string. |
| Summary payload | summary | JSON (result payload) | Run counts and output locations. |
| Optional report | html_report | String path | Returned only when html_report parameter is supplied. |
Output File Schemas
routes_output attributes:
ROUTE_IDVEHICLE_IDDEPOT_IDSTOP_COUNTDIST_KMTIME_MINCOST
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_TOTALandroute_id=FLEET_TOTAL.
exceptions_csv_output columns:
stop_id,reason
Common reason values:
demand_exceeds_max_vehicle_capacityno_feasible_route
Result Payload Keys
In addition to output files, the run result contains keys for orchestration and auditing:
statusroutes_countstops_assignedstops_failedobjectiveroutesassignment_csvroute_kpis_csvexceptions_csvsummaryhtml_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
- Run baseline scenario with historical dispatch data
- Compare against known outcomes (distance, overtime, late stops)
- Validate stop sequence plausibility with dispatch team
Sensitivity Testing
- Vary demand by +/-10%
- Remove one vehicle and compare service impact
- Tighten time windows and inspect infeasibility growth
Field Validation
- Pilot with one depot/day
- Capture driver deviations and ground truth constraints
- Feed corrections back into network and timing assumptions
Troubleshooting
| Symptom | Likely Cause | Corrective Action |
|---|---|---|
| Many late arrivals | Time windows too strict or travel times underestimated | Recalibrate edge impedance and service duration |
| High unassigned-stop count | Capacity/time budgets are insufficient for demand | Increase fleet capacity, increase available time, or split workload by depot |
| Long detours | Network gaps or turn restrictions missing | Repair topology; include turn penalties and restrictions |
| Unexpectedly high route cost | Cost coefficients or objective selection mismatch operations policy | Re-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
Related Tools
network_readiness_and_diagnostics_intelligenceservice_area_planning_and_coverage_optimizationemergency_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.
objectiveand vehicle cost coefficients interact strongly: -minimize_costonly behaves as expected whencost_per_minuteandcost_per_kmare calibrated to real economics. -balancedcan reduce extreme route shapes but may not minimize any single KPI.available_time_minutesandservice_time_minutesjointly control assignment feasibility; high service durations can dominate travel-time improvements.- Restriction closures (
closed=true) can rapidly increase infeasibility; inspectexceptions_csv_outputafter each closure scenario.
QA and Acceptance Criteria
Use a staged acceptance approach for Fleet Routing and Dispatch Optimizer:
- Input integrity: validate projected CRS, network connectivity, depot-stop coverage, and CSV schema correctness.
- Method validity: run a pilot dispatch day and compare route order against dispatch-team expectation.
- Output plausibility: verify route loops return to depot and KPI magnitudes are operationally realistic.
- Reproducibility: rerun with identical inputs and confirm stable assignment/KPI outputs.
Recommended acceptance checks:
- Every output artifact exists at the requested path.
assignment_csv_outputrows are consistent with route stop counts.route_kpis_csv_outputcontains the finalFLEET_TOTALrow.exceptions_csv_outputreasons 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,
.gpkgfor enterprise geodatabases,.geojsonfor interoperability). - Use scenario-specific
restrictionsfiles 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.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Confirm objective function matches business KPI priorities.
- Document constraints (capacity, time windows, exclusions) in deliverable notes.
- Provide baseline-vs-optimized comparison metrics.
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | Vector (LineString or MultiLineString) | Yes | Input network layer to audit |
Input Requirements
networkmust contain line geometries (LineStringorMultiLineString).- If CRS is known, projected CRS is required for reliable geometric diagnostics.
- Networks with no usable vertices fail fast.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| qa_report | String path | Yes | CSV output path for findings summary |
| diagnostics_layer | String path | Yes | Vector output path for flagged point diagnostics |
| readiness_score | String path | Yes | JSON output path for score and gate metrics |
| html_report | String path | No | Optional HTML summary report output |
Output Path Behavior
diagnostics_layerformat is inferred from file extension.- If extension cannot be resolved, writer falls back to GeoJSON.
- Parent directory for
diagnostics_layeris created automatically if needed.
Outputs
| Output | Type | Description |
|---|---|---|
| qa_report | CSV | Severity-scored findings summary |
| diagnostics_layer | Vector (Point) | Node/edge diagnostic flags rendered as point features |
| readiness_score | JSON | Scorecard, penalties, pass/fail gate, and metadata |
| html_report | HTML | Optional executive summary report |
Runtime output keys (returned in ToolRunResult.outputs):
| Key | Points to |
|---|---|
qa_report | QA findings CSV |
diagnostics_layer | Diagnostic point vector file |
readiness_score | Readiness scorecard JSON |
summary | Alias → same path as qa_report |
html_report | Optional 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_TYPESEVERITYMESSAGE
Common CHECK_TYPE values:
dead_enddisconnected_componentdisconnected_edge
Readiness JSON Schema (readiness_score)
Top-level keys:
overall_scoreconnectivity_scorecost_consistency_scorepass_fail_gatefragmentation_penaltyunreachability_penaltycost_variance_zscoreassessment_timestampschema_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 >= 80fragmentation_penalty < 0.1unreachability_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_zscoreand depresscost_consistency_score.
QA and Acceptance Criteria
Use a staged acceptance approach for Network Readiness and Diagnostics:
- Input integrity: validate projected CRS, line geometry type, and non-empty network extent.
- Method validity: verify expected dead-end and disconnected-area diagnostics against known weak zones.
- Output plausibility: confirm diagnostics layer aligns spatially with topology defects.
- Reproducibility: rerun with identical inputs and confirm stable findings and score outputs.
Recommended acceptance checks:
qa_reportexists and includes header row plus expected check types.diagnostics_layercontains features when known defects are present.readiness_scoreincludes 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_gatewhere 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.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Verify readiness scoring and pass/fail gate against agreed thresholds.
- Document each finding class and remediation owner.
- Provide before/after scores for remediated network versions.
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | Vector (LineString or MultiLineString) | Yes | Network layer used to derive service areas |
| facilities | Vector (Point or MultiPoint) | Yes | Facility origin points |
| demand_points | Vector (Point, MultiPoint, Polygon, or MultiPolygon) | No | Optional demand layer used for uncovered-demand and KPI calculations. Polygon features are converted to interior representative points. |
| ring_costs | Array | Yes | Positive cost thresholds, e.g., [5, 10, 15] |
| scenarios | CSV | No | Optional scenario variants for open/closed facilities |
| service_area_merge_origins | Boolean | No | If true, dissolve overlapping origin polygons into merged coverage per ring in service_areas output. Default: false. |
| optimization_mode | String | No | One of existing (default) or expansion. |
| candidate_mode | String | No | Expansion candidate source: generated (default) or user_supplied. Ignored in existing mode. |
| candidate_sites | Vector (Point or MultiPoint) | No | Required when optimization_mode=expansion and candidate_mode=user_supplied. |
| num_sites_to_select | Integer | No | Number of expansion sites to select (default 1). |
| selection_strategy | String | No | Expansion selection strategy: single_best (default) or top_k_greedy. |
| min_new_site_separation | Number | No | Minimum spacing between selected expansion sites (map units). |
| max_generated_candidates | Integer | No | Candidate cap used when candidate_mode=generated (default 250). |
| ranked_candidates_vector | String path | No | Optional output vector path for ranked candidate sites with coverage-gain metrics. |
| edge_cost_field | String | No | Numeric line field used as impedance. If omitted, Euclidean arc length is used. |
| mode_field | String | No | Field identifying transport mode per edge (e.g. walk, bus, car). |
| default_mode_speed | Number | No | Default speed (km/h) for mode-speed conversion when no mode-specific override matches. |
| mode_speed_overrides | String | No | Comma-separated mode:speed overrides, e.g. walk:5,bus:30. |
| allowed_modes | String | No | Comma-separated list of permitted modes, e.g. "walk,bus". |
| one_way_field | String | No | Field encoding one-way restrictions; accepts FT/TF/B codes and legacy boolean values. |
| node_cost_points | Vector (Point or MultiPoint) | No | Optional point layer containing node/intersection entry-cost observations. |
| node_cost_field | String | No | Numeric field in node_cost_points containing non-negative node entry costs. |
| node_cost_snap_distance | Number | No | Optional max assignment distance from each node-cost point to the nearest network node. |
| turn_penalty | Number | No | Cost added for each standard turn (use the same units as edge_cost_field). |
| u_turn_penalty | Number | No | Additional cost for U-turns. |
| forbid_u_turns | Boolean | No | If true, U-turns are forbidden at all nodes. |
| forbid_left_turns | Boolean | No | If true, all left turns are forbidden. |
| forbid_right_turns | Boolean | No | If true, all right turns are forbidden. |
| turn_restrictions_csv | CSV | No | Per-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_profile | CSV | No | Time-of-day speed profile CSV for scheduled routing. |
| temporal_edge_id_field | String | No | Network edge ID field that matches profile keys. |
| departure_time | String | No | ISO-8601 departure time for temporal routing, e.g. "2024-06-15T08:00:00Z". |
| temporal_mode | String | No | One of multiplier or absolute. |
| temporal_fallback | String | No | Fallback when no matching profile entry exists: static_cost or error. |
Input Requirements
networkmust contain line geometries.facilitiesmust contain point geometries.- If CRS is known, projected CRS is required.
ring_costsmust be numeric and strictly greater than zero.scenariosfile path must exist when provided.candidate_sitesis required whenoptimization_mode=expansionandcandidate_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 matchingtemporal_edge_id_fieldin 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 thanstart_minute).value: Positive temporal modifier.
temporal_mode determines how value is interpreted:
multiplier: appliesvalueas a multiplier to static edge cost.absolute: treatsvalueas 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_costto use non-temporal impedance when no matching row exists.errorto fail fast when a temporal row is missing.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| service_areas | String path | Yes | Output vector path for service area polygons |
| uncovered_demand | String path | Yes | Output vector path for uncovered demand points |
| scenario_summary_csv | String path | Yes | Output CSV path for scenario KPIs |
| ranked_candidates_csv | String path | Yes | Output CSV path for candidate ranking |
| html_report | String path | No | Optional HTML summary report output |
Output Path Behavior
- Vector format is inferred from extension for
service_areasanduncovered_demand. - Unsupported vector extensions fail validation.
html_reportis emitted only when path is provided.
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Service areas layer | service_areas | Vector (Polygon/MultiPolygon) | Network-derived multi-ring service areas |
| Uncovered demand layer | uncovered_demand | Vector (Point) | Demand points outside baseline service areas |
| Scenario summary report | scenario_summary_csv | CSV | Scenario-level coverage/accessibility KPIs |
| Ranked candidates report | ranked_candidates_csv | CSV | Candidate ranking by coverage gain and travel cost |
| Summary payload | summary | JSON (result payload) | Output path summary for orchestration |
| Optional report | html_report | HTML | Optional 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
baselinerow. total_demand_covered_pctis coverage percentage.avg_accessibilityis 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_areasuncovered_demandscenario_summary_csvranked_candidates_csvsummaryhtml_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:
- Set
ring_coststo your target bands (for example[5, 10, 15]minutes). - Use a travel-time edge impedance field (for example
edge_cost_field="MINUTES"). - Write
service_areasto a polygon-capable output format (.gpkg,.geojson,.shp). - Optionally add
turn_penalty,u_turn_penalty, andnode_cost_pointsfor realistic intersection behavior. - Optionally add
temporal_cost_profile+departure_timefor 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_costsraise 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
scenarioscan shift rank ordering substantially; compare againstbaselinebefore acting.
QA and Acceptance Criteria
Use a staged acceptance approach for Service Area Planning and Coverage Optimization:
- Input integrity: validate projected CRS, network/facility geometry types, and positive ring costs.
- Method validity: verify baseline coverage against known served and unserved demand points.
- Output plausibility: confirm uncovered demand points are outside generated service polygons.
- 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_csvincludesbaselineand any scenario IDs supplied.ranked_candidates_csvranks candidates from 1..N with no missing IDs.uncovered_demandfeature 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
scenariosCSV for closure/expansion analysis. - Candidate run: compare rank shifts using
ranked_candidates_csv. - Release run: publish decision package with baseline + scenario evidence.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Confirm ring-cost profile aligns with policy and service-level commitments.
- Document baseline and scenario assumptions in the deliverable package.
- Provide uncovered-demand deltas and candidate rank changes.
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | Vector (line) | Yes | Street network used for travel-cost routing (LineString and MultiLineString). |
| sites_existing | Vector (point) | Yes | Existing sites (Point or MultiPoint). |
| sites_candidates | Vector (point) | No | Candidate sites to evaluate (Point or MultiPoint). Required for candidate_mode="user_supplied". |
| demand_surface | Vector (point/polygon) | Yes | Demand locations as points or polygons. Polygons are converted to representative interior points for scoring. |
| competition_sites | Vector (point) | No | Competitor 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_sitesis not provided, overlap is computed againstsites_existing. - For most business scenarios, place your current sites in
sites_existingand other providers incompetition_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) orgenerated. - num_sites_to_select (optional, default
1): number of top sites to flag as selected. - selection_strategy (optional, default
single_best):single_bestortop_k_greedy. - min_new_site_separation (optional): minimum separation distance between selected sites.
- max_generated_candidates (optional, default
250): max generated seed candidates whencandidate_mode="generated".
Optional Routing Cost Parameters
Forwarded routing parameters:
cost_methodedge_cost_fieldone_way_field(accepts FT/TF/B codes and legacy boolean values)mode_fielddefault_mode_speedmode_speed_overridesallowed_modestemporal_cost_profiletemporal_edge_id_fielddeparture_timetemporal_modetemporal_fallbackturn_penaltyu_turn_penaltyforbid_u_turnsforbid_left_turnsforbid_right_turnsturn_restrictions_csvnode_cost_pointsnode_cost_fieldnode_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< 40pilot: composite>= 65and coverage gain> 0saturated: overlap>= 60monitor: everything else
Outputs
| Output | Type | Description |
|---|---|---|
| catchments_output | Vector (polygon) | Candidate catchments and key score fields. |
| overlap_analysis_output | Vector (point) | Candidate overlap diagnostics and opportunity band fields. |
| candidate_rank_csv | CSV | Ranked candidate list and score components. |
| executive_summary_json | JSON | Decision summary with recommendation and gate. |
| market_action_queue_csv | CSV (optional) | Ordered action queue with recommended next action. |
| html_report | HTML (optional) | Optional HTML summary artifact. |
Map interpretation note:
catchments_outputstores 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_outputis a point layer. If you see squares there, it is typically point marker symbology.
Runtime output keys (returned in ToolRunResult.outputs):
| Key | Points to |
|---|---|
catchments_output | Candidate catchment polygon file |
overlap_analysis_output | Candidate overlap diagnostics vector file |
candidate_rank_csv | Full candidate ranking CSV |
executive_summary_json | Executive decision summary JSON |
summary | Alias → same path as executive_summary_json |
market_action_queue_csv | Optional action queue CSV (only present when market_action_queue_csv argument is supplied) |
top_ranked_site | String — site_id of the highest-ranked candidate (or "N/A" if no candidates scored) |
html_report | Optional 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_pointsmarket_metrics,top_ranked_candidates,decision_rationale,recommendation,decision_gate
Decision gate rule:
decision_gate=truewhen 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:
- Validate projected CRS and non-empty network/candidate/demand point inputs.
- Confirm all required output paths are set and writable.
- Verify candidate ranking aligns with known market context.
- 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_costsarrays. - Governance run with archived summary JSON and ranking CSV.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Confirm objective function matches business KPI priorities.
- Document constraints (capacity, time windows, exclusions) in deliverable notes.
- Provide baseline-vs-optimized comparison metrics.
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | Vector (line) | Yes | Input network (LineString or MultiLineString). |
| critical_facilities | Vector (point) | Yes | Emergency origin facilities (Point or MultiPoint). |
| demand_points | Vector (point) | No | Optional demand points for KPI coverage calculations. Current KPI extraction uses Point geometries. |
| ring_costs | JSON array | Yes | Ring costs, for example [5.0, 10.0, 15.0]; each value must be finite and > 0. |
| scenario_csv | CSV | Yes | Scenario 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_valueto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
| edge_cost_field | String | — | Numeric line field used as impedance. If omitted, Euclidean arc length is used. |
| mode_field | String | — | Field identifying transport mode per edge. |
| default_mode_speed | Number | — | Default speed (km/h) for mode-speed conversion. |
| mode_speed_overrides | String | — | Comma-separated mode:speed overrides, e.g. walk:5,drive:40. |
| allowed_modes | String | — | Comma-separated list of permitted modes. |
| one_way_field | String | — | Field encoding one-way restrictions; accepts FT/TF/B codes and legacy boolean values. |
| node_cost_points | Vector (point) | — | Optional point layer containing node/intersection entry-cost observations. |
| node_cost_field | String | — | Numeric field in node_cost_points containing non-negative node entry costs. |
| node_cost_snap_distance | Number | — | Optional max assignment distance from each node-cost point to the nearest network node. |
| turn_penalty | Number | — | Cost added for each standard turn. |
| u_turn_penalty | Number | — | Additional cost for U-turns. |
| forbid_u_turns | Boolean | — | If true, U-turns are forbidden at all nodes. |
| forbid_left_turns | Boolean | — | If true, all left turns are forbidden. |
| forbid_right_turns | Boolean | — | If true, all right turns are forbidden. |
| turn_restrictions_csv | CSV | — | Per-turn transition table with columns prev_x,prev_y,node_x,node_y,next_x,next_y; optional forbidden and turn_cost. |
| temporal_cost_profile | CSV | — | Time-of-day speed profile CSV for scheduled routing. |
| temporal_edge_id_field | String | — | Network edge ID field that matches profile keys. |
| departure_time | String | — | ISO-8601 departure time, e.g. "2024-06-15T08:00:00Z". |
| temporal_mode | String | — | One of multiplier or absolute. |
| temporal_fallback | String | — | Fallback when no profile entry matches: static_cost or error. |
Scenario CSV Rules
Required columns:
scenario_idmax_cost_multiplier
Optional column:
blocked_value
Notes:
- Quoted commas are supported.
max_cost_multipliermust be finite and> 0.- Blank rows are ignored.
Template checks:
flood: requires block-source field and at least oneblocked_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 oneblocked_value.
Outputs
| Output | Type | Description |
|---|---|---|
| baseline_service_areas | Vector (polygon) | Baseline merged service-area polygons. |
| worst_case_service_areas | Vector (polygon) | Service areas for the lowest-coverage scenario. |
| scenario_summary_csv | CSV | Scenario metrics and deltas from baseline coverage. |
| simulation_report | JSON | Baseline, scenario list, best and worst scenario summary. |
| html_report | HTML (optional) | Optional HTML wrapper over summary JSON. |
Runtime output keys (returned in ToolRunResult.outputs):
| Key | Points to |
|---|---|
baseline_service_areas | Baseline service-area polygon file |
worst_case_service_areas | Worst-scenario polygon file |
scenario_summary_csv | Scenario KPI CSV |
simulation_report | Simulation report JSON |
summary | Alias → same path as simulation_report |
html_report | Optional 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:
workflowscenario_templatebaselinescenario_countbest_scenarioworst_scenarioscenarios
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:
- Validate geometry types and scenario CSV schema.
- Confirm required output paths are writable.
- Verify scenario summary rows match parsed scenarios.
- Confirm worst-case output corresponds to lowest
covered_pct.
Recommended acceptance checks:
simulation_report.scenario_countmatches expected scenario count.delta_from_baseline_pctvalues match scenario vs baseline coverage math.- Worst scenario in JSON is reflected in
worst_case_service_areasoutput.
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.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Confirm objective function matches business KPI priorities.
- Document constraints (capacity, time windows, exclusions) in deliverable notes.
- Provide baseline-vs-optimized comparison metrics.
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| events | Vector | Yes | Input event layer containing route and measure fields. |
| route_id_field | String | Yes | Route identifier field name. |
| from_measure_field | String | Yes | Interval start measure field name. |
| to_measure_field | String | Yes | Interval 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_valuesregexminmax
Violations are reported as domain_validation issues.
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Governed events layer | governed_events | Vector | QA-passed events with governance status fields. |
| Issue log | issues_csv | CSV | Per-event issue log (rule, severity, measure span, description). |
| Governance contract | governance_report | JSON | Summary metrics (total_events, pass/fail counts, distributions). |
| Summary alias | summary | JSON | Alias key to the same JSON file as governance_report. |
| Remediation queue | remediation_queue_csv | CSV (optional) | Prioritized corrective action list. |
| Corrected events layer | corrected_events | Vector (optional) | Corrected records and correction metadata when fixes are applied. |
| Optional report | html_report | HTML (optional) | Optional summary report for business audiences. |
governed_events added fields
GOVERNANCE_STATUS:PASSEDorCORRECTEDCORRECTIONS:none,descending_fix,overlap_trim, ordescending_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_eventspassed_eventsfailed_eventspass_rate_percentrules_violatedseverity_distributioncorrectable_countdomain_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:
- Validate required fields and measure data quality.
- Validate domain-rules JSON format when used.
- Confirm issue counts align with known data conditions.
- Confirm correction outputs match governance expectations.
Recommended acceptance checks:
passed_events + failed_eventsequalstotal_events.issues_csvincludes all expected issue categories.governed_eventscontains governance status columns.corrected_eventsis 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.
Related Tools
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:
- Validate network topology and impedance attributes for all served areas.
- Confirm objective function matches business KPI priorities.
- Document constraints (capacity, time windows, exclusions) in deliverable notes.
- Provide baseline-vs-optimized comparison metrics.
- 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
| Input | Description |
|---|---|
| Corridor lines | Utility corridor centerlines. |
| Encroachment observations | Points, lines, or polygons describing the threat. |
| Access points | Field access points used to plan response. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
corridor_influence_distance | 30.0 | How far from the corridor a hotspot can be and still be retained. |
high_risk_distance | 10.0 | Distance used to define the highest-risk condition. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
hotspots | Vector | Hotspot points sorted by priority. |
priority_csv | CSV | Ranked response queue. |
planning_report | JSON | Planning summary report. |
summary | JSON | Alias for the planning report. |
response_queue_csv | CSV | Optional dispatch-ready queue with response guidance. |
html_report | HTML | Optional 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
-
hotspotswas reviewed in GIS software -
The top rows in
priority_csvwere 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_fieldwith FT/TF/B values) are not used. - Prioritize sensitivity testing on
corridor_influence_distanceandhigh_risk_distancebefore locking production thresholds.
Related Tools
network_readiness_and_diagnostics_intelligenceservice_area_planning_and_coverage_optimizationemergency_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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| parcels | Vector | Yes | Must 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
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| min_sliver_area | Float | No | 1.0 for generic, 2.0 for ontario_mpac when omitted | Parcels smaller than this area are counted as slivers. |
| auto_fix | Boolean | No | false | Enables auto-fix output. If set to true, corrected_parcels becomes required. |
| jurisdiction_template | String | No | generic | Supported values: generic, ontario_mpac. Sets the default sliver threshold profile. |
| topology_violations | Vector output path | Yes | None | Output path for the point violations layer. |
| issues_csv | CSV output path | Yes | None | Output path for the feature-level topology issue report. |
| compliance_report | JSON output path | Yes | None | Output path for the workflow compliance summary JSON. |
| corrected_parcels | Vector output path | Conditional | None | Required only when auto_fix=true. |
| remediation_queue_csv | CSV output path | No | None | Optional prioritized remediation queue. |
| html_report | HTML output path | No | None | Optional HTML dashboard version of the report. |
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
| Topology violations layer | topology_violations | Point vector | One feature per rule violation, with fields RULE_ID, RULE_TYPE, SEVERITY, CONFIDENCE, FEATURE_FID, RELATED_FID, and DETAIL. |
| Feature issues report | issues_csv | CSV | Header is exactly feature_fid,geometry_type,issue_type,detail. This is the feature-level geometry/topology issue list. |
| Compliance contract | compliance_report | JSON | Keys 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 alias | summary | JSON | Alias key to the same JSON file as compliance_report. |
| Corrected parcels layer | corrected_parcels | Vector | Optional corrected parcel layer written only when auto-fix is enabled. |
| Remediation queue | remediation_queue_csv | CSV | Header is exactly priority,issue_type,rule_or_code,count,recommended_action. Used for operational follow-up. |
| Optional report | html_report | HTML | Optional dashboard rendering of the compliance report. |
Important JSON report fields
| Key | Meaning |
|---|---|
pass_fail | true only when there are no topology violations and no sliver parcels in the pre-fix analysis. |
sliver_examples | Up to 20 example parcels, each with fid and area. |
sliver_calibration_profile | Threshold summary array with threshold_area, count, and share_pct. |
outputs | Paths to topology_violations, issues_csv, corrected_parcels, and remediation_queue_csv. |
Returned payload keys
The workflow returns these output keys:
topology_violationsissues_csvcompliance_reportsummary(same file ascompliance_report)corrected_parcelswhen auto-fix is enabledremediation_queue_csvwhen requestedhtml_reportwhen 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_mpactemplate
Parameter Interaction Notes
- If you omit
min_sliver_area, the workflow uses the default attached tojurisdiction_template. - If you supply
min_sliver_area, that explicit value overrides the template default. pass_failand rule counts are based on the pre-fix audit stage, even whenauto_fix=true.sliver_calibration_profileis useful for deciding whether your current sliver threshold is too aggressive or too permissive.
QA and Acceptance Criteria
- Confirm the parcel layer is polygon or multipolygon geometry in a projected CRS.
- Confirm the example arguments match the runtime names exactly.
- Verify
issues_csvuses the headerfeature_fid,geometry_type,issue_type,detail. - Verify
topology_violationscontains the documented fields. - Verify
compliance_reportincludes the documented keys, includingpass_failandsliver_calibration_profile. - If auto-fix is enabled, verify
corrected_parcelsexists andauto_fix_enabled=truein the JSON report. - If
remediation_queue_csvis requested, verify its header ispriority,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_csvandtopology_violationstogether. 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_csvto 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_areasettings before locking a program standard.
Related Tools
topology_validation_reporttopology_rule_validatetopology_rule_autofixcrs_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
- Deliver
issues_csv,topology_violations, andcompliance_reporttogether. - State clearly whether
genericorontario_mpacdefaults were used. - If auto-fix was enabled, call out that compliance metrics describe the pre-fix state.
- Review
sliver_calibration_profilebefore finalizing any policy recommendation around sliver thresholds. - Include
remediation_queue_csvwhen 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
- Acquire LiDAR and hyperspectral imagery
- Quality control and evaluate point cloud metrics (LiDAR QA and Confidence)
- Generate terrain and canopy products (LiDAR Terrain Product Suite)
- Extract structure metrics and estimate biomass (Forestry Structure and Biomass Analysis)
- Validate with field plots
- Report inventory maps and statistics
Disturbance Monitoring
- Establish baseline forest conditions from LiDAR and imagery
- Conduct annual/bi-annual re-acquisition
- Detect structural change (LiDAR Change and Disturbance Analysis)
- Classify disturbance type (harvesting, insects, disease, fire)
- Map recovery progression
- Generate disturbance trajectory maps and statistics
Urban Vegetation and Accessibility
- Acquire high-resolution LiDAR in urban area
- Classify point cloud (ground, vegetation, building, urban features)
- Assess vegetation clearance for sidewalk accessibility (Sidewalk Vegetation Accessibility Monitoring)
- Identify maintenance priorities
- Track year-to-year maintenance compliance
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- LiDAR QA and Confidence
- LiDAR Terrain Product Suite
- LiDAR Change and Disturbance Analysis
- Forestry Structure and Biomass Analysis
- 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
| Parameter | Required | Description |
|---|---|---|
input | Yes | Input LiDAR file path. |
Optional Settings
| Parameter | Default | Description |
|---|---|---|
qa_mode | balanced | One of strict, balanced, permissive, auto (auto runs balanced profile). |
block_size | 1.0 | Grid cell size in xy units. |
max_building_size | 150.0 | Maximum expected object width in xy units. |
slope_threshold | 15.0 | Minimum edge slope in degrees. |
elev_threshold | 0.15 | Reference-surface threshold in z units. |
high_confidence_threshold | 0.8 | High-confidence threshold for summary metrics (must be in [0, 1]). |
adapt_by_slope | true | Enable slope-adaptive tolerance behavior. |
adapt_by_roughness | true | Enable roughness-adaptive tolerance behavior. |
density_window | 5 | Local confidence-density window size; odd and >= 3. |
roughness_window | 5 | Local roughness window size; odd and >= 3. |
hotspot_min_cells | 9 | Minimum connected hotspot size in cells; must be >= 1. |
hotspot_rank_top_n | unset | Optional cap on ranked hotspots; if set must be >= 1. |
checkpoints | unset | Optional checkpoint point layer path for vertical validation. |
checkpoint_z_field | unset | Optional checkpoint elevation field name. |
fast_mode | false | Quick exploratory mode; skips hotspot extraction/ranking, stratified metrics, and checkpoint validation. |
output_prefix | lidar_qa | Prefix for generated QA artifacts. |
output | unset | Optional output path for classified/filtered LiDAR result. |
Output Artifacts
| Output Key | Description |
|---|---|
classified_lidar | Classified/filtered LiDAR output path. |
dtm | Generated QA DTM raster. |
confidence | Confidence raster. |
uncertainty | Uncertainty raster. |
uncertainty_rel | Relative uncertainty raster. |
qa_flags | QA flags raster. |
qa_hotspots | Hotspot GeoPackage output. |
summary | Summary JSON report. |
html_report | HTML 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.
Related Workflows
lidar_terrain_product_suitelidar_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
| Parameter | Type | Required | Description |
|---|---|---|---|
| input | Path | Yes | LiDAR input (las/laz). |
| profile | Enum | No | strict, balanced, permissive (default balanced). |
| block_size | Float | No | Grid cell size (default 1.0). |
| max_building_size | Float | No | Expected max object width (default 150.0). |
| slope_threshold | Float | No | Off-terrain slope threshold (default 15.0). |
| elev_threshold | Float | No | Reference-surface threshold (default 0.15). |
| z_factor | Float | No | Vertical exaggeration for derivatives (default 1.0). |
| hillshade_azimuth | Float | No | Hillshade azimuth (default 315.0). |
| hillshade_altitude | Float | No | Hillshade altitude (default 45.0). |
| high_confidence_threshold | Float | No | Confidence threshold in [0,1] (default 0.8). |
| output_prefix | String | No | Output prefix (default terrain_suite). |
| output | Path | No | Optional classified LiDAR output path. |
Parameters
Profile presets adjust threshold behavior:
strict: tighter acceptance behaviorbalanced: default behaviorpermissive: broader acceptance behavior
QA status categories:
pass: terrain package ready for normal usereview: flagged zones should be checkedreprocess: elevated QA issues, rerun advised
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| DTM raster | dtm | GeoTIFF | Terrain elevation raster. |
| DSM raster | dsm | GeoTIFF | Surface elevation raster. |
| Slope raster | slope | GeoTIFF | Slope raster. |
| Hillshade raster | hillshade | GeoTIFF | Hillshade raster. |
| Confidence raster | confidence | GeoTIFF | Per-cell confidence surface. |
| Uncertainty raster | uncertainty | GeoTIFF | Per-cell uncertainty surface. |
| Metadata contract | metadata | JSON | QA metrics, status, parameters, and outputs (<output_prefix>_metadata.json). |
| Summary alias | summary | JSON | Alias key to the same metadata contract file as metadata. |
| Optional report | html_report | HTML | Optional formatted report. |
| Optional classified LiDAR | classified_lidar | LiDAR path | Optional 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:
- Confirm all expected outputs are generated.
- Check metadata status (
pass/review/reprocess). - Review confidence and uncertainty maps in flagged areas.
- Validate slope/hillshade plausibility versus terrain knowledge.
- Confirm metadata includes
output_semantics,confidence_contract, andinterpretation_warnings.
Recommended acceptance checks:
- Metadata workflow ID is correct.
- High-confidence fraction is reasonable for data quality.
reprocessruns 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.
Related Tools
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
| Input | Required | Notes |
|---|---|---|
baseline_tiles | Yes | Array of tile paths or a directory of las/laz/zlidar files. |
monitor_tiles | Yes | Array of tile paths or a directory of las/laz/zlidar files. |
resolution | No | Output raster resolution (default 2.0, must be > 0). |
min_change_m | No | Absolute change threshold (default 1.0, must be > 0). |
reference_perimeters | No | Optional vector layer for disturbance attribution hints. |
attribution_buffer_meters | No | Buffer for attribution matching (default 0.0, must be >= 0). |
min_overlap_fraction | No | Overlap needed for attribution match (default 0.10, in [0, 1]). |
output_prefix | No | Output prefix (default lidar_change). |
What You Get
| Output Key | Description |
|---|---|
tile_directory | Folder of per-tile delta rasters. |
tile_manifest | JSON with per-tile metrics and paths. |
summary | JSON with warnings, diagnostics, and aggregate metrics. |
attributed_change_zones | Optional GeoPackage written when reference_perimeters is provided. |
attribution_summary | Optional JSON attribution diagnostics. |
html_report | Optional 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| input | LiDAR (LAS/LAZ or typed lidar object) | Yes | Primary LiDAR source. |
Parameters
- profile (optional):
fast,balanced,strict; defaultbalanced. - resolution (optional): output raster resolution; default
2.0. - stand_block_cells (optional): stand aggregation block size; default
12, minimum2. - biomass_cap (optional): max biomass proxy value; default
25.0. - terrain_adaptation (optional):
off,moderate,strong; defaultmoderate. - output_prefix (optional): output naming prefix; default
forest_structure.
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Canopy height metrics raster | canopy_height_metrics | Raster | Canopy-height metrics layer. |
| Vertical structure class raster | vertical_structure_class | Raster | Structure class map (1-4). |
| Stand structure units vector | stand_structure_units | Vector (GPKG) | Stand polygons with summarized structural attributes. |
| Biomass proxy raster | biomass_proxy | Raster | Biomass proxy map for planning analytics. |
| Confidence raster | confidence | Raster | Confidence map based on LiDAR support quality. |
| Summary contract | summary | JSON | Run contract with metrics, interpretation, and output inventory. |
| Optional report | html_report | HTML | Optional stakeholder-friendly report. |
Summary contract also includes:
output_semanticsconfidence_contractinterpretation_warnings
Runtime note:
- This workflow is Pro-only and requires
include_pro=Truewith 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:
- Confirm LiDAR input quality and expected coverage.
- Confirm all outputs are generated with the selected prefix.
- Validate stand summaries against known forest compartments.
- 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.
Related Tools
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
- Include raster outputs, stand vector layer, summary JSON, and report HTML.
- Document profile, terrain adaptation, and resolution settings.
- Flag low-confidence zones before tactical decisions.
- Provide stand-level interpretation notes for non-technical stakeholders.
- 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
| Input | Description |
|---|---|
| LiDAR tiles | LAS/LAZ tile files or a directory path containing tiles. |
| Sidewalk network | A line or polygon vector layer of the sidewalk network to audit. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
clearance_height_m | 2.5 m | Minimum vegetation height considered obstructive. Adjust to match local standards (e.g., 2.4 m for ADA contexts). |
buffer_distance_m | 3.0 m | Radius around each segment sampled for vegetation height. Should exceed the sidewalk half-width. |
segment_length_m | 10.0 m | Splits long sidewalk lines into segments for fine-grained mapping. Use a large value (e.g., 9999) to keep original features unsegmented. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
sidewalk_accessibility | GeoPackage | Per-segment classification with obstruction metrics. |
summary | JSON | Run-level statistics and QA assessment. |
html_report | HTML | Visual 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 datasummary.obstructed_fraction_of_observed: fraction of covered units classified as obstructedsummary.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 —
STATUSfield populated for all analysis units -
obstructed_fraction_of_observedreviewed for plausibility given season and land cover - HTML report reviewed and archived with project deliverables
-
clearance_height_mandsegment_length_mvalues recorded in project documentation
Operational Notes
- This workflow classifies each analysis unit strictly as
obstructed,clear, orno_lidar_coverageusing LiDAR-derived obstruction heights and local coverage. - Priority dispatch should be based on
STATUSplus 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).
Related Tools
lidar_change_and_disturbance_analysislidar_terrain_product_suitelidar_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
- Acquire wind resource data (speed, direction, turbulence intensity)
- Identify high-wind locations (Wind Turbine Siting Analysis)
- Assess terrain constructability (Terrain Constructability and Cost Analysis)
- Evaluate environmental constraints (viewshed, habitat, noise)
- Optimize turbine placement and access roads
Solar Farm Development
- Evaluate solar irradiance and shading (Solar Site Suitability Analysis)
- Assess topographic slope and aspect suitability
- Check soil conditions and foundation requirements
- Plan electrical interconnection and transmission routing
Corridor Planning
- Define corridor endpoints and width constraints
- Evaluate environmental sensitivity (Corridor Mapping and Route Planning)
- Assess terrain for constructability (Terrain Constraint and Conflict Analysis)
- Identify conflict zones and alternatives
- Generate routing options and cost estimates
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- Solar Site Suitability Analysis
- Corridor Mapping and Route Planning
- Wind Turbine Siting Analysis
- Terrain Constraint and Conflict Analysis
- Utility Corridor Encroachment Detection
- 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
| Input | Required | Notes |
|---|---|---|
dem | Yes | Input DEM raster. |
candidate_threshold | No | Candidate score threshold (default 0.7). |
max_candidate_sites | No | Candidate cap (default 200). |
min_candidate_separation_cells | No | Minimum candidate spacing in cells (default 3, set 0 to disable). |
transmission_lines | No | Optional transmission lines for infrastructure-aware ranking. |
substations | No | Optional substations for infrastructure-aware ranking. |
road_network | No | Optional roads for access-aware ranking. |
infra_weight_profile | No | balanced, grid_priority, or access_priority (default balanced). |
sweep_spec | No | Optional JSON sweep specification. When supplied, the tool executes sweep runs and writes run-matrix and sensitivity outputs. |
output_prefix | No | Output prefix (default solar_siting). |
Outputs
| Output Key | Description |
|---|---|
suitability_score | Suitability raster. |
visual_impact | Visual-impact proxy raster. |
candidate_sites | Ranked candidate points. |
summary | JSON summary with candidate and infrastructure reranking metrics. |
run_matrix_summary | Optional CSV sweep run matrix. |
sensitivity_report | Optional JSON sweep sensitivity report with normalized span and stability_class indicators. |
sensitivity_report_html | Optional HTML sweep sensitivity report. |
stability_map | Optional GeoTIFF sweep stability classes (3=high, 2=medium, 1=low). |
html_report | Optional 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| dem | Raster | Yes | Digital elevation model (defines slope cost) |
| start_features | Vector (point or polygon) | Yes | Corridor start terminals. |
| end_features | Vector (point or polygon) | Yes | Corridor end terminals. |
| constraints | Vector (polygon) | No | Optional 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Cost surface raster | cost_surface | Raster | Traversal impedance surface. |
| Accumulated cost raster | accumulated_cost | Raster | Cost-to-reach map from start anchor. |
| Optimal route vector | optimal_route | Vector | Best route polyline and route metrics. |
| Corridor suitability raster | corridor_suitability | Raster | Feasible corridor area around best route based on tolerance. |
| Summary contract | summary | JSON | Full run contract and interpretation diagnostics. |
| Optional report | html_report | HTML | Stakeholder-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:
- Confirm endpoints and optional constraints are valid and in compatible CRS.
- Confirm route output is generated and includes expected metrics.
- Confirm corridor suitability aligns with project tolerance intent.
- 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.
Related Tools
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
| Input | Required | Notes |
|---|---|---|
dem | Yes | Input DEM raster with CRS metadata. |
settlements | Yes | Settlement locations as vector or CSV. |
settlements_epsg | Conditional | Required for CSV settlements; optional override otherwise. |
visibility_radius_meters | No | Visibility radius (default 5000, range [1000, 50000]). |
min_slope_degrees | No | Minimum slope (default 5.0). |
max_slope_degrees | No | Maximum slope (default 35.0). |
candidate_threshold | No | Candidate threshold in [0, 1] (default 0.7). |
max_candidate_sites | No | Candidate cap (default 200). |
min_candidate_separation_cells | No | Candidate spacing in cells (default 3, set 0 to disable). |
transmission_region | No | dense_grid, sparse_grid, or remote (default dense_grid). |
profile | No | fast, balanced, or quality (default balanced). |
sweep_spec | No | Optional JSON sweep specification. When supplied, the tool executes sweep runs and writes run-matrix and sensitivity outputs. |
output_prefix | No | Output prefix (default wind_siting). |
Outputs
| Output Key | Description |
|---|---|
siting_score | Combined siting score raster. |
confidence | Confidence raster. |
candidate_sites | Ranked candidate points. |
high_score_confident_zones | Polygon zones passing score and confidence rules. |
threshold_sensitivity_summary | JSON threshold-sensitivity diagnostics. |
run_matrix_summary | Optional CSV sweep run matrix. |
sensitivity_report | Optional JSON sweep sensitivity report with normalized span and stability_class indicators. |
sensitivity_report_html | Optional HTML sweep sensitivity report. |
stability_map | Optional GeoTIFF sweep stability classes (3=high, 2=medium, 1=low). |
summary | JSON metrics and interpretation guidance. |
html_report | Optional 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
| Input | Format | Description |
|---|---|---|
| LiDAR tiles | LAS/LAZ | One or more point-cloud tiles covering the corridor area |
| Corridor centerlines | GeoPackage/Shapefile | Line geometry representing the centerline(s) to monitor |
| Corridor type | Text | Type-specific profile controlling encroachment classification |
Supported corridor types:
pipelinepowerline_transmissionpowerline_distributiontelecom_aerialrail_overhead_electrifiedcanal_drainage_infrastructuremixed_utility_rowgeneric_linear_utility
Key Parameters
| Parameter | Default | Practical Guidance |
|---|---|---|
corridor_width_m | 12.0 | Total corridor width. Increase for wide rights-of-way; reduce for narrow easements. |
ground_percentile | 0.05 | Ground candidate percentile. Keep near default unless terrain/vegetation structure requires adjustment. |
k_neighbors | 9 | Neighbors used for local ground modeling. Higher smooths noise; lower increases local sensitivity. |
hag_reuse_cell_m | 2.0 | HAG reuse grid size. 2.0 is a balanced speed/accuracy default for large jobs. |
chainage_window_m | 25.0 | Along-corridor window length for risk aggregation and dispatch-scale outputs. |
Outputs
| Output | Description | Typical Use |
|---|---|---|
summary_json | JSON contract with counts, diagnostics, and timing | Reporting, dashboards, QA/QC checks |
events_output (optional) | Point features for encroachment events | Hotspot mapping and spot-treatment planning |
intervals_output (optional) | Spatial features for merged problem intervals | Zone-based maintenance planning |
windows_output (optional) | Spatial features for risk windows and priority bands | Dispatch 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
- Validate overlap between corridor centerlines and LiDAR coverage.
- Start with defaults (
hag_reuse_cell_m = 2.0,k_neighbors = 9). - Generate all optional spatial outputs for mapping and operational review.
- Review event/interval/risk-window densities with corridor managers.
- 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_menabled 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
| Input | Description |
|---|---|
| DEM raster | The reference elevation raster. |
| Optional normalized rasters | Wetness, flood risk, or landcover penalty layers in the range 0 to 1. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
slope_limit_deg | 15.0 | Lower values make the tool more aggressive about calling conflict. |
| Optional rasters | null | Leave them empty if a constraint category is not available. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
conflict_score | Raster | Conflict severity score in the range 0 to 1. |
conflict_class | Raster | Four-class conflict map from low to very high. |
summary | JSON | Run summary, validity counts, and QA status. |
html_report | HTML | Human-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_classwas inspected in GIS software - Any high-conflict hotspots were checked before siting or mitigation decisions
Operational Notes
- Conflict class
3and4cells should be treated as redesign or mitigation triggers in early siting workflows. slope_limit_degis the highest-leverage parameter; adjust it intentionally and comparehigh_conflict_fractionacross scenarios.- Optional layers (
wetness,flood_risk,landcover_penalty) are expected to be normalized to[0,1]for stable scoring behavior.
Related Tools
terrain_constructability_and_cost_analysiscorridor_mapping_intelligenceutility_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
| Input | Description |
|---|---|
| DEM raster | The reference elevation raster. |
| Optional normalized rasters | Existing conflict, wetness, or access-cost layers in the range 0 to 1. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
output_prefix | terrain_constructability | Output file prefix. |
| Optional rasters | null | Leave them empty if a context layer is not available. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
constructability_score | Raster | Relative constructability score. |
cost_class | Raster | Five-class relative cost map. |
summary | JSON | Run summary and QA status. |
html_report | HTML | Human-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_classwas inspected in GIS software - High-cost areas were checked before development planning decisions
Operational Notes
cost_classis a relative constructability indicator, not a direct currency estimate.- Including
existing_conflict,wetness, andaccess_costtogether usually increases high-cost (4and5) footprint extent. - Review
high_cost_fractionwith mapped class distribution before budget and sequencing decisions.
Related Tools
terrain_constraint_and_conflict_analysiscorridor_mapping_intelligenceutility_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
- Acquire multi-temporal imagery (optical or SAR)
- Coregister images to common reference frame (SAR Coregistration)
- Detect changes (Remote Sensing Change Detection or Time Series Change Intelligence)
- Validate results using ancillary data (fusion, UAV imagery)
- Report change maps and statistics
SAR Data Conditioning
- Import raw SAR data
- Verify system readiness (SAR Readiness QA)
- Coregister to external reference (SAR Coregistration)
- Assess coherence (SAR Interferogram and Coherence)
- Prepare for advanced analysis (interferometry, polarimetry)
Multi-Sensor Fusion
- Prepare individual sensor data streams (optical, SAR, thermal)
- Ensure geometric and temporal alignment
- Apply fusion algorithms (Multi-Sensor Fusion Monitoring)
- Generate integrated analysis products
- Validate results against ground truth
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- Remote Sensing Change Detection
- Time Series Change Intelligence
- UAV Image Intake QA
- SAR Coregistration
- SAR Readiness QA
- SAR Interferogram and Coherence
- Multi-Sensor Fusion Monitoring
- Surface Reflectance Consistency Analysis
- 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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| baseline_bundle | Multiband raster | Yes | Must be a readable multiband raster with accessible red and NIR bands. | Baseline scene bundle. |
| change_bundle | Multiband raster | Yes | Must be a readable multiband raster with accessible red and NIR bands. | Change-date scene bundle. |
| intermediate_ndvi | Single-band raster | No | Must be a readable raster. If provided, it is harmonized to the baseline NDVI grid. | Optional intermediate-date NDVI for temporal validation. |
Parameters
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| baseline_red_band_index | Integer | No | 0 | Zero-based red-band index in baseline_bundle. |
| baseline_nir_band_index | Integer | No | 1 | Zero-based NIR-band index in baseline_bundle. |
| change_red_band_index | Integer | No | 0 | Zero-based red-band index in change_bundle. |
| change_nir_band_index | Integer | No | 1 | Zero-based NIR-band index in change_bundle. |
| profile | String | No | balanced | aggressive, balanced, or conservative. |
| high_confidence_threshold | Float | No | 0.85 | Threshold used for high-confidence summary counts. Must be in [0, 1]. |
| output | String | No | change_detection | Output 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.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
Change map (${prefix}_change.tif) | change_map | GeoTIFF raster | Signed NDVI change surface. |
Confidence map (${prefix}_confidence.tif) | confidence | GeoTIFF raster | Confidence score raster in [0, 1]. |
Class-area table (${prefix}_class_area_table.csv) | class_area_table | CSV | Per-class area accounting for vegetation_loss, vegetation_gain, and unchanged with fractions over valid pixels. |
Summary contract (${prefix}_summary.json) | summary | JSON | Summary contract including workflow metadata, profile, inputs, parameters, summary statistics, interpretation, outputs, and a timings_ms block. |
Optional report (${prefix}_report.html) | html_report | HTML | HTML rendering of the summary JSON. |
Important summary fields
| Key | Meaning |
|---|---|
inputs.input_description | Bundle-mode description including selected band indices. |
inputs.intermediate_ndvi | Path to the optional intermediate NDVI raster, or null. |
parameters.min_change_threshold | Profile-specific minimum NDVI change threshold. |
parameters.magnitude_scale | Profile-specific magnitude scaling value. |
parameters.high_confidence_threshold | Threshold used for summary counts. |
parameters.temporal_validation_enabled | true when intermediate_ndvi was provided. |
summary.valid_pixels | Number of valid analyzed pixels. |
summary.pixels_with_change | Number of changed pixels. |
summary.change_fraction_of_image | Percent-string fraction of the image showing change. |
summary.vegetation_loss_pixels | Count of loss pixels. |
summary.vegetation_gain_pixels | Count of gain pixels. |
summary.unchanged_pixels | Count of valid pixels below the profile change threshold. |
summary.vegetation_loss_fraction_of_valid_pixels | Fraction of valid pixels in the vegetation_loss class. |
summary.vegetation_gain_fraction_of_valid_pixels | Fraction of valid pixels in the vegetation_gain class. |
summary.unchanged_fraction_of_valid_pixels | Fraction of valid pixels in the unchanged class. |
summary.high_confidence_change | Percent-string share of changed pixels above the high-confidence threshold. |
summary.high_confidence_change_pixels | Count of high-confidence changed pixels. |
summary.mean_confidence | Mean confidence over valid pixels. |
summary.mean_temporal_consistency | Mean temporal consistency over valid pixels. |
class_definitions | Explicit class rules for vegetation_loss, vegetation_gain, and unchanged. |
class_area_accounting | Reconciliation block ensuring class totals equal valid pixels. |
output_semantics | Machine-readable semantics tags per output key. |
confidence_contract | Standardized confidence method and low-confidence summary fields. |
interpretation_warnings | Explicit warning statements about class and confidence interpretation constraints. |
interpretation | Contains dominant_trend, confidence_assessment, and temporal_consistency. |
outputs | Contains change_map, confidence, and class_area_table. |
timings_ms.step5g_write_summary | Test-required timing key present in the timing block. |
Returned payload keys
The workflow returns these output keys:
change_mapconfidenceclass_area_tablesummaryhtml_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.
profilechanges the minimum change threshold and the weighting of magnitude versus temporal consistency, so it materially affects confidence scoring.high_confidence_thresholdchanges summary counts only; it does not reclassify the confidence raster itself.- Adding
intermediate_ndvican substantially change temporal consistency and the narrative in the interpretation block.
QA and Acceptance Criteria
- Verify
baseline_bundleandchange_bundleare treated as required inputs. - Verify the example uses bundle-mode arguments exactly.
- Verify the summary JSON contains the documented keys, including
interpretationandtimings_ms. - Verify the returned payload contains
change_map,confidence,summary, andhtml_report. - Verify
timings_ms.step5g_write_summaryexists in the summary. - If
intermediate_ndviis supplied, verifyparameters.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_ndviwhen 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_ndvifor stronger temporal support. - Profile sensitivity run: compare
aggressive,balanced, andconservative. - Delivery run: publish change, confidence, summary, and HTML report together.
Related Tools
multi_sensor_fusion_monitoringtime_series_change_intelligencesar_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
- Deliver the change raster, confidence raster, summary JSON, and HTML report together.
- Record the exact band indices used for both bundles.
- State whether
intermediate_ndviwas used. - Review the interpretation block before operational or regulatory use.
- Confirm
timings_msand 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
| Input | Description |
|---|---|
| Time-series raster stack | One band per acquisition, ordered chronologically. |
| Optional QA stack | A matching multiband QA stack where positive values mark valid observations. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
algorithm_mode | fast | Use fast for screening, iterative for breakpoint-focused work, or bfast when decomposition stability matters more than speed. |
min_observations | 24 | Raise if the stack is sparse or noisy. |
break_threshold | 0.08 | Raise to suppress weak break candidates. |
cadence_profile | auto | Let the tool adapt to dense, sparse, or seasonal sampling patterns. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
trend_change | Raster | Trend or change surface. |
breakpoint_count | Raster | Breakpoint count or dominant breakpoint index. |
breakpoint_date | Raster | Breakpoint date or date index. |
change_confidence | Raster | Confidence score in the range 0 to 1. |
summary | JSON | Summary metrics and QA guidance. |
html_report | HTML | Human-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"]andsummary["mean_confidence"]were reviewed together - Breakpoints were checked against known events or disturbance dates
Operational Notes
- Evaluate
changed_fraction_valid_pixelsandmean_confidencetogether; high change with low confidence should trigger follow-up QA before action. - Use
breakpoint_datefor investigation timing, and treatbreakpoint_countas temporal complexity rather than impact severity. - For sparse stacks, document the applied cadence profile and adjusted thresholds from summary output before comparing runs.
Related Tools
remote_sensing_change_detectionmulti_sensor_fusion_monitoringsar_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
| Parameter | Type | Required | Description |
|---|---|---|---|
| images_dir | Directory path | Yes | UAV image folder. Supported formats: jpg, jpeg, tif, tiff, png. |
| profile | Enum | No | fast, balanced, strict (default balanced). |
| recursive | Boolean | No | Scan nested folders (default true). |
| output_prefix | String | No | Output artifact prefix (default uav_intake). |
| blur_mode | Enum | No | off, fast, full blur scoring mode. |
Parameters
Profile behavior summary:
fast: permissive thresholds for rapid triagebalanced: standard mission QAstrict: 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Image inventory file | image_inventory | CSV | Per-image metadata and quality fields. |
| QA report file | qa_report | JSON | Structured QA checks and warning diagnostics. |
| Summary contract | summary | JSON | Intake status and mission summary metrics. |
| Image centers layer | image_centers | GeoJSON | Point locations of GPS-tagged images. |
| Flight path lines layer | flight_path_lines | GeoJSON | Ordered flight path line from image centers. |
| Optional report | html_report | HTML | Optional 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 workflowsreview: usable with QA follow-upfail: 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:
- Confirm image discovery and supported file coverage.
- Confirm inventory and QA outputs were generated.
- Verify summary status aligns with mission QA policy.
- 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.
Related Tools
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
- Deliver inventory CSV, summary JSON, and QA report JSON.
- Include image center and flight-path GeoJSON outputs.
- Include optional HTML report for stakeholder review.
- Document chosen profile and blur mode.
- Escalate any warning-driven
revieworfailoutcomes.
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
| Argument | Type | Required | Description |
|---|---|---|---|
| reference_sar | String path | Conditional | Reference SAR raster (direct raster mode). Required unless reference_sar_bundle is provided. |
| reference_sar_bundle | String path | Conditional | Reference SAR sensor bundle root or archive (.zip/.tar/.tar.gz/.tgz). Required unless reference_sar is provided. |
| reference_measurement_key | String | No | Measurement key within reference bundle when bundle contains multiple SAR assets. |
| moving_sar | String path | Conditional | Moving SAR raster (direct raster mode). Required unless moving_sar_bundle is provided. |
| moving_sar_bundle | String path | Conditional | Moving SAR sensor bundle root or archive. Required unless moving_sar is provided. |
| moving_measurement_key | String | No | Measurement key within moving bundle. |
| input_dem | String path | No | Optional DEM raster for geometry initialization in mountainous terrain. |
Parameters
| Argument | Type | Default | Description |
|---|---|---|---|
| coreg_mode | String | translation | Coregistration model: translation (production), affine (experimental), local_offset_grid (experimental). |
| max_offset_px | Integer | 24 | Maximum pixel search radius in x and y. |
| decimation | Integer | 4 | Sampling stride during search (larger = faster, coarser). |
| min_overlap_fraction | Float | 0.20 | Minimum valid overlap fraction required to accept a candidate shift. |
| dem_z_factor | Float | 1.0 | Vertical exaggeration for DEM slope derivation. |
| resample_method | String | bilinear | Resampling method: bilinear or nearest. |
| output_prefix | String | sar_coreg | File name prefix for all output artifacts. |
| phase_a_residual_mae_threshold_px | Float | 2.0 | Phase-A gate: max allowed residual MAE (px). |
| phase_a_dem_informative_fraction_min | Float | 0.01 | Phase-A gate: min DEM informative fraction (when DEM provided). |
| phase_a_continuity_jump_threshold_px | Float | 0.75 | Phase-A gate: max burst-boundary offset jump (px). |
| phase_a_continuity_residual_jump_threshold | Float | 0.08 | Phase-A gate: max adjacent-burst residual MAE jump. |
Outputs
| Output | Type | Description |
|---|---|---|
| moving_aligned | Raster | Moving raster aligned to reference geometry. |
| offset_x | Raster (Float32) | Per-pixel estimated X-offset in pixels. |
| offset_y | Raster (Float32) | Per-pixel estimated Y-offset in pixels. |
| transform | JSON | Estimated transform, Phase-A QA gates, and per-burst diagnostics. |
| summary | JSON | Run summary with parameters and Phase-A gate results. |
| html_report | HTML | Human-readable coregistration report. |
Runtime output keys (returned in ToolRunResult.outputs):
| Key | Points to |
|---|---|
moving_aligned | Aligned moving raster file |
offset_x | X-offset raster file |
offset_y | Y-offset raster file |
transform | Transform JSON artifact |
summary | Summary JSON artifact |
html_report | HTML report |
Transform JSON Schema (transform)
workflow:"sar_coregistration"coreg_mode: mode useddx_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_passburst_continuity_passdem_informative_fraction(null when no DEM provided)dem_informative_fraction_threshold,dem_informative_fraction_passoverall_pass
Summary JSON Schema (summary)
schema_version:"1.0.0"summary.phase_a_acceptance_gates: same schema astransform.qa.phase_a_acceptance_gatesparameters: 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_pxanddecimationinteract: high decimation with small max offset can silently miss the true peak. Reducedecimationbefore increasingmax_offset_px.coreg_mode=affineandlocal_offset_gridare experimental and can produce unstable results on speckle-dominated inputs; usetranslationfor production.- Phase-A gate thresholds evaluate residuals post-warp regardless of mode;
phase_a_residual_mae_threshold_px=0.5is appropriate for InSAR-quality assurance. resample_method=nearestdegrades sub-pixel alignment quality; usebilinearfor all phase-sensitive products.
QA and Acceptance Criteria
- Input compatibility: use
sar_analysis_readinessto confirm the pair is compatible before coregistration. - Phase-A gate:
summary["summary"]["phase_a_acceptance_gates"]["overall_pass"]must betruebefore using outputs in coherence or interferogram workflows. - Residual MAE: < 0.3 px for deformation campaigns; < 1.0 px for change detection.
- Burst continuity:
burst_continuity_pass: falserequires investigation — often resolved by providinginput_demfor mountainous terrain. - Visual check: flicker reference vs aligned moving raster; stable edges must show no lateral shift.
Advanced Operational Guidance
- Archive
transform.jsonper pair as the canonical alignment record for audit trails. - Do not proceed to
sar_interferogram_coherencewithout verifyingoverall_pass=true. - If DEM informative fraction gate fails, check whether the DEM covers the SAR scene; remove
input_demif 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_readiness→sar_coregistration→sar_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_demand setdecimation=2 - Rapid QA screening:
decimation=8,max_offset_px=16before full production run
Related Tools
sar_analysis_readiness— validate scene compatibility before coregistrationsar_interferogram_coherence— consumesmoving_alignedoutputregistration_oriented_feature_workflow— complementary alignment QC for optical/SAR pairs
Results Delivery Checklist
-
moving_aligneddelivered and spot-checked visually -
transform.jsonarchived as alignment record -
Phase-A
overall_pass=trueconfirmed 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
| Input | Required | Notes |
|---|---|---|
input_sar or input_sar_bundle | Yes (exactly one) | Primary SAR source in raster mode or bundle mode. |
input_dem | Yes | DEM used for RTC support. |
pair_sar or pair_sar_bundle | No | Optional pair scene for coherence-proxy estimation (at most one). |
input_measurement_key / pair_measurement_key | No | Optional selectors for bundle mode. |
Optional controls include look-angle checks, auto-coregistration settings, speckle_window, z_factor, and output_prefix.
What You Get
| Output Key | Description |
|---|---|
sar_backscatter_calibrated | Calibrated primary SAR raster. |
speckle_filtered | Speckle-filtered raster. |
rtc_factor | RTC factor raster. |
coherence_proxy | Optional pair-based coherence proxy raster. |
readiness_rule_trace | JSON readiness rule evaluation trace. |
readiness_blockers | CSV blocker list for triage/reporting. |
summary | JSON summary with warnings, timings, readiness score, and outputs. |
html_report | Optional 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
| Argument | Type | Required | Description |
|---|---|---|---|
| reference_sar | String path | Conditional | Reference SAR raster (direct mode). |
| moving_sar | String path | Conditional | Moving SAR raster (direct mode). |
| reference_sar_real | String path | Conditional | Reference real component (complex mode). |
| reference_sar_imag | String path | Conditional | Reference imaginary component (complex mode). |
| moving_sar_real | String path | Conditional | Moving real component (complex mode). |
| moving_sar_imag | String path | Conditional | Moving imaginary component (complex mode). |
| reference_sar_bundle | String path | Conditional | Reference SAR bundle root or archive (bundle mode). |
| moving_sar_bundle | String path | Conditional | Moving SAR bundle root or archive (bundle mode). |
| reference_measurement_key | String | No | Measurement key within reference bundle. |
| moving_measurement_key | String | No | Measurement key within moving bundle. |
| input_dem | String path | No | Optional DEM for terrain-context masking. |
Parameters
| Argument | Type | Default | Description |
|---|---|---|---|
| auto_coregister_pair | Bool | false | Run built-in coregistration before coherence. |
| assume_prealigned_pair | Bool | false | Assert pair is on matching grids; skip coregistration. |
| coreg_mode | String | translation | Coregistration mode for handoff: translation, affine, local_offset_grid. |
| coreg_max_offset_px | Integer | 24 | Max offset searched during auto-coregistration. |
| coreg_decimation | Integer | 4 | Sampling stride during auto-coregistration. |
| coreg_min_overlap_fraction | Float | 0.20 | Minimum valid overlap fraction during auto-coregistration. |
| coherence_window | Integer | 7 | Odd-valued estimation window (px). |
| coherence_decimation | Integer | 1 | Coherence sampling stride; > 1 uses coarser grid. |
| performance_profile | String | balanced | balanced or fast. |
| acceptance_min_valid_fraction | Float | 0.25 | Acceptance gate: min valid-sample fraction. |
| acceptance_min_mean_coherence | Float | 0.20 | Acceptance gate: min mean coherence. |
| acceptance_max_coreg_residual_mae_px | Float | 2.0 | Acceptance gate: max coreg residual MAE (px). |
| write_interferogram | Bool | true | Write interferogram raster. |
| write_coherence | Bool | true | Write coherence raster. |
| write_valid_mask | Bool | true | Write valid-sample mask. |
| write_html_report | Bool | true | Write HTML report. |
| output_layout | String | standard | GeoTIFF layout: standard or cog. |
| output_compression | String | none | GeoTIFF compression: none or deflate. |
| output_tile_size | Integer | 512 | Tile size for COG layout. |
| output_prefix | String | sar_interferogram_coherence | File name prefix for output artifacts. |
Outputs
| Output | Type | Description |
|---|---|---|
| interferogram | Raster | Phase difference raster. |
| coherence | Raster (Float32) | Per-pixel coherence (0–1). |
| valid_mask | Raster (UInt8) | Binary valid-sample mask. |
| summary | JSON | Run metadata, acceptance gates, spatial statistics. |
| html_report | HTML | Human-readable coherence report. |
Runtime output keys (returned in ToolRunResult.outputs):
| Key | Points to |
|---|---|
interferogram | Interferogram raster (only present when write_interferogram=true) |
coherence | Coherence raster (only present when write_coherence=true) |
valid_mask | Valid-sample mask raster (only present when write_valid_mask=true) |
summary | Summary JSON artifact |
html_report | HTML 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_passmean_coherence,mean_coherence_threshold,mean_coherence_passcoreg_residual_gate_applicable,coreg_residual_mae_px,coreg_residual_mae_threshold_px,coreg_residual_mae_passoverall_pass(bool)
summary:rows,cols,valid_fraction,mean_coherencecoregistration:performed,residual_mae_px,search_best_scoreparameters: 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=trueandassume_prealigned_pair=trueare mutually exclusive — setting both is an error.coherence_windowandcoherence_decimation: large window + decimation > 1 saves runtime at the cost of local spatial detail.acceptance_min_mean_coherenceshould be adjusted for land cover context: vegetated or water-heavy scenes will naturally report lower values.write_interferogram=falsesuppresses the interferogram output — use when only coherence is needed.
QA and Acceptance Criteria
- Input readiness: use
sar_analysis_readinessto confirm scene compatibility first. - Acceptance gate:
summary["acceptance_gates"]["overall_pass"]must betruebefore delivering coherence products. - Mean coherence plausibility: values < 0.2 are expected over vegetation/water; > 0.7 expected over stable urban surfaces.
- Valid fraction: if
valid_fraction< 0.25, check terrain masking extent and DEM/scene overlap. - 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.jsonper pair as the canonical processing record. - Fix
coherence_windowandoutput_compressionacross all pairs in a multi-date stack to ensure comparability.
Implementation Patterns
- InSAR prep:
sar_analysis_readiness→sar_coregistration→sar_interferogram_coherence(withassume_prealigned_pair=true) - Inline pipeline:
sar_interferogram_coherencewithauto_coregister_pair=true - Coherence-only:
write_interferogram=falseto skip interferogram output - COG delivery:
output_layout=cog,output_compression=deflate
Related Tools
sar_coregistration— dedicated coregistration step for full per-burst QA recordsar_analysis_readiness— scene pair compatibility validationtime_series_change_intelligence— multi-date coherence-stack change analysis
Results Delivery Checklist
-
acceptance_gates.overall_pass=trueconfirmed -
coherenceraster delivered and visually inspected -
summary.jsonarchived per pair as processing record -
valid_fractionreviewed 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| baseline_bundle | Multiband raster | Yes | Baseline optical bundle. |
| change_bundle | Multiband raster | Yes | Change-date optical bundle. |
| input_sar | Raster | Yes | Primary SAR raster. |
| input_dem | Raster | Yes | DEM for terrain context. |
| pair_sar | Raster | No | Optional second SAR for coherence-aware fusion. |
| thermal_bundle | Raster | No | Optional thermal raster for three-modality fusion diagnostics. |
| thermal_band_index | Integer | No | 0-based thermal band index in thermal_bundle (default 0). |
| baseline_red_band_index | Integer | No | Baseline red band index (default 0). |
| baseline_nir_band_index | Integer | No | Baseline NIR band index (default 1). |
| change_red_band_index | Integer | No | Change red band index (default 0). |
| change_nir_band_index | Integer | No | Change NIR band index (default 1). |
| profile | Enum | No | fast, balanced, conservative (default balanced). |
| harmonization_mode | Enum | No | off, robust, conservative (default robust). |
| high_confidence_threshold | Float | No | High-confidence zone threshold (default 0.8). |
| max_zone_features | Integer | No | Zone feature cap (default 25000). |
| vector_output_format | Enum | No | gpkg, geojson, shp (default gpkg). |
| output_prefix | String | Yes | Output prefix for all emitted artifacts. |
Parameters
Operational parameter notes:
harmonization_modecontrols cross-sensor disagreement penalties.profilecontrols fusion weighting behavior.vector_output_formatselects zone output format for integration pipelines.
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Fused change probability raster | fused_change_probability | GeoTIFF | Fused disturbance probability map. |
| Sensor agreement raster | sensor_agreement | GeoTIFF | Sensor-agreement confidence map. |
| Terrain context raster | terrain_context | GeoTIFF | Terrain-context support layer. |
| Uncertainty inflation raster | uncertainty_inflation | GeoTIFF | Per-pixel uncertainty inflation diagnostic layer. |
| High-confidence change zones | high_confidence_change_zones | Vector | High-confidence disturbance polygons. |
| Thermal input contract | thermal_input_contract | JSON | Thermal input/coverage contract for this run. |
| Modality contribution diagnostics | modality_contribution_diagnostics | JSON | Modality contribution-share and coverage diagnostics. |
| Agreement metrics | agreement_metrics | Object (in summary) | Pairwise and three-way agreement diagnostics (mean_optical_vs_sar, optional thermal pair metrics, and mean_three_way_agreement). |
| Summary contract | summary | JSON | Inputs, parameters, aggregate metrics, harmonization diagnostics, outputs. |
| Optional report | html_report | HTML | Optional 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:
- Validate required inputs and optional pair SAR.
- Confirm expected raster/vector outputs are created.
- Review summary bias and resolution diagnostics.
- 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.
Related Tools
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
| Parameter | Type | Required | Description |
|---|---|---|---|
| input_red | Raster | Yes | Red band input. |
| input_nir | Raster | Yes | Near-infrared band input. |
| input_green | Raster | No | Optional green band input. |
| input_dem | Raster | Yes | DEM used for terrain-aware correction support. |
| solar_zenith_deg | Float | Yes | Solar zenith in degrees (0 <= value < 90). |
| solar_azimuth_deg | Float | Yes | Solar azimuth in degrees (0 <= value <= 360). |
Parameters
- profile (optional):
fast,balanced,conservative; defaultbalanced. - stress_test_level (optional):
none,standard,extreme; defaultstandard. - output_prefix (optional): artifact prefix; default
brdf_consistency.
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Normalized reflectance raster | brdf_normalized_reflectance | Raster (GeoTIFF) | Corrected reflectance proxy for stable comparison. |
| Normalization delta raster | normalization_delta | Raster (GeoTIFF) | Correction magnitude map showing change from raw to corrected signal. |
| Consistency confidence raster | consistency_confidence | Raster (GeoTIFF) | Confidence score (0-1) for corrected reflectance consistency. |
| Summary contract | summary | JSON | Run contract, diagnostics, and output inventory. |
| Optional report | html_report | HTML | Customer-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.
extremestress testing applies stricter confidence penalties thanstandard.conservativeprofile is appropriate for high-governance reporting workflows.
QA and Acceptance Criteria
Use a staged acceptance approach for Surface Reflectance Consistency Analysis:
- Validate all required inputs and angle ranges.
- Confirm output rasters and summary JSON are generated under the selected prefix.
- Verify confidence maps are spatially coherent with expected terrain/illumination behavior.
- Verify stress-adjusted confidence aligns with policy thresholds.
Recommended acceptance checks:
summary.workflowisbrdf_surface_reflectance_consistency.- Output inventory in
summary.outputsmatches 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.
Related Tools
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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| mode | String | No | Must be set or pair. Default is set. | Chooses directory-based pair planning or one explicit pair. |
| images_dir | Directory path | Conditional | Required when mode=set. Must exist and contain supported image types: jpg, jpeg, tif, tiff, png. | Directory used for set-mode candidate planning. |
| left_image | Image path | Conditional | Required when mode=pair. File must exist. | Left image in pair mode. |
| right_image | Image path | Conditional | Required when mode=pair. File must exist. | Right image in pair mode. |
Parameters
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| max_pairs | Integer | No | 24 | Maximum number of ranked pairs kept in set mode. Must be greater than 0. |
| max_features_per_image | Integer | No | 500 | Maximum keypoints extracted per image. Must be in [50, 5000]. |
| ratio_test | Float | No | 0.80 | Descriptor ratio-test threshold in [0.5, 0.99). |
| min_matches | Integer | No | 24 | Minimum accepted match count per pair. This is the main QA gate. |
| min_match_count | Integer | No | 24 | Pair-level QC threshold for minimum accepted match count. Must be at least 1. |
| min_inlier_ratio | Float | No | 0.18 | Pair-level QC threshold for minimum accepted inlier proxy ratio. Must be in [0, 1]. |
| qc_policy | String | No | balanced | QC policy preset. Must be one of strict, balanced, permissive. |
| output_prefix | String | No | registration_workflow | Prefix used to derive all output files. |
| emit_pair_match_viz | Boolean | No | false | Enables side-by-side PNG visualizations with tie-point lines. |
| max_pair_visualizations | Integer | No | 8 | Maximum visualization PNGs to write. Must be in [1, 200]. |
| max_lines_per_pair | Integer | No | 150 | Maximum tie-point lines drawn per PNG. Must be in [1, 5000]. |
| viz_scale | Float | No | 0.5 | Visualization 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.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
Pair diagnostics (${prefix}_pair_diagnostics.json) | pair_diagnostics | JSON | Pair-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_summary | JSON | Run summary with status, pair counts, match totals, fallback counts, fallback policy, visualization settings, and output paths. |
Summary alias (${prefix}_match_summary.json) | summary | JSON | Alias key to the same JSON file as match_summary. |
Tie points (${prefix}_tie_points.csv) | tie_points | CSV | Header is exactly pair_id,left_x,left_y,right_x,right_y,confidence. |
Pair QC table (${prefix}_pair_qc_table.csv) | pair_qc_table | CSV | Header 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_summary | JSON | Pair-level QC counts/fractions by policy and thresholds. |
Pair visualization directory (${prefix}_pair_match_viz/) | pair_match_viz_dir | Directory of PNGs | Optional visualization directory, written only when emit_pair_match_viz=true. |
Optional report (${prefix}_report.html) | html_report | HTML | HTML rendering of the match summary. |
Important summary fields
| Key | Meaning |
|---|---|
status | pass, review, or fail. |
pair_count | Number of successful pairs included in the run. |
total_matches | Total tie-point matches across successful pairs. |
mean_inlier_proxy | Mean match quality proxy across successful pairs. |
low_quality_pairs | Number of successful pairs that still fell below min_matches. |
pairs_requiring_fallback | Number of pairs that needed fallback strategy selection. |
failed_pair_count | Number of pair computations that failed outright. |
qc | Pair-level QC object with policy, thresholds, counts, and fractions. |
fallback_policy | Thresholds and deltas used by the fallback logic. |
visualization | Visualization settings and output counts. |
outputs | Paths to diagnostics, summary, tie points, pair QC artifacts, and optional visualization directory. |
Returned payload keys
The workflow returns these output keys:
pair_diagnosticsmatch_summarysummary(same file asmatch_summary)tie_pointspair_qc_tableqc_summaryhtml_reportpair_match_viz_dirwhen 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_matchesis the strongest QA threshold. It affects fallback acceptance and the finalstatus.min_match_countandmin_inlier_ratiodefine pair-level QC gate criteria and drivepair_qc_table.csvandqc_summary.jsonstatus counts.qc_policyscales pair-level QC thresholds (stricttightens,permissiverelaxes) and should be recorded with each production run.ratio_testandmax_features_per_imageinteract: one changes descriptor strictness and the other changes feature yield.- In set mode,
max_pairslimits 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
- Verify mode-specific required arguments are correct.
- Verify the example uses actual runtime argument names.
- Verify the tie-point CSV header exactly matches the documented schema.
- Verify both JSON outputs contain the documented fields.
- Verify the returned payload contains the documented keys.
- 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_failuresbefore dismissing a dataset; some failures are decode or image-quality issues rather than geometric incompatibility. - For cross-modal imagery, inspect
attempt_traceandstrategy_usedto 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, andmax_features_per_imageon the same imagery.
Related Tools
sar_coregistrationsar_analysis_readinessguided_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
- Deliver
pair_diagnostics.json,match_summary.json, andtie_points.csvtogether. - State clearly whether the run used
mode=pairormode=set. - Record the final
min_matches,min_match_count,min_inlier_ratio,qc_policy,ratio_test, andmax_features_per_imagevalues. - If visualization was enabled, include the visualization directory and note the scaling settings.
- Review
status,low_quality_pairs, andpairs_requiring_fallbackbefore 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
- Map soil types and properties (Soil Landscape Classification)
- Conduct trials relating soil to yield potential
- Generate fertilizer/lime prescription maps
- Apply variable-rate inputs during spring/fall operations
In-Season Crop Stress Response
- Acquire multispectral imagery (1–2 week frequency)
- Compute vegetation indices (NDVI, NDRE)
- Compare to field-specific or regional baseline
- Detect stress early (In-Season Crop Stress Intervention Planning)
- Implement tactical response (irrigation, fungicide, foliar nutrient)
Yield Analysis and Mapping
- Harvest yield data with GPS georeference
- Clean and grid yield map (Yield Data Conditioning and QA)
- Analyze yield zones and drivers (Precision AG Yield Zone Intelligence)
- Identify top-yielding areas and associated factors
- Plan next-year management to replicate success
Field Trafficability Workflow
- Assess soil texture, slope, drainage
- Model trafficability for different equipment (Field Trafficability and Operation Planning)
- Identify at-risk compaction areas (wet soils, steep slopes)
- Plan harvest timing and machinery routes to minimize compaction
Recommended Workflow Start Order
The workflow order below is a practical starting sequence that gets most teams to usable, validated outputs quickly:
- Yield Data Conditioning and QA
- Precision AG Yield Zone Intelligence
- In-Season Crop Stress Intervention Planning
- Precision Irrigation Optimization
- Field Trafficability and Operation Planning
- 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
| Input | Description |
|---|---|
| Yield point layer | Raw point data from monitor export. |
| Yield field | Field containing raw yield values. |
| Optional telemetry fields | Speed and heading fields for telemetry QA. |
| Optional moisture field | Moisture field for dry-yield normalization. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
output_prefix | required | Prefix used for all emitted artifacts. |
profile | balanced | Use fast, balanced, or strict. |
keep_intermediates | true | Keep intermediate branch outputs for review. |
filtering_mode | profile-based | standard or robust. |
lag_correction_mode | none | Set distance only when lag distance is known. |
target_moisture_pct | 15.5 | Used only if a moisture field is supplied. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
qa_flags | GeoPackage | Edge QA points. |
clean_points | GeoPackage | Final normalized points. |
clean_map | GeoPackage | Final swath map polygons. |
confidence_points | GeoPackage | Final points with confidence field (QA_CONF). |
summary | JSON | Run summary and branch diagnostics. |
html_report | HTML | Optional 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_confidenceand 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.
Related Tools
precision_ag_yield_zone_intelligencefield_trafficability_and_operation_planningprecision_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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| yield_surface | Raster | Yes | Must be a readable raster. | Primary yield or normalized productivity surface. |
| terrain_context | Raster | No | Must be a readable raster. It is resampled to the yield_surface grid if needed. | Optional terrain proxy such as wetness or slope. |
Parameters
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| profile | String | No | balanced | Supported values: fast, balanced, conservative. Changes how strongly terrain moderates the stability score. |
| zone_count | Integer | No | 4 | Number of management zones. Must be between 2 and 8. |
| max_zone_features | Integer | No | 5000 | Maximum number of polygon regions written to the GeoPackage. Must be greater than 0. |
| sweep_spec | JSON object | No | null | Optional sweep specification. When supplied, the workflow executes multi-run sweeps and emits sweep diagnostics. |
| output_prefix | String | Yes | - | 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.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
Yield stability raster (${prefix}_yield_stability.tif) | yield_stability | GeoTIFF raster | Per-cell stability score in the range [0, 1]. |
Management zones raster (${prefix}_management_zones.tif) | management_zones | GeoTIFF raster | Per-cell integer zone assignments from 1 to zone_count. |
Management zones vector (${prefix}_management_zones.gpkg) | management_zones_vector | Polygon vector | Layer 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_confidence | GeoTIFF raster | Per-cell confidence score in the range [0, 1]. |
| Sweep run matrix (optional) | run_matrix_summary | CSV | Per-run matrix with parameter overrides and zone-confidence metrics. |
| Sweep sensitivity report (optional) | sensitivity_report | JSON | Sweep summary including normalized span and stability_class. |
| Sweep sensitivity report (optional) | sensitivity_report_html | HTML | Rendered sweep report. |
| Sweep stability map (optional) | stability_map | GeoTIFF | Per-cell sweep stability classes (3=high, 2=medium, 1=low). |
Summary contract (${prefix}_summary.json) | summary | JSON | Summary 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_report | HTML | HTML rendering of the same summary content. |
Important summary keys
| Key | Meaning |
|---|---|
inputs | Contains yield_surface and terrain_context. |
parameters | Contains profile, zone_count, and max_zone_features. |
warnings | Holds truncation messages if the vector layer was capped. |
summary.valid_cells | Number of non-nodata cells assigned to zones. |
summary.zone_histogram | Per-zone cell counts. |
summary.zone_features_written | Number of vector features actually written. |
summary.zone_features_candidate_total | Number of contiguous regions detected before truncation. |
summary.zone_features_omitted | Number of omitted vector regions. |
summary.zone_vector_truncated | true when the GeoPackage is incomplete because of the feature cap. |
output_semantics | Machine-readable semantic tags for zone outputs and confidence diagnostics. |
confidence_contract | Standardized confidence metadata including method and low-confidence summary fields. |
interpretation_warnings | Explicit warnings about planning interpretation and transition-zone validation. |
outputs | Contains paths for yield_stability, management_zones, management_zones_vector, zone_confidence, and summary. |
Returned payload keys
The workflow returns these output keys:
yield_stabilitymanagement_zonesmanagement_zones_vectorzone_confidencerun_matrix_summary(withsweep_spec)sensitivity_report(withsweep_spec)sensitivity_report_html(withsweep_spec)stability_map(withsweep_spec)summaryhtml_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
profilechanges the relative influence of yield and terrain on the stability score.zone_countaffects both the number of classes and how narrow each confidence band becomes.max_zone_featuresonly 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
- Verify the example uses the real runtime argument names.
- Verify
zone_countis within[2, 8]andmax_zone_features > 0. - Verify the GeoPackage fields are exactly
ZONE_ID,ZONE,STABILITY, andCONF. - Verify
summary.jsoncontains the documented top-level and nested keys. - If you intentionally cap
max_zone_features, verifywarningsandsummary.zone_vector_truncatedreport that truncation. - Verify the returned payload includes
yield_stability,management_zones,management_zones_vector,zone_confidence,summary, andhtml_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_truncatedbefore 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_contextand produce a yield-driven zoning baseline. - Terrain-aware run: add
terrain_contextand compare shifts inzone_histogramand vector fragmentation. - Sensitivity run: vary
profileandzone_countto see whether management interpretations are stable. - Delivery run: choose a
max_zone_featureslarge enough to avoid truncation or explicitly document the truncation before handoff.
Related Tools
precision_irrigation_optimizationyield_data_conditioning_and_qaremote_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
- Deliver the three rasters, the GeoPackage, the JSON summary, and the HTML report together.
- Record the final
profile,zone_count, andmax_zone_featuressettings. - State clearly whether
terrain_contextwas used. - Check and report
summary.zone_vector_truncatedbefore distributing the GeoPackage. - Use a distinct
output_prefixfor 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| ndvi | Raster path | Yes | NDVI/vigor input normalized to [0,1]. |
| canopy_temperature | Raster path | No | Optional temperature stress raster normalized to [0,1]. |
| soil_moisture | Raster path | No | Optional moisture-deficit raster normalized to [0,1]. |
| output_prefix | String | Yes | Output 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Intervention priority raster | intervention_priority | GeoTIFF | Continuous urgency score raster in [0,1]. |
| Intervention class raster | intervention_class | GeoTIFF | Discrete class raster (1 lowest urgency to 4 highest urgency). |
| Summary contract | summary | JSON | Status, warnings, diagnostics, and output paths. |
| Optional report | html_report | HTML | Optional 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 thresholdreview: high-priority fraction at/above review threshold
Summary contract also includes:
output_semanticsconfidence_contractinterpretation_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:
- Validate all provided raster inputs are readable.
- Confirm output rasters and summary JSON are produced.
- Verify status and warning logic before intervention rollout.
- 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.7cell 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.
Related Tools
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
| Argument | Type | Required | Geometry / Type Constraints | Description |
|---|---|---|---|---|
| dem | Raster | Yes | Must be a readable raster. | Elevation surface used to derive local slope and terrain penalty. |
| soil_moisture | Raster | No | Must be a readable raster normalized to [0, 1]. It is harmonized to the DEM grid if needed. | Optional soil moisture context raster. |
Parameters
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| profile | String | No | balanced | Supported values: fast, balanced, conservative. Changes terrain penalty and stress boost coefficients. |
| target_moisture | Float | No | 0.6 | Target moisture setpoint in [0, 1]. |
| max_irrigation_mm | Float | No | 18.0 | Maximum irrigation depth in millimetres. Must be greater than 0. |
| sweep_spec | JSON object | No | null | Optional sweep specification. When supplied, the workflow executes multi-run sweeps and emits sweep diagnostics. |
| output_prefix | String | No | precision_irrigation | Prefix used to derive all output artifact names. |
Outputs
Output artifact keys below are runtime outputs, not input parameters.
| Artifact | Runtime Output Key | Type | What It Contains |
|---|---|---|---|
Irrigation prescription raster (${prefix}_irrigation_prescription.tif) | irrigation_prescription | GeoTIFF raster | Per-cell irrigation depth in millimetres, clamped to [0, max_irrigation_mm]. |
Moisture stress risk raster (${prefix}_moisture_stress_risk.tif) | moisture_stress_risk | GeoTIFF raster | Per-cell stress-risk score in [0, 1]. |
VRI zones raster (${prefix}_vri_zones.tif) | vri_zones | GeoTIFF raster | Per-cell zone codes 1, 2, or 3 for low, medium, and high prescription tiers. |
| Sweep run matrix (optional) | run_matrix_summary | CSV | Per-run matrix with parameter overrides and irrigation summary metrics. |
| Sweep sensitivity report (optional) | sensitivity_report | JSON | Sweep summary including normalized span and stability_class. |
| Sweep sensitivity report (optional) | sensitivity_report_html | HTML | Rendered sweep report. |
| Sweep stability map (optional) | stability_map | GeoTIFF | Per-cell sweep stability classes (3=high, 2=medium, 1=low). |
Summary contract (${prefix}_summary.json) | summary | JSON | Top-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_report | HTML | HTML rendering of the JSON summary. |
Important summary keys
| Key | Meaning |
|---|---|
inputs | Contains dem and soil_moisture. |
parameters | Contains profile, target_moisture, and max_irrigation_mm. |
summary.valid_cells | Number of non-nodata cells included in the totals. |
summary.total_prescribed_mm | Total prescribed millimetres across valid cells. |
summary.mean_prescribed_mm | Mean prescription depth across valid cells. |
summary.high_stress_fraction | Fraction of valid cells with stress-risk score greater than or equal to 0.7. |
output_semantics | Machine-readable semantic tags per primary output. |
confidence_contract | Standardized confidence metadata including method and low-confidence summary fields. |
interpretation_warnings | Explicit warning statements about interpretation limits and validation needs. |
outputs | Contains irrigation_prescription, moisture_stress_risk, vri_zones, and summary. |
Returned payload keys
The workflow returns these output keys:
irrigation_prescriptionmoisture_stress_riskvri_zonesrun_matrix_summary(withsweep_spec)sensitivity_report(withsweep_spec)sensitivity_report_html(withsweep_spec)stability_map(withsweep_spec)summaryhtml_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_moisturedirectly changes the moisture deficit and usually has the largest effect on prescription depth.profilechanges both terrain penalty and stress boost, so it affects irrigation depth and stress risk at the same time.max_irrigation_mmacts as both an output cap and the threshold basis for VRI zones1,2, and3.- If
soil_moistureis omitted, the outputs become heuristic and should be treated differently from sensor-informed runs.
QA and Acceptance Criteria
- Verify the example uses the runtime argument names exactly.
- Verify
target_moistureis within[0, 1]andmax_irrigation_mm > 0. - Verify the summary JSON contains the documented keys.
- Verify the returned payload includes
irrigation_prescription,moisture_stress_risk,vri_zones,summary, andhtml_report. - Verify the VRI zone raster contains only
1,2,3, plus nodata. - If
soil_moistureis 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_moisturefor execution-grade recommendations. - Compare
summary.high_stress_fractionacross 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_moistureand compare prescription totals and stress fraction. - Profile sensitivity run: compare
fast,balanced, andconservative. - Delivery run: package the three rasters with the JSON summary and HTML report, and record final parameters.
Related Tools
precision_ag_yield_zone_intelligenceyield_data_conditioning_and_qain_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
- Deliver the three rasters, the JSON summary, and the HTML report together.
- Record whether
soil_moisturewas supplied or omitted. - Record the final
profile,target_moisture, andmax_irrigation_mmvalues. - Review edge-cell nodata behavior before downstream execution use.
- Compare
summary.high_stress_fractionacross 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| dem | Raster | Yes | Digital elevation model (defines slope; influences runoff and soil drainage) |
| soil_moisture | Raster | Yes | Soil moisture saturation raster normalized to [0,1]. |
| rainfall_forecast | Raster | No | Optional 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.
| Artifact | Runtime Output Key | Type | Description |
|---|---|---|---|
| Trafficability score raster | trafficability_score | Raster | Continuous score in [0,1] (higher is better operability). |
| Operation class raster | operation_class | Raster | Class map (1 best to 4 highest caution). |
| Summary contract | summary | JSON | Status, warnings, and key metrics. |
| Optional report | html_report | HTML | Optional report for stakeholder review. |
Summary contract also includes:
output_semanticsconfidence_contractinterpretation_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:
- Confirm DEM and moisture rasters are valid and current.
- Confirm rainfall raster (if provided) aligns to field context.
- Validate operation classes against known wet/steep areas.
- 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-4zones 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.
Related Tools
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
- Provide both score and class outputs.
- Include summary JSON and report HTML.
- Flag any review warnings in the delivery notes.
- State data date/time for moisture and rainfall inputs.
- 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
| Input | Description |
|---|---|
| DEM raster | The elevation raster to classify. |
Key Settings
| Setting | Default | Guidance |
|---|---|---|
flat_slope_threshold | 3.0 | Higher values make more terrain count as flat. |
fine_scale | 2.0 | Smaller values preserve more local terrain detail. |
coarse_scale | 8.0 | Larger values emphasize broader landform patterns. |
pedology_region | none | Use a regional calibration pack when the landscape matches a supported setting. |
What You Get
| Deliverable | Format | Description |
|---|---|---|
landform_units | Raster | Landform class map. |
multiscale_signature | Raster | Three-band diagnostic raster. |
landform_polygons | Vector | Optional polygon layer. |
summary | JSON | Run statistics and interpretation guidance. |
html_report | HTML | Human-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_semanticsconfidence_contractinterpretation_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_distributionlooks plausible for the study area -
If requested,
landform_polygonswas 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_distributionto prioritize field checks in transitional terrain. - Treat mapped class boundaries as guidance for sampling and management zoning, not hard pedologic boundaries.
Related Tools
yield_data_conditioning_and_qaprecision_ag_yield_zone_intelligenceprecision_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.