代码之家  ›  专栏  ›  技术社区  ›  Neal Barsch

R如何将多边形特征合并到具有多个多边形的形状文件中?(可复制代码示例)

  •  11
  • Neal Barsch  · 技术社区  · 7 年前

    如何在一个具有多个多边形的形状文件中合并多边形特征?

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

    以下示例中的预期结果:

    如何使下面具有重复ID\u 2的shapefile合并到sptemp中的单个多边形?

    埃塞俄比亚GADM level 2的以下示例复制了shapefile ID\u 2列的前两行(值=1)。我希望sptemp具有79个特性,将前两行(ID\u 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\u 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" )
    
    1 回复  |  直到 7 年前
        1
  •  19
  •   SymbolixAU Adam Erickson    4 年前

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


    如果您使用 library(sf) 而不是 sp (它是 sp公司 ),您可以使用 st\U联合 连接几何图形。

    你可以在 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