我想知道是否有办法加入两个类的地图" 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()
答案 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()
我还没有对此进行测试,因此无法保证!