【发布时间】:2022-01-04 20:43:38
【问题描述】:
我正在尝试按组查找相交的sfc_LINESTRINGs,其中两个相交的sfc_LINESTRING 对象都被分组。这个问题特别与st_intersects 相关,但我认为sf 中的其他操作的工作流程是相同的。 here 和 here 已经回答了类似的问题,但在这两种情况下,只有一个相交对象被分组,无论如何我还不够聪明,无法让它适用于我的数据集。
library(tidyverse)
library(sf)
line1 <- data.frame(lon = c(1, 1.5, 2, 2.5, 2.0, 2.5),
lat = c(1, 1.5, 2, 2.5, 2.1, 2.6),
grp = c("A", "A", "B", "B", "C", "C")
) %>%
st_as_sf(coords = c("lon","lat"), dim = "XY") %>%
group_by(grp) %>%
summarise(do_union = FALSE) %>%
st_cast("LINESTRING") %>%
mutate(grp = c("A","A","B"))
line2 <- data.frame(lon = c(1.2, 1.3, 2.2, 2.3),
lat = c(1, 1.5, 2, 2.5),
grp = c("A", "A", "B", "B")
) %>%
st_as_sf(coords = c("lon","lat"), dim = "XY") %>%
group_by(grp) %>%
summarise(do_union = FALSE) %>%
st_cast("LINESTRING")
plot(line1, lwd = 2, key.pos = 4, reset = FALSE)
plot(line2, lwd = 2, lty = 2, add = TRUE)
我现在想通过相关组找到相交的sfc_LINESTRINGs。不幸的是,我希望使用group_by 的简单解决方案会引发错误:
int <- line1 %>%
group_by(grp) %>%
filter(lengths(st_intersects(line1, line2)) >0)
使用我的实际数据集,我可以让它运行,但是group_by 命令似乎被忽略了,所以我得到了所有相交的对象,而不仅仅是那些按组匹配的对象。具体来说,在这种情况下,结果应该只为每个组选择一个sfc_LINESTRING,即匹配连续的绿色虚线和匹配的连续红色虚线。红线不应与绿线相交。任何建议将不胜感激。
【问题讨论】:
标签: r gis intersection sf