如何在 r 中将两个地图合并为一个?

How to join two maps into one in r?

我想知道是否有办法将 class "sp" 的两张地图合并为一张。

比如瑞典+挪威,有一段代码(shp数据下载自:http://www.gadm.org/country):

library(maptools)

mapa_shp_swe <- readShapePoly("C:/r/SWE_adm/SWE_adm0.shp")
mapa_map_swe <- fortify(mapa_shp_swe)

swe <- ggplot(mapa_map_swe, aes(x = long, y = lat, group=group)) + 
  geom_path(size=1) +
  theme_bw()

mapa_shp_nor <- readShapePoly("C:/r/NOR_adm/NOR_adm0.shp")
mapa_map_nor <- fortify(mapa_shp_nor)

nor <- ggplot(mapa_map_nor, aes(x = long, y = lat, group=group)) + 
  geom_path(size=1) +
  theme_bw()

您首先需要确保多边形名称 (row.names) 不同:

 > row.names(mapa_shp_swe)
 [1] "0"
 > row.names(mapa_shp_nor)
 [1] "0"

 mapa_shp_swe <- spChFIDs(mapa_shp_swe,"1") # set polygon name 
 > row.names(mapa_shp_swe)
 [1] "1"

然后你可以简单地绑定它们:

 peninsula <- rbind(mapa_shp_nor,mapa_shp_swe)

我个人倾向于使用 rgdal 包中的 spRbind() 函数,因为无论如何我在使用 shapefile 时都倾向于加载它。

# ensure shapefiles have unique ids
n <- length(slot(mapa_shp_swe, "polygons"))
newShape <- spChFIDs(mapa_shp_nor, as.character(n))

# the actual join
newShape <- spRbind(newShape, mapa_shp_swe)

# you can then write it if you wish
writeOGR(sweNor, dsn = "shapes/", layer = "newShape",
         driver = "ESRI Shapefile")

应该编写一个名为 sweNor 的新 shapefile,并将两个原始 shapefile 合并到 shapes/ 目录中。

至于绘制城市,正如@cmbarbu 指出的那样,这确实应该作为一个单独的问题提出,但您可以尝试添加以下代码:

ggplot(newShape, aes(x = long, y = lat, group=group)) + 
    geom_path(size=1) + 
    geom_point(data = cities, aes(x = x, y = y)) +
    theme_bw() 

我还没有测试过,所以不能保证!