opengeos / whiteboxR

WhiteboxTools R Frontend
https://whiteboxR.gishub.org
Other
172 stars 30 forks source link

Issue using whitebox tool "wbt_flow_accumulation_full_workflow" within an R function #120

Closed maxwell-miller-geo closed 10 months ago

maxwell-miller-geo commented 10 months ago

I am having an issue using the full-flow accumulation workflow with inputs. I can run the function in a standalone version, but not within the custom R function.


dem_processing <- function(dem_file_path, outputLocation, out_dem = "./adjusted_dem.tif", out_pntr = "./flow_direction.tif", out_accum = "./flow_accum.tif") {
  setwd(outputLocation)
  #clipped_dem <- "./clipped_dem.tif" # name to save clip

  # create the flow accumulation
  whitebox::wbt_flow_accumulation_full_workflow(dem = dem_file_path, 
                                                out_dem = out_dem, 
                                                out_pntr = out_pntr, 
                                                out_accum = out_accum, 
                                                out_type = "cells", 
                                                esri_pntr = TRUE)
} 
## Test
dem_processing(dem_file_path = dem, outputLocation = DataStorage, out_dem = "./adjusted_dem", out_pntr = "./flow_direction.tif", out_accum = "./flow_accum.tif")

The error I am getting after running the test file is:

Error running WhiteboxTools (FlowAccumulationFullWorkflow)
  whitebox.exe_path: "C:/Users/mmmds/AppData/Roaming/R/data/R/whitebox/WBT/whitebox_tools.exe"; File exists? TRUE
  Arguments: --run=FlowAccumulationFullWorkflow  --dem="C:\Thesis\Arid-Land-Hydrology\Data\Waterhole\Spatial_Data\QGIS\waterholes_extent.tif" --out_dem="./adjusted_dem" --out_pntr="./flow_direction.tif" --out_accum="./flow_accum.tif" --out_type=cells --esri_pntr -v

System command had status 101
*******************************************
* Welcome to FlowAccumulationFullWorkflow *
* Powered by WhiteboxTools                *
* www.whiteboxgeo.com                     *
*******************************************
Reading data...
Calculating aspect: 0%
Calculating aspect: 1%
Calculating aspect: 2%
Calculating aspect: 3%
Calculating aspect: 4%
Calculating aspect: 5%
Calculating aspect: 6%
Calculating aspect: 7%
Calculating aspect: 8%
Calculating aspect: 9%
Calculating aspect: 10%
Calculating aspect: 11%
Calculating aspect: 12%
Calculating aspect: 13%
Calculating aspect: 14%
Calculating aspect: 15%
Calculating aspect: 16%
Calculating aspect: 17%
Calculating aspect: 18%
Calculating aspect: 19%
Calculating aspect: 20%
Calculating aspect: 21%
Calculating aspect: 22%
Calculating aspect: 23%
Calculating aspect: 24%
Calculating aspect: 25%
Calculating aspect: 26%
Calculating aspect: 27%
Calculating aspect: 28%
Calculating aspect: 29%
Calculating aspect: 30%
Calculating aspect: 31%
Calculating aspect: 32%
Calculating aspect: 33%
Calculating aspect: 34%
Calculating aspect: 35%
Calculating aspect: 36%
Calculating aspect: 37%
Calculating aspect: 38%
Calculating aspect: 39%
Calculating aspect: 40%
Calculating aspect: 41%
Calculating aspect: 42%
Calculating aspect: 43%
Calculating aspect: 44%
Calculating aspect: 45%
Calculating aspect: 46%
Calculating aspect: 47%
Calculating aspect: 48%
Calculating aspect: 49%
Calculating aspect: 50%
Calculating aspect: 51%
Calculating aspect: 52%
Calculating aspect: 53%
Calculating aspect: 54%
Calculating aspect: 55%
Calculating aspect: 56%
Calculating aspect: 57%
Calculating aspect: 58%
Calculating aspect: 59%
Calculating aspect: 60%
Calculating aspect: 61%
Calculating aspect: 62%
Calculating aspect: 63%
Calculating aspect: 64%
Calculating aspect: 65%
Calculating aspect: 66%
Calculating aspect: 67%
Calculating aspect: 68%
Calculating aspect: 69%
Calculating aspect: 70%
Calculating aspect: 71%
Calculating aspect: 72%
Calculating aspect: 73%
Calculating aspect: 74%
Calculating aspect: 75%
Calculating aspect: 76%
Calculating aspect: 77%
Calculating aspect: 78%
Calculating aspect: 79%
Calculating aspect: 80%
Calculating aspect: 81%
Calculating aspect: 82%
Calculating aspect: 83%
Calculating aspect: 84%
Calculating aspect: 85%
Calculating aspect: 86%
Calculating aspect: 87%
Calculating aspect: 88%
Calculating aspect: 89%
Calculating aspect: 90%
Calculating aspect: 91%
Calculating aspect: 92%
Calculating aspect: 93%
Calculating aspect: 94%
Calculating aspect: 95%
Calculating aspect: 96%
Calculating aspect: 97%
Calculating aspect: 98%
Calculating aspect: 99%
Calculating aspect: 100%
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', whitebox-raster\src\lib.rs:1361:69
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
flow_accumulation_full_workflow - Elapsed Time: NA [did not run]

Thank you in advance!

brownag commented 10 months ago

Hi, this error (thread 'main' panicked at 'called Option::unwrap() on a None value', whitebox-raster\src\lib.rs:1361:69) appears to be because the input value you are using out_dem lacks a file extension e.g. .tif. You are using out_dem = "./adjusted_dem"

The following works fine for me with the sample DEM included in the package:

library(whitebox)

wbt_verbose(TRUE)

dem_processing <- function(dem_file_path,
           outputLocation,
           out_dem = "./adjusted_dem.tif",
           out_pntr = "./flow_direction.tif",
           out_accum = "./flow_accum.tif") {
    setwd(outputLocation)
    #clipped_dem <- "./clipped_dem.tif" # name to save clip

    # create the flow accumulation
    whitebox::wbt_flow_accumulation_full_workflow(
      dem = dem_file_path,
      out_dem = out_dem,
      out_pntr = out_pntr,
      out_accum = out_accum,
      out_type = "cells",
      esri_pntr = TRUE
    )
}

x <- sample_dem_data()

## Test
dem_processing(
  dem_file_path = x,
  outputLocation = "C:/workspace2",
  out_dem = "./adjusted_dem.tif", ## NB: file extension used
  out_pntr = "./flow_direction.tif",
  out_accum = "./flow_accum.tif"
)
#> flow_accumulation_full_workflow - Elapsed Time (excluding I/O): 0.225

While the above works, from a stylistic standpoint I would strongly suggest never using setwd() in a custom function like this. You can use file.path() to construct absolute URLs from outputLocation and the various file base names. Or you can use wbt_wd() to set the WhiteboxTools working directory, or you can set your working directory in scripts outside the function.

maxwell-miller-geo commented 10 months ago

Whoops, can't believe I missed that. Thank you for your help!