我正在尝试合并两个多边形shapefile(spatialpolygondataframe,projection)。
我已尝试过该解决方案 Append/Combine Shape Files 但是,我似乎无法使其发挥作用。
rbind
仅适用于SpatialPolygons,因此我摆脱了属性表。我仍然收到以下错误:
rbind(t.poly1, t.poly2, fix.duplicated.IDs=TRUE)
Fehler in function (classes, fdef, mtable) : unable to find an inherited method for function ‘proj4string’ for signature ‘"logical"’
我真的没有权力调整proj4string的格式:
CRS arguments: +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs
对于我可以做什么来启用合并,您有任何解释或解决方案吗?
答案 0 :(得分:1)
如果您只想在一个图上绘制两个(或更多)shapefile,则无需将两个shapefile组合在一起;它们可以简单地作为图层添加到一个图上。
使用英国和爱尔兰的shapefile作为示例,我们从DIVA-GIS获取它们并将它们解压缩到形状/:
download.file("http://biogeo.ucdavis.edu/data/diva/adm/GBR_adm.zip",
destfile = "shapes/GBR_adm.zip")
download.file("http://biogeo.ucdavis.edu/data/diva/adm/IRL_adm.zip",
destfile = "shapes/IRL_adm.zip")
unzip("shapes/GBR_adm.zip", exdir = "shapes/")
unzip("shapes/IRL_adm.zip", exdir = "shapes/")
然后,加载所需的包:
packages <- c("maptools", "rgeos", "rgdal")
sapply(packages, install.packages, dependencies = T)
sapply(packages, require, character.only = T)
rm(packages)
然后将shapefile加载到内存中:
gb <- readOGR("shapes/", "GBR_adm0")
eire <- readOGR("shapes/", "IRL_adm0")
这些可以是情节:
plot(gb)
plot(eire, add = T)
它为您提供了两个shapefile的结果:
如果你想在R中合并/组合两个shapefile,我会使用spRbind()
包中的rgdal
函数:
n <- length(slot(gb, "polygons"))
gbEire <- spChFIDs(eire, as.character(n)) # so shapefiles have unique IDs
gbEire <- spRbind(gbEire, gb)
writeOGR(gbEire, dsn = "shapes/", layer = "gbEire", driver = "ESRI Shapefile")
哪个应该写一个新的shapefile,其中两个原始shapefile合并在shapes/
目录中。
答案 1 :(得分:1)
rbind(t.poly1, t.poly2, fix.duplicated.IDs=TRUE)
Fehler in function (classes, fdef, mtable) : unable to find an inherited method for function ‘proj4string’ for signature ‘"logical"’
它实际上试图获得fix.duplicated.IDs
参数的proj4string。由于您的对象是SpatialPolygons,因此正在使用rbind
包中的sp
而不是链接帖子中提到的包。
你试过了吗?
s1=SpatialPolygons(list(Polygons(list(Polygon(cbind(c(0,1,1,0,0),c(0,0,1,1,0)))),ID=1)))
s2=SpatialPolygons(list(Polygons(list(Polygon(cbind(c(0,1,1,0,0),c(0,0,1,1,0)))),ID=1)))
proj4string(s1)=CRS("+init=epsg:4326")
proj4string(s2)=CRS("+init=epsg:4326")
rbind(s1,s2) # errors...
所以只需使用这个方便的arg:
rbind(s1,s2,makeUniqueIDs=TRUE)