R 如何合并具有多个多边形的 shapefile 中的多边形要素? (可重现的代码示例)
R How do I merge polygon features in a shapefile with many polygons? (reproducible code example)
如何在具有多个多边形的 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" )
注意 此方法使用st_union
,将所有'multipolygons'组合成单个多边形。这可能不是您实际想要的结果。
如果您使用 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
如何在具有多个多边形的 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" )
注意 此方法使用st_union
,将所有'multipolygons'组合成单个多边形。这可能不是您实际想要的结果。
如果您使用 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