hfutils provides the base utilities needed for hydrofabric creation
and manipulation.
You can install the development version of hfutils from
GitHub with:
# install.packages("remotes")
remotes::install_github("lynker-spatial/hfutils")library(hfutils)
library(dplyr)gpkg <- '/Users/mikejohnson/hydrofabric/v3.0/reference_fabric.gpkg'
hfutils::as_ogr(gpkg)
#> [1] "divides" "flowpaths" "hydrolocations" "pois"
#> [5] "events" "network"
#> <OGRSQLConnection>
#> DSN: /Users/mikejohnson/hydrofabric/v3.0/reference_fabric.gpkg...
#> tables: divides, flowpaths, hydrolocations, pois, events, networkhfutils::as_ogr(gpkg, "divides")
#> # Source: table<"divides"> [?? x 6]
#> # Database: OGRSQLConnection
#> divide_id vpuid areasqkm has_flowpath flowpath_id geom
#> <dbl> <chr> <dbl> <lgl> <dbl> <MULTIPOLYGON [m]>
#> 1 931090014 01 8.61 TRUE 931090014 (((2068815 2313015, 206890…
#> 2 931080009 01 0.158 TRUE 931080009 (((1933035 2277735, 193315…
#> 3 931080008 01 0.296 TRUE 931080008 (((1933035 2277735, 193300…
#> 4 931080007 01 1.99 TRUE 931080007 (((1932855 2277345, 193285…
#> 5 931080006 01 2.33 TRUE 931080006 (((1931025 2278695, 193102…
#> 6 931070173 01 1.21 TRUE 931070173 (((1967025 2413755, 196702…
#> 7 931070172 01 7.72 TRUE 931070172 (((1966455 2412855, 196651…
#> 8 931060011 01 1.78 TRUE 931060011 (((2021925 2487855, 202204…
#> 9 931060010 01 1.85 TRUE 931060010 (((2021925 2487855, 202174…
#> 10 931060009 01 0.00765 TRUE 931060009 (((1990665 2513595, 199057…
#> # ℹ more rowshfutils::as_ogr(gpkg, "divides") |>
select(divide_id, areasqkm)
#> # Source: SQL [?? x 2]
#> # Database: OGRSQLConnection
#> divide_id areasqkm
#> <dbl> <dbl>
#> 1 931090014 8.61
#> 2 931080009 0.158
#> 3 931080008 0.296
#> 4 931080007 1.99
#> 5 931080006 2.33
#> 6 931070173 1.21
#> 7 931070172 7.72
#> 8 931060011 1.78
#> 9 931060010 1.85
#> 10 931060009 0.00765
#> # ℹ more rowshfutils::as_ogr(gpkg, "divides") |>
filter(vpuid == "01") |>
st_as_sf()
#> Simple feature collection with 67880 features and 5 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: 1824825 ymin: 2215935 xmax: 2255715 ymax: 3086925
#> Projected CRS: NAD83 / Conus Albers
#> # A tibble: 67,880 × 6
#> divide_id vpuid areasqkm has_flowpath flowpath_id geom
#> <dbl> <chr> <dbl> <lgl> <dbl> <MULTIPOLYGON [m]>
#> 1 931090014 01 8.61 TRUE 931090014 (((2068815 2313015, 206890…
#> 2 931080009 01 0.158 TRUE 931080009 (((1933035 2277735, 193315…
#> 3 931080008 01 0.296 TRUE 931080008 (((1933035 2277735, 193300…
#> 4 931080007 01 1.99 TRUE 931080007 (((1932855 2277345, 193285…
#> 5 931080006 01 2.33 TRUE 931080006 (((1931025 2278695, 193102…
#> 6 931070173 01 1.21 TRUE 931070173 (((1967025 2413755, 196702…
#> 7 931070172 01 7.72 TRUE 931070172 (((1966455 2412855, 196651…
#> 8 931060011 01 1.78 TRUE 931060011 (((2021925 2487855, 202204…
#> 9 931060010 01 1.85 TRUE 931060010 (((2021925 2487855, 202174…
#> 10 931060009 01 0.00765 TRUE 931060009 (((1990665 2513595, 199057…
#> # ℹ 67,870 more rows# hfutils::as_ogr('/vsis3/lynker-spatial/hydrofabric/v2.2/conus/conus_nextgen.gpkg')## Accumulate Downstream
system.time({
da <- hfutils::as_ogr(gpkg, 'flowpaths') |>
filter(vpuid == "01") |>
st_as_sf() |>
accumulate_downstream(attr = "areasqkm")})
#> user system elapsed
#> 0.911 0.491 1.550
head(da)
#> [1] 15.66720 11.12805 4.44600 6.52365 4.53420 335.51145
## Hydrosequence
system.time({
hs <- hfutils::as_ogr(gpkg,
'flowpaths') |>
filter(vpuid == "01") |>
st_as_sf() |>
get_hydroseq()
})
#> user system elapsed
#> 0.900 0.488 1.398
head(hs)
#> [1] 806 22724 22726 22725 22727 28139Please reach out via an issue or PR if you have comments, concerns, or questions!