Skip to content

Commit f1b0afa

Browse files
committed
update xy subset to work outside conus #6
1 parent 887a405 commit f1b0afa

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

R/find_origin.R

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
find_origin <- function(
99
network,
1010
id,
11+
src,
1112
type = c("id", "comid", "hl_uri", "poi_id", "nldi_feature", "xy")
1213
) {
1314

1415
hydroseq <- NULL
1516
type <- match.arg(type)
1617
query <- structure(id, class = type)
1718

18-
origin <- try(find_origin_query(query, network))
19+
origin <- try(find_origin_query(query, network, src))
1920

2021
if (inherits(origin, "try-error")) {
2122
stop(origin, call. = FALSE)
@@ -40,15 +41,16 @@ find_origin <- function(
4041
#' S3 dispatch on query identifier type
4142
#' @param id A queryable identifier, see `find_origin`.
4243
#' @param network A `dplyr`-compatible object.
44+
#' @param src gpkg layer
4345
#' @returns `network` after applying a [dplyr::filter] expression.
4446
#' @keywords internal
45-
find_origin_query <- function(id, network) {
47+
find_origin_query <- function(id, network, src) {
4648
UseMethod("find_origin_query")
4749
}
4850

4951
#' @method find_origin_query default
5052
#' @keywords internal
51-
find_origin_query.default <- function(id, network) {
53+
find_origin_query.default <- function(id, network, src) {
5254
stop(paste(
5355
"identifier of class",
5456
paste0("`", class(id), "`", collapse = "/"),
@@ -58,36 +60,36 @@ find_origin_query.default <- function(id, network) {
5860

5961
#' @method find_origin_query id
6062
#' @keywords internal
61-
find_origin_query.id <- function(id, network) {
63+
find_origin_query.id <- function(id, network, src) {
6264
id <- unclass(id)
6365
dplyr::filter(network, id == !!id)
6466
}
6567

6668
#' @method find_origin_query comid
6769
#' @keywords internal
68-
find_origin_query.comid <- function(comid, network) {
70+
find_origin_query.comid <- function(comid, network, src) {
6971
hf_id <- NULL
7072
comid <- unclass(comid)
7173
dplyr::filter(network, hf_id == !!comid)
7274
}
7375

7476
#' @method find_origin_query hl_uri
7577
#' @keywords internal
76-
find_origin_query.hl_uri <- function(hl_uri, network) {
78+
find_origin_query.hl_uri <- function(hl_uri, network, src) {
7779
hl_uri <- unclass(hl_uri)
7880
dplyr::filter(network, hl_uri == !!hl_uri)
7981
}
8082

8183
#' @method find_origin_query poi_id
8284
#' @keywords internal
83-
find_origin_query.poi_id <- function(poi_id, network) {
85+
find_origin_query.poi_id <- function(poi_id, network, src) {
8486
poi_id <- unclass(poi_id)
8587
dplyr::filter(network, poi_id == !!poi_id)
8688
}
8789

8890
#' @method find_origin_query nldi_feature
8991
#' @keywords internal
90-
find_origin_query.nldi_feature <- function(nldi_feature, network) {
92+
find_origin_query.nldi_feature <- function(nldi_feature, network, src) {
9193
.Class <- "comid"
9294

9395
nldi_feature <- structure(
@@ -100,12 +102,28 @@ find_origin_query.nldi_feature <- function(nldi_feature, network) {
100102

101103
#' @method find_origin_query xy
102104
#' @keywords internal
103-
find_origin_query.xy <- function(xy, network) {
104-
.Class <- "comid"
105+
find_origin_query.xy <- function(xy, network, src) {
106+
.Class <- "id"
107+
108+
if(grepl("https", src)){
109+
src = paste0("/vsicurl/", src)
110+
} else if(grepl("s3", src)){
111+
src = paste0("/vsis3/", src)
112+
} else {
113+
src = src
114+
}
115+
116+
bb <- sf::st_point(xy) |>
117+
sf::st_sfc(crs = 4326) |>
118+
sf::st_as_sf() |>
119+
sf::st_transform(5070) |>
120+
sf::st_geometry() |>
121+
sf::st_as_text()
105122

106123
xy <- structure(
107-
nhdplusTools::discover_nhdplus_id(point = sf::st_sfc(sf::st_point(xy), crs = 4326)),
108-
class = "comid"
124+
sf::read_sf(src, "divides", wkt_filter = bb) |>
125+
dplyr::pull(id),
126+
class = "id"
109127
)
110128

111129
NextMethod()

0 commit comments

Comments
 (0)