From c51901d6531613fe661c3ea9919c43501b448c81 Mon Sep 17 00:00:00 2001 From: Bock <abock@usgs.gov> Date: Mon, 8 May 2023 10:00:17 -0600 Subject: [PATCH] Major mods see MR for details --- workspace/05_hyRefactor_flines.Rmd | 114 ++++++++++++++++------------- 1 file changed, 65 insertions(+), 49 deletions(-) diff --git a/workspace/05_hyRefactor_flines.Rmd b/workspace/05_hyRefactor_flines.Rmd index 4049aac..ccdb427 100644 --- a/workspace/05_hyRefactor_flines.Rmd +++ b/workspace/05_hyRefactor_flines.Rmd @@ -28,36 +28,33 @@ source("R/hyRefactor_funs.R") source("R/config.R") ``` -Load and filter source NHD Flowline network. +Load and filter source NHD Flowline network. Bring in POIs ```{r flowlines} nhd <- read_sf(out_refac_gpkg, nhd_flowline) cats <- read_sf(out_refac_gpkg, nhd_catchment) -POIs <- read_sf(nav_gpkg, final_poi_layer) +POIs_data <- read_sf(nav_gpkg, poi_data_table) -POI_id <- st_drop_geometry(POIs) +POIs <- read_sf(nav_gpkg, poi_geometry_table) -events <- read_sf(temp_gpkg, split_layer) +POI_id <- st_drop_geometry(POIs) ``` Read POIs and add nhd outlets. Save to a non-spatial table. ```{r refactor} -POIs <- POIs %>% - inner_join(select(st_drop_geometry(nhd), TotDASqKM, COMID, DnHydroseq), by = "COMID") - -# Gages that were collapsed during navigate; might not correspond to their Gage_info COMIDs; -# We know DAR for those are acceptable, so will keep those out of the events generation. -POIs_mv <- filter(POIs, snapped) +POIs_ref <- POIs %>% + inner_join(select(st_drop_geometry(nhd), TotDASqKM, COMID, DnHydroseq), by = c("hy_id" = "COMID")) # Also need to avoid modification to flowlines immediately downstream of POIs # This can cause some hydrologically-incorrect catchment aggregation -POI_downstream <- filter(nhd, Hydroseq %in% POIs$DnHydroseq, AreaSqKM > 0) +POI_downstream <- filter(nhd, Hydroseq %in% POIs_ref$DnHydroseq, AreaSqKM > 0) # build final outlets set -outlets <- POIs %>% - mutate(type = ifelse(!is.na(Type_Term), "terminal", "outlet")) -event_POIs <- filter(POIs, nexus == "1") +term_poi <- filter(POIs_data, hl_reference == "Type_Term") + +outlets <- POIs_ref %>% + mutate(type = ifelse(poi_id %in% term_poi$poi_id, "terminal", "outlet")) # derive list of unique terminal paths TerminalPaths <- unique(nhd$TerminalPa) @@ -74,7 +71,19 @@ write_sf(nhd, out_refac_gpkg, nhd_flowline) nhdplus_flines <- sf::st_zm(filter(nhd, refactor == 1)) %>% st_as_sf() -events <- filter(events, COMID %in% nhdplus_flines$COMID) +if(!needs_layer(nav_gpkg, event_geometry_table)){ + events <- read_sf(nav_gpkg, event_geometry_table) %>% + mutate(event_identifier = as.character(row_number())) + + events_ref <- filter(events, hy_id %in% nhdplus_flines$COMID) %>% + rename(COMID = hy_id) %>% + distinct(COMID, REACHCODE, REACH_meas, event_identifier) + + outlets <- filter(outlets, !poi_id %in% events$poi_id) %>% + rename(COMID = hy_id) +} else { + events_ref <- NULL +} if(needs_layer(out_refac_gpkg, refactored_layer)) { @@ -93,7 +102,7 @@ if(needs_layer(out_refac_gpkg, refactored_layer)) { out_reconciled = tr, three_pass = TRUE, purge_non_dendritic = FALSE, - events = events, + events = events_ref, exclude_cats = c(outlets$COMID, avoid$COMID, POI_downstream$COMID), warn = TRUE) @@ -129,49 +138,56 @@ if(needs_layer(out_refac_gpkg, outlets_layer)) { select(member_COMID = COMID, Hydroseq, event_identifier, event_REACHCODE) %>% inner_join(select(st_drop_geometry(nhd), orig_COMID = COMID, Hydroseq), by = "Hydroseq") - # Subset for events - refactored_events <- refactored %>% - filter(!is.na(event_REACHCODE), !is.na(event_identifier)) + if(!is.null(events_ref)){ + # Subset for events + refactored_events <- refactored %>% + filter(!is.na(event_REACHCODE), !is.na(event_identifier)) - # Get ref_COMID for events - # events_ref_COMID <- mutate(events, event_identifier = as.character(row_number())) %>% - # left_join(select(st_drop_geometry(refactored_events), ref_COMID, event_identifier, orig_COMID), - # by = "event_identifier") - - outlet_events <- filter(outlets, nexus == "1") %>% - left_join(select(st_drop_geometry(refactored_events), member_COMID, event_identifier, orig_COMID), - by = c("COMID" = "orig_COMID")) %>% - filter(!is.na(member_COMID)) %>% - select(-event_identifier) - - # subset for refactored outlets (non-events) - refactored_outlets <- filter(refactored, !member_COMID %in% outlet_events$member_COMID) - - # get ref_COMId for other outlets - outlets_ref_COMID <- filter(outlets, !identifier %in% outlet_events$identifier) %>% - left_join(select(st_drop_geometry(refactored_outlets), member_COMID, orig_COMID), - by = c("COMID" = "orig_COMID")) %>% - group_by(COMID) %>% - filter(member_COMID == max(member_COMID)) %>% - rbind(outlet_events) %>% + event_outlets <- events %>% + inner_join(st_drop_geometry(refactored_events), by = "event_identifier") %>% + select(hy_id, event_id, poi_id, member_COMID) + + # subset for refactored outlets (non-events) + refactored_outlets <- filter(refactored, !member_COMID %in% event_outlets$member_COMID) + + # get ref_COMId for other outlets + outlets_ref <- outlets %>% + left_join(select(st_drop_geometry(refactored_outlets), member_COMID, orig_COMID), + by = c("COMID" = "orig_COMID")) %>% + group_by(COMID) %>% + filter(member_COMID == max(member_COMID)) %>% + select(hy_id = COMID, poi_id, member_COMID, type) + + outlets_ref_COMID <- data.table::rbindlist(list(outlets_ref, event_outlets), fill = TRUE) %>% + st_as_sf() + } else { + # get ref_COMId for other outlets + outlets_ref_COMID <- outlets %>% + left_join(select(st_drop_geometry(refactored), member_COMID, orig_COMID), + by = c("COMID" = "orig_COMID")) %>% + group_by(COMID) %>% + filter(member_COMID == max(member_COMID)) %>% + select(hy_id = COMID, poi_id, member_COMID, type) + } + + final_outlets <- outlets_ref_COMID %>% + st_as_sf() %>% inner_join(select(lookup_table, member_COMID, reconciled_ID), - by = "member_COMID") + by = "member_COMID") - write_sf(outlets_ref_COMID, out_refac_gpkg, outlets_layer) - - + write_sf(final_outlets, out_refac_gpkg, outlets_layer) } else { - outlets_ref_COMID <- read_sf(out_refac_gpkg, outlets_layer) + final_outlets <- read_sf(out_refac_gpkg, outlets_layer) } -check_dups <- outlets_ref_COMID %>% +check_dups_poi <- final_outlets %>% group_by(reconciled_ID) %>% filter(n() > 1) %>% - ungroup() + ungroup -if(nrow(check_dups) > 1){ +if(nrow(check_dups_poi) > 1){ print("Double-check for double POIs") - write_sf(check_dups, temp_gpkg, paste0(dup_pois, "_", rpu_code)) + write_sf(check_dups_poi, out_refac_gpkg, paste0(dup_pois, "_", rpu_code)) } else { print("no double POIs detected") } -- GitLab