diff --git a/workspace/02_NHD_navigate.Rmd b/workspace/02_NHD_navigate.Rmd index c6d1b7aae97979852081256d818d68e5bb7d1b82..22769bcfebe605cc6e87d2a432b413e14a0f785c 100644 --- a/workspace/02_NHD_navigate.Rmd +++ b/workspace/02_NHD_navigate.Rmd @@ -347,10 +347,10 @@ if(all(is.na(tmp_POIs$Type_WBIn))) { tmp_POIs <- wb_layers$POIs if(!all(is.na(wb_layers$events))) { - wb_inlet_events <- select(wb_layers$events, -c(id, offset)) %>% + wb_inlet_events <- select(wb_layers$events, -c(id, offset, Hydroseq, ToMeas)) %>% rename(POI_identifier = WBAREACOMI) - # Write out events and outlets + # Write out events and outlets if(!needs_layer(temp_gpkg, split_layer)){ events <- read_sf(temp_gpkg, split_layer) %>% rbind(st_compatibalize(wb_inlet_events,.)) diff --git a/workspace/R/NHD_navigate.R b/workspace/R/NHD_navigate.R index 7348c04389ad7dccee93428453329d0d8cc05d28..dda22721e7498d39839542dbbdc44b44a8e5c332 100644 --- a/workspace/R/NHD_navigate.R +++ b/workspace/R/NHD_navigate.R @@ -303,7 +303,8 @@ segment_creation <- function(nhdDF, routing_fix){ DS_poiFix <- function(POIs_wgeom, nhd){ POIs <- st_drop_geometry(POIs_wgeom) %>% - arrange(COMID) + arrange(COMID) %>% + filter(nexus == FALSE) # DF of downstream segment tocomDF <- select(nhd, COMID, DnHydroseq) %>% @@ -629,6 +630,7 @@ split_elev <- function(in_POI_ID, split_DF, elev_diff, max_DA){ # subset to a given POI_ID split_elev_DF <- filter(split_DF, POI_ID == in_POI_ID) %>% + filter(AreaSqKM > 0) %>% mutate(inc_seg_area = c(TotDASqKM[1], (TotDASqKM - lag(TotDASqKM))[-1])) first_iter <- unique(split_elev_DF$iter) @@ -708,6 +710,7 @@ split_tt <- function(in_POI_ID, split_DF, tt_diff, max_DA){ # subset to a given POI_ID split_tt_DF <- filter(split_DF, POI_ID == in_POI_ID) %>% + filter(AreaSqKM > 0) %>% mutate(inc_seg_area = c(TotDASqKM[1], (TotDASqKM - lag(TotDASqKM))[-1])) first_iter <- unique(split_tt_DF$iter) @@ -1191,15 +1194,29 @@ wbin_POIcreation <- function(nhd, WBs_VPU, data_paths, crs, split_layer){ # Get inlet events and bind with outlets wb_inlet_events <- WB_event(WBs_VPU_areaHR, nhd_inlet, "inlet") %>% st_compatibalize(tmp_POIs) %>% - mutate(nexus = TRUE) + mutate(nexus = TRUE) %>% + inner_join(select(st_drop_geometry(nhd), COMID, Hydroseq, ToMeas), by = "COMID") - wb_inlet_POIs <- filter(wb_inlet_events, REACH_meas < 5) %>% - select(COMID, Type_WBIn = WBAREACOMI, nexus) - - tmp_POIs <- addType(select(wb_inlet_POIs, COMID, Type_WBIn), - tmp_POIs, "WBIn") + # Determine which events are close enough to the end of an upstream flowline to just use that geometry for the POI + wbin_fl_upstream <- filter(nhd, DnHydroseq %in% filter(nhd, COMID %in% wb_inlet_events$COMID)$Hydroseq) %>% + group_by(DnHydroseq) %>% + filter(n() == 1) %>% + ungroup() - wb_inlet_events <- filter(wb_inlet_events, !COMID %in% wb_inlet_POIs$COMID) + if(nrow(wbin_fl_upstream) > 0){ + + wb_inlet_POIs <- filter(wb_inlet_events, REACH_meas < 5 | as.integer(REACH_meas) == as.integer(ToMeas), + COMID %in% wbin_fl_upstream$toCOMID) %>% + inner_join(select(st_drop_geometry(wbin_fl_upstream), usCOMID = COMID, toCOMID), by = c("COMID" = "toCOMID")) %>% + mutate(dsCOMID = COMID, COMID = usCOMID) + + tmp_POIs <- POI_creation(select(st_drop_geometry(wb_inlet_POIs), COMID, Type_WBIn = WBAREACOMI), + nhd, "WBIn") %>% + addType(., tmp_POIs, "WBIn") + + wb_inlet_events <- filter(wb_inlet_events, !COMID %in% wb_inlet_POIs$dsCOMID) + } + if(nrow(wb_inlet_events) > 0){ tmp_POIs <- data.table::rbindlist(list(tmp_POIs,