只保留sf中的二维分量data.frame
Retain only two-dimensional components in sf data.frame
我的设置与 中的设置类似。然而,就我而言,我有一个 sf
data.frame 包含不同几何类型的混合,一些 POLYGON
s,一些 GEOMETRYCOLLECTION
s 像这样:
a <- st_polygon(list(cbind(c(0,0,7.5,7.5,0),c(0,-1,-1,0,0))))
b <- st_polygon(list(cbind(c(0,1,2,3,4,5,6,7,7,0),c(1,0,.5,0,0,0.5,-0.5,-0.5,1,1))))
i <- st_intersection(a,b)
a1 <- st_sf(a=1, geom = st_sfc(i))
a2 <- st_sf(a=2, geom = st_sfc(a))
ii <- rbind(a1, a2)
正如上面提到的问题,我想要的是只保留 GEOMETRYCOLLECTION
的那些二维部分,因为最终我对这些几何形状和 st_area()
不适用于 GEOMETRYCOLLECTION
s.
然而,在混合几何的情况下,给出的答案
st_cast(ii)[which(st_is(st_cast(ii), c("POLYGON", "MULTIPOLYGON"))),]
不起作用,因为 st_cast()
使 GEOMETRYCOLLECTION
保持不变。
我不确定这是不是最优雅的解决方案,但它确实有效:
split(ii, 1:nrow(ii)) %>%
purrr::map(~ st_cast(.x) %>%
filter(st_dimension(.) == 2)) %>%
do.call(rbind, .)
你尝试了吗
st_collection_extract(ii)
? st_area
不处理集合是什么意思?我明白了
> st_area(ii)
[1] 0.625 7.500
我的设置与 sf
data.frame 包含不同几何类型的混合,一些 POLYGON
s,一些 GEOMETRYCOLLECTION
s 像这样:
a <- st_polygon(list(cbind(c(0,0,7.5,7.5,0),c(0,-1,-1,0,0))))
b <- st_polygon(list(cbind(c(0,1,2,3,4,5,6,7,7,0),c(1,0,.5,0,0,0.5,-0.5,-0.5,1,1))))
i <- st_intersection(a,b)
a1 <- st_sf(a=1, geom = st_sfc(i))
a2 <- st_sf(a=2, geom = st_sfc(a))
ii <- rbind(a1, a2)
正如上面提到的问题,我想要的是只保留 GEOMETRYCOLLECTION
的那些二维部分,因为最终我对这些几何形状和 st_area()
不适用于 GEOMETRYCOLLECTION
s.
然而,在混合几何的情况下,给出的答案
st_cast(ii)[which(st_is(st_cast(ii), c("POLYGON", "MULTIPOLYGON"))),]
不起作用,因为 st_cast()
使 GEOMETRYCOLLECTION
保持不变。
我不确定这是不是最优雅的解决方案,但它确实有效:
split(ii, 1:nrow(ii)) %>%
purrr::map(~ st_cast(.x) %>%
filter(st_dimension(.) == 2)) %>%
do.call(rbind, .)
你尝试了吗
st_collection_extract(ii)
? st_area
不处理集合是什么意思?我明白了
> st_area(ii)
[1] 0.625 7.500