given an sf point geometry column, return id, aggregate_id (e.g. reachcode), and aggregate id measure for each point.
Usage
index_points_to_lines(
  x,
  points,
  search_radius = NULL,
  precision = NA,
  max_matches = 1,
  ids = NULL
)
# S3 method for class 'data.frame'
index_points_to_lines(
  x,
  points,
  search_radius = NULL,
  precision = NA,
  max_matches = 1,
  ids = NULL
)
# S3 method for class 'hy'
index_points_to_lines(
  x,
  points,
  search_radius = NULL,
  precision = NA,
  max_matches = 1,
  ids = NULL
)Arguments
- x
- data.frame network compatible with hydroloom_names. 
- points
- sf or sfc of type POINT in analysis projection. NOTE: x will be projected to the projection of the points layer. 
- search_radius
- units distance for the nearest neighbor search to extend in analysis projection. If missing or NULL, and points are in a lon lat projection, a default of 0.01 degree is used, otherwise 200 m is used. Conversion to the linear unit used by the provided crs of points is attempted. See RANN nn2 documentation for more details. 
- precision
- numeric the resolution of measure precision in the output in meters. 
- max_matches
- numeric the maximum number of matches to return if multiple are found in search_radius 
- ids
- vector of ids corresponding to flowline ids from - xof the same length as and order as- points. If included, index searching will be constrained to one and only one flowline per point.- search radiusis still used with this option but- max_matchesis overridden.
Value
data.frame with five columns, point_id, id, aggregate_id, aggregate_id_measure, and offset. point_id is the row or list element in the point input.
Details
Note 1: Inputs are cast into LINESTRINGS. Because of this, the measure output of inputs that are true multipart lines may be in error.
Note 2: This algorithm finds the nearest node in the input flowlines to identify which flowline the point should belong to. As a second pass, it can calculate the measure to greater precision than the nearest flowline geometry node.
Note 3: Offset is returned in units consistent with the projection of the input points.
Note 4: See dfMaxLength input to sf::st_segmentize() for details of
handling of precision parameter.
Note 5: "from" is downstream – 0 is the outlet "to" is upstream – 100 is the inlet
Examples
# \donttest{
if(require(nhdplusTools)) {
source(system.file("extdata", "sample_flines.R", package = "nhdplusTools"))
if(!any(lengths(sf::st_geometry(sample_flines)) > 1))
  sample_flines <- sf::st_cast(sample_flines, "LINESTRING", warn = FALSE)
point <- sf::st_sfc(sf::st_point(c(-76.87479, 39.48233)),
                    crs = 4326)
index_points_to_lines(sample_flines, point)
point <- sf::st_transform(point, 5070)
index_points_to_lines(sample_flines, point,
                      search_radius = units::set_units(200, "m"))
index_points_to_lines(sample_flines, point, precision = 30)
points <- sf::st_sfc(list(sf::st_point(c(-76.86934, 39.49328)),
                                      sf::st_point(c(-76.91711, 39.40884)),
                                      sf::st_point(c(-76.88081, 39.36354))),
                                 crs = 4326)
index_points_to_lines(sample_flines, points,
                      search_radius = units::set_units(0.2, "degrees"),
                      max_matches = 10)
index_points_to_lines(sample_flines, points,
                      search_radius = units::set_units(0.2, "degrees"),
                      ids = c(11689926, 11690110, 11688990))
 }
#> Warning: crs of lines and points don't match. attempting st_transform of lines
#> Warning: crs of lines and points don't match. attempting st_transform of lines
#>   point_id    COMID      REACHCODE REACHCODE_measure       offset
#> 1        1 11689926 02060003001467          100.0000 6.026811e-05
#> 2        2 11690110 02060003001493          100.0000 7.424781e-03
#> 3        3 11688990 02060003000515            1.9144 8.652186e-03
 # }
