如何加入两个地图成一个r中?(How to join two maps into one in r?

2019-10-22 08:17发布

我想知道如果有一种方法可以加入班级“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()

Answer 1:

我个人倾向于使用spRbind()函数在rgdal包,因为我往往有这样的装载形状文件工作时反正。

# 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")

这应该写一个所谓的新Shape文件sweNor既原始形状文件合并的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() 

所以没有保证我没有测试过这呢!



Answer 2:

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


文章来源: How to join two maps into one in r?