library(landscapemetrics)
library(raster)
library(fasterize)
library(sf)
library(rasterVis)
library(tidyverse)
# need template raster for fasterize and to define crs up front
# I use a FORE-SCE one here but whatever you decide is best
template <- raster("~/Conservation International/Data/FORE-SCE/CONUS_Landcover_B2/CONUS_B2_y2006.tif")
template
## class : RasterLayer
## dimensions : 11747, 18563, 218059561 (nrow, ncol, ncell)
## resolution : 250, 250 (x, y)
## extent : -2357953, 2282797, 238542.6, 3175293 (xmin, xmax, ymin, ymax)
## crs : +proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs
## source : CONUS_B2_y2006.tif
## names : CONUS_B2_y2006
## values : 0, 255 (min, max)
GDB downloaded from USGS: https://prd-tnm.s3.amazonaws.com/index.html?prefix=StagedProducts/Hydrography/WBD/National/GDB/
# can look at layers in gdb
st_layers(dsn = "WBD_National_GDB/WBD_National_GDB.gdb")
## Driver: OpenFileGDB
## Available layers:
## layer_name geometry_type features fields
## 1 WBDHU12 Multi Polygon 102968 20
## 2 NWISDrainageLine Multi Line String 127876 12
## 3 WBDHU8 Multi Polygon 2400 15
## 4 NonContributingDrainageLine Multi Line String 0 10
## 5 WBDHU4 Multi Polygon 244 15
## 6 WBDHU16 Multi Polygon 7202 20
## 7 NonContributingDrainageArea Multi Polygon 0 12
## 8 NWISDrainageArea Multi Polygon 2733 19
## 9 WBDHU6 Multi Polygon 404 15
## 10 WBDHU2 Multi Polygon 22 15
## 11 WBDHU14 Multi Polygon 8024 20
## 12 WBDLine Multi Line String 394614 8
## 13 WBDHU10 Multi Polygon 18853 17
## 14 FeatureToMetadata NA 424657 3
## 15 ExternalCrosswalk NA 0 7
## 16 HUMod NA 23 5
## 17 MetaProcessDetail NA 1559 16
## 18 MetaSourceDetail NA 1562 27
## 19 ProcessingParameters NA 2 2
## 20 UpdateStatus NA 0 2
# read in gdb with sf
# assuming we care about HU12
watersheds <- sf::st_read(
dsn = "WBD_National_GDB/WBD_National_GDB.gdb",
layer = "WBDHU12"
) %>%
st_transform(crs = crs(template))
## Reading layer `WBDHU12' from data source
## `C:\Users\cbrock\OneDrive - Conservation International Foundation\Documents\Conservation International\Arnhold SPRCLER-CC\arnhold_fellows\WBD_National_GDB\WBD_National_GDB.gdb'
## using driver `OpenFileGDB'
## Simple feature collection with 102968 features and 20 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -179.2297 ymin: -14.61019 xmax: 179.8567 ymax: 71.43957
## Geodetic CRS: NAD83
# look at variables
glimpse(watersheds)
## Rows: 102,968
## Columns: 21
## $ tnmid <chr> "{AAF0D733-828B-4B8E-9E52-388A49AC0A23}", "{F~
## $ metasourceid <chr> "{33EA2180-A425-4AE6-951F-ABCBBF25B893}", "{3~
## $ sourcedatadesc <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ sourceoriginator <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ sourcefeatureid <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ loaddate <dttm> 2017-05-25 02:05:31, 2017-05-25 02:05:42, 20~
## $ referencegnis_ids <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ areaacres <dbl> 13211.47, 10514.34, 15561.22, 31033.21, 28839~
## $ areasqkm <dbl> 53.46, 42.55, 62.97, 125.59, 116.71, 198.76, ~
## $ states <chr> "IA,MN", "MN", "MN", "GA", "GA", "GA", "MN", ~
## $ huc12 <chr> "070200090402", "070200030503", "070200030602~
## $ name <chr> "Judicial Ditch Number Thirteen", "West Branc~
## $ hutype <chr> "S", "S", "S", "S", "S", "S", "S", "S", "S", ~
## $ humod <chr> "NM", "NM", "NM", "NM", "NM", "NM", "NM", "NM~
## $ tohuc <chr> "070200090403", "070200030705", "070200030603~
## $ noncontributingareaacres <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ noncontributingareasqkm <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ globalid <chr> "{991AACA7-E29C-11E2-8094-0021280458E6}", "{A~
## $ shape_Length <dbl> 0.6371651, 0.4568287, 0.7015241, 0.5549508, 0~
## $ shape_Area <dbl> 0.005950712, 0.004850696, 0.007178123, 0.0119~
## $ shape <MULTIPOLYGON [m]> MULTIPOLYGON (((159993 2287..., ~
# to test (efficiently), here I filter to just one state
# then I create a unique row identifier - this is optional
# otherwise can just use as.numeric(huc12) - but numbers are large and messy
ca <- watersheds %>%
filter(states == "CA") %>%
dplyr::select(huc12) %>%
mutate("id" = row_number())
# save id to huc12 'codebook' for safekeeping
codebook <- ca %>%
st_drop_geometry()
glimpse(codebook)
## Rows: 4,222
## Columns: 2
## $ huc12 <chr> "180702010002", "180702020101", "180300122304", "180300122401", ~
## $ id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1~
write_csv(codebook,
"huc12_id_codebook.csv")
ggplot() +
geom_sf(data = ca,
aes(fill = id),
lwd = 0,
show.legend = FALSE) +
theme_void()
ca_tif <- ca %>%
fasterize::fasterize(
raster = template,
field = "id"
)
# view & plot
ca_tif
## class : RasterLayer
## dimensions : 11747, 18563, 218059561 (nrow, ncol, ncell)
## resolution : 250, 250 (x, y)
## extent : -2357953, 2282797, 238542.6, 3175293 (xmin, xmax, ymin, ymax)
## crs : +proj=aea +lat_0=23 +lon_0=-96 +lat_1=29.5 +lat_2=45.5 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs
## source : memory
## names : layer
## values : 1, 4222 (min, max)
rasterVis::levelplot(
crop(ca_tif, extent(ca)),
margin = FALSE
)
# save raster
writeRaster(
ca_tif,
"test_ca_raster.tif",
overwrite = TRUE
)