代码之家  ›  专栏  ›  技术社区  ›  RoyalTS

仅保留sf数据中的二维分量。框架

sf gis r
  •  0
  • RoyalTS  · 技术社区  · 7 年前

    我的设置与中类似 this question . 然而,就我而言,我有一个 sf 数据包含不同几何体类型混合的框架,一些 POLYGON s、 一些 GEOMETRYCOLLECTION 是这样的:

    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)
    

    正如上面提到的问题,我只想保留 几何集合 st_area() 无法继续 几何集合 s

    然而,在混合几何的情况下,给出了答案

    st_cast(ii)[which(st_is(st_cast(ii), c("POLYGON", "MULTIPOLYGON"))),]
    

    不起作用 st_cast() 离开 几何集合 未触及。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Edzer Pebesma    7 年前

    你试过了吗

    st_collection_extract(ii)
    

    ? 你说的是什么意思 st_area 不处理集合?我懂了

     > st_area(ii)
    [1] 0.625 7.500
    
        2
  •  0
  •   RoyalTS    7 年前

    我不确定这是不是最优雅的解决方案,但它确实有效:

    split(ii, 1:nrow(ii)) %>% 
      purrr::map(~ st_cast(.x) %>% 
                     filter(st_dimension(.) == 2)) %>% 
      do.call(rbind, .)