Skip to content
Snippets Groups Projects
Commit c51901d6 authored by Bock, Andy's avatar Bock, Andy
Browse files

Major mods see MR for details

parent 2a830f5d
No related branches found
No related tags found
1 merge request!169Updates through 07_merge
...@@ -28,36 +28,33 @@ source("R/hyRefactor_funs.R") ...@@ -28,36 +28,33 @@ source("R/hyRefactor_funs.R")
source("R/config.R") source("R/config.R")
``` ```
Load and filter source NHD Flowline network. Load and filter source NHD Flowline network. Bring in POIs
```{r flowlines} ```{r flowlines}
nhd <- read_sf(out_refac_gpkg, nhd_flowline) nhd <- read_sf(out_refac_gpkg, nhd_flowline)
cats <- read_sf(out_refac_gpkg, nhd_catchment) 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. Read POIs and add nhd outlets. Save to a non-spatial table.
```{r refactor} ```{r refactor}
POIs <- POIs %>% POIs_ref <- POIs %>%
inner_join(select(st_drop_geometry(nhd), TotDASqKM, COMID, DnHydroseq), by = "COMID") inner_join(select(st_drop_geometry(nhd), TotDASqKM, COMID, DnHydroseq), by = c("hy_id" = "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)
# Also need to avoid modification to flowlines immediately downstream of POIs # Also need to avoid modification to flowlines immediately downstream of POIs
# This can cause some hydrologically-incorrect catchment aggregation # 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 # build final outlets set
outlets <- POIs %>% term_poi <- filter(POIs_data, hl_reference == "Type_Term")
mutate(type = ifelse(!is.na(Type_Term), "terminal", "outlet"))
event_POIs <- filter(POIs, nexus == "1") outlets <- POIs_ref %>%
mutate(type = ifelse(poi_id %in% term_poi$poi_id, "terminal", "outlet"))
# derive list of unique terminal paths # derive list of unique terminal paths
TerminalPaths <- unique(nhd$TerminalPa) TerminalPaths <- unique(nhd$TerminalPa)
...@@ -74,7 +71,19 @@ write_sf(nhd, out_refac_gpkg, nhd_flowline) ...@@ -74,7 +71,19 @@ write_sf(nhd, out_refac_gpkg, nhd_flowline)
nhdplus_flines <- sf::st_zm(filter(nhd, refactor == 1)) %>% nhdplus_flines <- sf::st_zm(filter(nhd, refactor == 1)) %>%
st_as_sf() 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)) { if(needs_layer(out_refac_gpkg, refactored_layer)) {
...@@ -93,7 +102,7 @@ if(needs_layer(out_refac_gpkg, refactored_layer)) { ...@@ -93,7 +102,7 @@ if(needs_layer(out_refac_gpkg, refactored_layer)) {
out_reconciled = tr, out_reconciled = tr,
three_pass = TRUE, three_pass = TRUE,
purge_non_dendritic = FALSE, purge_non_dendritic = FALSE,
events = events, events = events_ref,
exclude_cats = c(outlets$COMID, avoid$COMID, POI_downstream$COMID), exclude_cats = c(outlets$COMID, avoid$COMID, POI_downstream$COMID),
warn = TRUE) warn = TRUE)
...@@ -129,49 +138,56 @@ if(needs_layer(out_refac_gpkg, outlets_layer)) { ...@@ -129,49 +138,56 @@ if(needs_layer(out_refac_gpkg, outlets_layer)) {
select(member_COMID = COMID, Hydroseq, event_identifier, event_REACHCODE) %>% select(member_COMID = COMID, Hydroseq, event_identifier, event_REACHCODE) %>%
inner_join(select(st_drop_geometry(nhd), orig_COMID = COMID, Hydroseq), by = "Hydroseq") inner_join(select(st_drop_geometry(nhd), orig_COMID = COMID, Hydroseq), by = "Hydroseq")
# Subset for events if(!is.null(events_ref)){
refactored_events <- refactored %>% # Subset for events
filter(!is.na(event_REACHCODE), !is.na(event_identifier)) refactored_events <- refactored %>%
filter(!is.na(event_REACHCODE), !is.na(event_identifier))
# Get ref_COMID for events event_outlets <- events %>%
# events_ref_COMID <- mutate(events, event_identifier = as.character(row_number())) %>% inner_join(st_drop_geometry(refactored_events), by = "event_identifier") %>%
# left_join(select(st_drop_geometry(refactored_events), ref_COMID, event_identifier, orig_COMID), select(hy_id, event_id, poi_id, member_COMID)
# by = "event_identifier")
# subset for refactored outlets (non-events)
outlet_events <- filter(outlets, nexus == "1") %>% refactored_outlets <- filter(refactored, !member_COMID %in% event_outlets$member_COMID)
left_join(select(st_drop_geometry(refactored_events), member_COMID, event_identifier, orig_COMID),
by = c("COMID" = "orig_COMID")) %>% # get ref_COMId for other outlets
filter(!is.na(member_COMID)) %>% outlets_ref <- outlets %>%
select(-event_identifier) left_join(select(st_drop_geometry(refactored_outlets), member_COMID, orig_COMID),
by = c("COMID" = "orig_COMID")) %>%
# subset for refactored outlets (non-events) group_by(COMID) %>%
refactored_outlets <- filter(refactored, !member_COMID %in% outlet_events$member_COMID) filter(member_COMID == max(member_COMID)) %>%
select(hy_id = COMID, poi_id, member_COMID, type)
# get ref_COMId for other outlets
outlets_ref_COMID <- filter(outlets, !identifier %in% outlet_events$identifier) %>% outlets_ref_COMID <- data.table::rbindlist(list(outlets_ref, event_outlets), fill = TRUE) %>%
left_join(select(st_drop_geometry(refactored_outlets), member_COMID, orig_COMID), st_as_sf()
by = c("COMID" = "orig_COMID")) %>% } else {
group_by(COMID) %>% # get ref_COMId for other outlets
filter(member_COMID == max(member_COMID)) %>% outlets_ref_COMID <- outlets %>%
rbind(outlet_events) %>% 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), 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 { } 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) %>% group_by(reconciled_ID) %>%
filter(n() > 1) %>% filter(n() > 1) %>%
ungroup() ungroup
if(nrow(check_dups) > 1){ if(nrow(check_dups_poi) > 1){
print("Double-check for double POIs") 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 { } else {
print("no double POIs detected") print("no double POIs detected")
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment