R - SpatialPolygons列表中的SpatialPolygonsDataFrame

时间:2017-10-23 13:11:41

标签: r spatial sp

我正在寻找一种从SpatialPolygons列表中创建SpatialPolygonsDataFrame的方法吗?

下面是一个多边形列表的示例,应该从中创建包含列表中所有多边形的SpatialPolygonsDataFrame。

编辑:必须从SpatialPolygons列表中创建SpatialPolygonsDataFrame!由于我的原始数据不包含SpatialPolygons作为单独的值,而是包含SpatialPolygons列表。 我收到此列表的方式与示例中的方式不同。我发布了示例以显示列表的数据结构。

https://stat.ethz.ch/pipermail/r-sig-geo/2013-January/017225.html获取的SpatialPolygons列表示例:

library(sp)
grd <- GridTopology(c(0.5, 0.5), c(1, 1), c(6, 6))
Spol <- as(grd, "SpatialPolygons")
list_of_SPolsu <- lapply(slot(Spol, "polygons"), function(x)
   SpatialPolygons(list(x)))
list_of_SPols <- lapply(slot(Spol, "polygons"), function(x) {
   Pol <- x
   slot(Pol, "ID") <- "1"
   SpatialPolygons(list(Pol))
})

问候!

2 个答案:

答案 0 :(得分:4)

这很简单......

试试这个:

#Creating a dataframe with Spol IDs
Spol_df<- as.data.frame(sapply(slot(Spol, "polygons"), function(x) slot(x, "ID")))

#Making the IDs row names 
row.names(Spol_df) <- sapply(slot(Spol, "polygons"), function(x) slot(x, "ID"))

# Making the spatial polygon data frame
Spol_SPDF <- SpatialPolygonsDataFrame(Spol, data =Spol_df)

让我知道它是否有效

编辑:

只是根据问题中的编辑来完成答案... 关于如何从多边形列表中创建SpatialPolygon的解决方案来自提供的链接:

#Getting polygon IDs
IDs <- sapply(list_of_SPols, function(x)
  slot(slot(x, "polygons")[[1]], "ID"))

#Checking
length(unique(IDs)) == length(list_of_SPols)

#Making SpatialPolygons from list of polygons
Spol <- SpatialPolygons(lapply(list_of_SPols,
                                function(x) slot(x, "polygons")[[1]]))

答案 1 :(得分:2)

您可以从SpatialPolygonDataFrame对象的列表中创建SpatialPolygon对象的列表,如下所示:

z <- lapply(list_of_SPols, function(i) SpatialPolygonsDataFrame(i, data.frame(id=1:length(i)), match.ID = FALSE))

或者,因为在这种情况下,所有SpatialPolygon对象的长度均为1

df <- data.frame(id=1)
z <- lapply(list_of_SPols, function(i) SpatialPolygonsDataFrame(i, df, match.ID = FALSE))

您还可以先将SpatialPolygon合并为一个对象

library(raster)
sp <- bind(list_of_SPols)
spdf <- SpatialPolygonsDataFrame(sp, data.frame(id=1:length(sp)))    

(以上可能无法解决OP所遇到的问题,但确实可以解决所提出的问题-因此,此答案可能对寻求该问题答案的人们有所帮助。)