spatial_edge_predicates | R Documentation |
These functions allow to interpret spatial relations between edges and
other geospatial features directly inside filter
and mutate
calls. All functions return a logical
vector of the same length as the number of edges in the network. Element i
in that vector is TRUE
whenever the chosen spatial predicate applies
to the spatial relation between the i-th edge and any of the features in
y
.
edge_intersects(y, ...)
edge_is_disjoint(y, ...)
edge_touches(y, ...)
edge_crosses(y, ...)
edge_is_within(y, ...)
edge_contains(y, ...)
edge_contains_properly(y, ...)
edge_overlaps(y, ...)
edge_equals(y, ...)
edge_covers(y, ...)
edge_is_covered_by(y, ...)
edge_is_within_distance(y, ...)
edge_is_nearest(y)
y |
The geospatial features to test the edges against, either as an
object of class |
... |
Arguments passed on to the corresponding spatial predicate
function of sf. See |
See geos_binary_pred
for details on each spatial
predicate. The function edge_is_nearest
instead wraps around
st_nearest_feature
and returns TRUE
for element i
if the i-th edge is the nearest edge to any of the features in y
.
Just as with all query functions in tidygraph, these functions are meant to
be called inside tidygraph verbs such as mutate
or
filter
, where the network that is currently being
worked on is known and thus not needed as an argument to the function. If
you want to use an algorithm outside of the tidygraph framework you can use
with_graph
to set the context temporarily while the
algorithm is being evaluated.
A logical vector of the same length as the number of edges in the network.
Note that edge_is_within_distance
is a wrapper around the
st_is_within_distance
predicate from sf. Hence, it is based on
'as-the-crow-flies' distance, and not on distances over the network.
library(sf, quietly = TRUE)
library(tidygraph, quietly = TRUE)
# Create a network.
net = as_sfnetwork(roxel) |>
st_transform(3035)
# Create a geometry to test against.
p1 = st_point(c(4151358, 3208045))
p2 = st_point(c(4151340, 3207520))
p3 = st_point(c(4151756, 3207506))
p4 = st_point(c(4151774, 3208031))
poly = st_multipoint(c(p1, p2, p3, p4)) |>
st_cast('POLYGON') |>
st_sfc(crs = 3035)
# Use predicate query function in a filter call.
intersects = net |>
activate(edges) |>
filter(edge_intersects(poly))
oldpar = par(no.readonly = TRUE)
par(mar = c(1,1,1,1))
plot(st_geometry(net, "edges"))
plot(st_geometry(intersects, "edges"), col = "red", lwd = 2, add = TRUE)
par(oldpar)
# Use predicate query function in a mutate call.
net |>
activate(edges) |>
mutate(disjoint = edge_is_disjoint(poly)) |>
select(disjoint)
# Use predicate query function directly.
intersects = with_graph(net, edge_intersects(poly))
head(intersects)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.