我有8个形状文件,每个文件都包含许多河流集水区的轮廓。我已经使用rgdal,rgeos和sp的组合来读取这些内容并形成8个SpatialPolygonsDataFrame对象的列表。我使用的代码如下:
unit.num <- c(13,18,19,29,41,75,79,80)
GetCatchmentShapes <- function(x) {
file.name <- paste("GFMUnit",x,"_GFES_Watersheds_WGS84.shp",sep="")
con = file.path(project.folder,"RawData","Watersheds","GFES Watersheds",file.name)
catchment.list <- readOGR(con,ogrListLayers(con))
}
all.catchments <- sapply(unit.num, GetCatchmentShapes)
如何将all.catchments
的8个元素组合到一个SpatialPolygonsDataFrame对象中?
答案 0 :(得分:3)
您可以使用包spChFIDs(...)
中的sp
函数将多边形ID更改为唯一值,然后使用rbind(...)
组合spatialPolygonDataFrame对象。
以下是使用法国,意大利和德国的shapefile的示例。
## example dataset; shapfiles for France, Italy, Germany
## you have this already...
library(raster)
FR <- getData("GADM",country="FRA",level=1)
IT <- getData("GADM",country="ITA",level=1)
GR <- getData("GADM",country="DEU",level=1)
spList <- list(FR,IT,GR) # list of country shapefiles
# you start here...
library(sp) # loaded with `rgdal`
set.IDS <- function(sp,i) spChFIDs(sp,paste(i,rownames(sp@data),sep="."))
result <- do.call(rbind,mapply(set.IDS,spList,seq_along(spList)))
plot(result)
答案 1 :(得分:1)
这有点混乱,并且可能有更好的方法来创建唯一的行ID,但无论如何都要进行:
假设您的SpatialPolygonsDataFrames
列表名为spdf_list
,并且所有元素都具有相同的字段集:
spdf_list <-
mapply(spChFIDs, spdf_list,
split(as.character(seq_len(sum(sapply(spdf_list, length)))),
unlist(mapply(rep, seq_along(spdf_list),
each=sapply(spdf_list, length)))))
single <- do.call(rbind, spdf_list)