合并R中的两个shapefile

时间:2017-11-06 14:30:18

标签: r maps shapefile sp

我有一个meso级别的{shape sul.ms)形状文件,它有一个名为MesoRegion的唯一属性

library(brazilmaps)
sul.ms <- get_brmap(geo="MesoRegion",geo.filter = list(State = 43),class="SpatialPolygonsDataFrame")
plot(sul.ms)
sul.ms@data$MesoRegion

 [1] 4301 4302 4303 4304 4305 4306 4307

enter image description here

我有另一个shapefile(从here下载)

在市级(来自其他来源)。此文件还具有名为ID的唯一属性。

library(rgdal)
sul.mun <- readOGR("~","Rio_Grande_do_Sul_municipalities")
plot(sul.mun)
sul.mun@data$ID # should give 497 ID

State map

我可以将它们绘制在彼此之上,这表明每个城市都是中东地区的一部分,如下所示:

enter image description here

我想创建一个表,其中一列中的市政ID和另一列中的相应MesoRegion。在R中有没有办法做到这一点,假设有一些方法可以使用单独的mesoregion剪切市政当局并将中间区域的名称分配给剪切区域。

编辑:我尝试使用函数over

library(sp)
over(sul.mun, sul.ms,returnList = T)

这是有效的。但是,我认为有一个问题是一个市政当局是两个中间区域的一部分。不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

这是一个基于“sf”函数使用的可能解决方案:

library(sf)
#convert to "sf"
sul.ms_sf  <- sf::st_as_sf(sul.ms)
sul.mun_sf <- sf::st_as_sf(sul.mun)

# find centroids of the different municipalities
centroids  <- sf::st_centroid(sul.mun_sf)

# find out to which region they belong
inters <- sf::st_intersection(sul.ms_sf, centroids) %>% 
  sf::st_set_geometry(NULL)

# re-join with the municipalities to get the additional
# "nome" column
out <- dplyr::left_join(sul.mun_sf, inters) %>% 
  sf::st_sf(sf_column_name = "geometry")
head(out)  

Simple feature collection with 6 features and 7 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: -56.66047 ymin: -31.95874 xmax: -51.95982 ymax: -27.53024
epsg (SRID):    NA
proj4string:    +proj=longlat +ellps=GRS80 +no_defs
    ID CD_GEOCODM  NM_MUNICIP                           nome MesoRegion State Region
1 4609    4300034     ACEGUÃ         SUDOESTE RIO-GRANDENSE       4306    43      4
2 4610    4300059 ÃGUA SANTA         NOROESTE RIO-GRANDENSE       4301    43      4
3 4611    4300109       AGUDO CENTRO OCIDENTAL RIO-GRANDENSE       4303    43      4
4 4612    4300208   AJURICABA         NOROESTE RIO-GRANDENSE       4301    43      4
5 4613    4300307     ALECRIM         NOROESTE RIO-GRANDENSE       4301    43      4
6 4614    4300406    ALEGRETE         SUDOESTE RIO-GRANDENSE       4306    43      4

plot(out["nome"])

plot

似乎工作,除了东部的一个区域保持“NA”。