我有两个具有多个多边形特征的sf对象.这两个对象具有我希望使用多边形将其相互连接的属性.我已经用st_join()
个做到了这一点,但不是以我预期的方式.
当使用st_join()
时,我最初预计,如果我指定参数st_join(x, y, left = TRUE)
,那么如果x
中的所有几何图形都包含在y
中,那么生成的对象将具有与x
相同的特征数量.例如:
library("sf")
library("tidyverse")
map1 <- st_as_sfc(c("POLYGON((0 0 , 0 1 , -1 1 , -1 0, 0 0))",
"POLYGON((0 0 , 0 2 , 2 2 , 2 0, 0 0 ))",
"POLYGON((0 0 , 0 -0.5 , -0.5 -0.5 , -0.5 0, 0 0))")) %>%
st_sf(ID = paste0("poly", 1:3),
att1 = c(letters[1:3]))
map2 <- st_as_sfc(c("POLYGON((0 0 , 0 0.5 , -0.5 .5 , -0.5 0, 0 0))",
"POLYGON((-0.5 0 , -0.5 1 , -1 1 , -1 0 , -0.5 0))",
"POLYGON((0 0 , 0 1 , 1 1 , 1 0 , 0 0))",
"POLYGON((1 1 , 1 2 , 2 2 , 2 1 , 1 1))",
"POLYGON((0 0 , 0 -0.25 , -0.25 -0.25 , -0.25 0 , 0 0))")) %>%
st_sf(ID = paste0("poly", 4:8)) %>%
mutate(att2 = c(LETTERS[1:5]))
map3 <- st_join(map2,
map1,
left = TRUE)
我的期望是map3
将具有5个特征,因为map2
中的所有多边形都唯一地包含在map1
的特征中.然而,事实并非如此,不重叠的多边形似乎已经相互连接:
Simple feature collection with 12 features and 4 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -1 ymin: -0.25 xmax: 2 ymax: 2
CRS: NA
First 10 features:
ID.x att2 ID.y att1 .
1 poly4 A poly1 a POLYGON ((0 0, 0 0.5, -0.5 ...
1.1 poly4 A poly2 b POLYGON ((0 0, 0 0.5, -0.5 ...
1.2 poly4 A poly3 c POLYGON ((0 0, 0 0.5, -0.5 ...
2 poly5 B poly1 a POLYGON ((-0.5 0, -0.5 1, -...
2.1 poly5 B poly3 c POLYGON ((-0.5 0, -0.5 1, -...
3 poly6 C poly1 a POLYGON ((0 0, 0 1, 1 1, 1 ...
3.1 poly6 C poly2 b POLYGON ((0 0, 0 1, 1 1, 1 ...
3.2 poly6 C poly3 c POLYGON ((0 0, 0 1, 1 1, 1 ...
4 poly7 D poly2 b POLYGON ((1 1, 1 2, 2 2, 2 ...
5 poly8 E poly1 a POLYGON ((0 0, 0 -0.25, -0....
我通过使用参数largest = TRUE
成功获得了预期结果,如下所示:
map4 <- st_join(map2,
map1,
left = TRUE,
largest = TRUE)
然而,我不明白为什么这会给我想要的输出,但省略largest = TRUE
却不能.
感谢您抽出时间提供帮助!