将sp空间数据块组合成单个块

时间:2014-11-24 15:08:22

标签: r sp

我有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对象中?

2 个答案:

答案 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)