组合shapefile时出错

时间:2015-03-18 06:58:47

标签: r merge gis projection shapefile

我正在尝试合并两个多边形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

对于我可以做什么来启用合并,您有任何解释或解决方案吗?

2 个答案:

答案 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的结果:

enter image description here

如果你想在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)