如何 select R 中缓冲区外的点?

How to select points that are outside a buffer in R?

我正在使用 class sf 的点数据集和 class sf 的道路网络。我使用 st_buffer() 函数在道路网络中创建了一个缓冲区,我可以使用以下方法成功 select 道路内的点: points_within_roads <- st_intersection(points_shp, roads_buffer)

我需要做相反的事情。我想要 select 道路外的点。是否有允许我这样做的功能?先感谢您。

您可能需要检查 sf::st_disjoint 函数。例如:

# packages
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3

# create some fake data
set.seed(1234)
my_line <- st_linestring(rbind(c(-1, -1), c(1, 1)))
my_points <- st_cast(st_sfc(st_multipoint(matrix(runif(100, -1, 1), ncol = 2))), "POINT")
my_buffer <- st_buffer(my_line, 0.1)

# plot 
par(mar = rep(0, 4))
plot(st_boundary(my_buffer), col = "darkgrey")
plot(my_line, add = TRUE)
plot(my_points[my_buffer, op = st_intersects], add = TRUE, col = "darkred")
plot(my_points[my_buffer, op = st_disjoint], add = TRUE, col = "darkblue")

reprex package (v0.3.0)

于 2020-04-29 创建

此外,我认为您将 sf::st_intersection 拼错了 sf::st_intersects

可以使用!回答这个问题?下面假设您有一个唯一标识符列(ID)。

points_outside_buffer <- filter(points_shp, !points_within_roads$ID %in% points_shp$ID)

我只是用我正在处理的一些数据做了下面的操作,效果很好

too_far <- filter(stations_sf_r, !stations_sf_r$StationCode %in% repeats$StationCode)