【问题标题】:R How do I merge polygon features in a shapefile with many polygons? (reproducible code example)R如何在具有许多多边形的shapefile中合并多边形特征? (可重现的代码示例)
【发布时间】:2018-08-27 12:10:12
【问题描述】:

如何在包含多个多边形的 shapefile 中合并多边形特征?

rbind 和 union 只是结合了 shapefile 特征的行,它们实际上并没有合并多边形本身。

以下示例中的所需结果:

如何在 sptemp 中将以下具有重复 ID_2 的 shapefile 合并到单个多边形?

埃塞俄比亚 GADM 级别 2 的以下示例具有重复的 shapefile ID_2 列的前两行(值=1)。我想要具有 79 个功能的 sptemp,前两行是具有重复 ID_2 的行。 sptemp[1,] 的图将显示当前 sptemp[1,] 和 sptemp2[2,] 没有重复之间的边界,即多边形也被合并。

示例代码:

下载、解压缩并加载到埃塞俄比亚 2 级的 R GADM 文件(工作目录为 899kb):

library(curl)
library(rgdal)

curl_download("http://biogeo.ucdavis.edu/data/gadm2.8/shp/ETH_adm_shp.zip",
              destfile=paste0("gadmETH.zip"),
              quiet=FALSE)

unzip(paste0("gadmETH.zip"), exdir="gadmETH", overwrite=FALSE) 


###Load shapefile
sptemp <- readOGR(dsn="gadmETH", layer="ETH_adm2")

前两个多边形的 ID_2 列重复

###You'll see in the first two rows ID_2 is duplicated
df.sptemp <- as.data.frame(sptemp)

View(sptemp)

###I can't just delete one because they are separate polygons 
plot(sptemp[1,], col="blue")
plot(sptemp[2,], add=TRUE, col="red" )

【问题讨论】:

    标签: r merge polygon shapefile


    【解决方案1】:

    注意此方法使用st_union,它将所有“多多边形”组合成单个多边形。这可能不是您真正想要的结果。


    如果您使用library(sf) 而不是sp(它是sp 的继承者),您可以使用st_union 加入几何。

    您也可以在 dplyr 管道序列中执行此操作。

    library(sf)
    sptemp <- sf::st_read(dsn = "~/Desktop/gadmETH/", layer = "ETH_adm2")
    
    library(dplyr)
    
    sptemp %>% 
        group_by(ID_2) %>%
        summarise(geometry = sf::st_union(geometry)) %>%
        ungroup()
    
    # Simple feature collection with 79 features and 1 field
    # geometry type:  GEOMETRY
    # dimension:      XY
    # bbox:           xmin: 33.00154 ymin: 3.398823 xmax: 47.95823 ymax: 14.84548
    # epsg (SRID):    4326
    # proj4string:    +proj=longlat +datum=WGS84 +no_defs
    # # A tibble: 79 x 2
    #      ID_2                       geometry
    #     <dbl>         <sf_geometry [degree]>
    #   1    1. POLYGON ((38.85556 8.938293...
    #   2    2. POLYGON ((42.15579 12.72123...
    #   3    3. POLYGON ((40.17299 14.49028...
    #   4    4. POLYGON ((41.11739 10.93207...
    #   5    5. POLYGON ((40.61546 12.7958,...
    #   6    6. POLYGON ((40.25209 11.24655...
    #   7    7. POLYGON ((36.35452 12.04507...
    #   8    8. POLYGON ((40.11263 10.87277...
    #   9    9. POLYGON ((37.39736 11.60206...
    #   10   10. POLYGON ((38.48427 12.32812...
    #  # ... with 69 more rows
    

    【讨论】:

    • 这很好用!并感谢科幻小说的提示!在 sf 中加载 shapefile 有缺点吗?我正在疯狂地加载性能差异(rgdal 中的埃塞俄比亚 2:用户系统经过 0.999 0.211 1.271,sf 中的同一层:用户系统经过 0.013 0.003 0.017)。我测试了一堆其他的过程,比如 extract 和 velox extract,似乎都可以使用 sf shapefile 而不是 rgdal。在 sf 中加载 shapefile 而不是 rgdal 是否有缺点,或者性能提升是更新的纯粹因素(可能是加载过程转移到 C 或其他东西?)?
    • @NealBarsch 请参阅Benchmarking section in the first sf vignette,了解有关性能的简要讨论。任何其他信息通常链接在the sf github page
    • @NealBarsch - 请注意使用st_union 的影响。它将所有多边形合并为单个多边形。您实际上是在改变形状
    • 意图是在栅格提取中使用更新后的列表作为范围边界,所以只要我不删除任何区域,这应该不是问题。
    • @NealBarsch - 好酷。我会将“注释”保留在顶部,以便其他看到此内容的人知道。
    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2018-01-24
    • 2021-08-15
    • 2021-06-18
    相关资源
    最近更新 更多