如何在r中将两张地图连成一张?

时间:2015-03-24 13:07:30

标签: r dictionary ggplot2

我想知道是否有办法加入两个类的地图" 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()

2 个答案:

答案 0 :(得分:1)

首先需要确保多边形名称(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)

答案 1 :(得分:0)

我个人倾向于使用spRbind()包中的rgdal函数,因为无论如何我都会在使用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() 

我还没有对此进行测试,因此无法保证!