如何在 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()
我还没有测试过,所以不能保证!
我想知道是否有办法将 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()
我还没有测试过,所以不能保证!