首页 > 解决方案 > 应用于列表中的 unionSpatialPolygons

问题描述

我有一个很大的 SpatialPolygonsDataFrame 对象列表,我使用lapplygdal_polygonizeR(此处的代码:https : //johnbaumgartner.wordpress.com/2012/07/26/getting-rasters-into-shape-from-r/)在 RasterLayer 列表中对象。unionSpatialPolygons我现在想使用( maptools)合并每个 SpatialPolygonsDataFrame 内接触的多边形部分的边界。我通过调用一个单独的 SpatialPolygonsDataFrame 对象对此进行了测试,它似乎有效。但是,当我尝试使用 对所有 SpatialPolygonsDataFrame 列表执行此操作时lapply,出现错误。请参阅下面的代码(非常抱歉我的示例不可重现),请提供使用lapply或替代的解决方案。谢谢

#convert RasterLayers to SpatialPolygonsDataFrame objects
polyl <- lapply(rastl, gdal_polygonizeR)

#test union of polygon parts within individual SpatialPolygonsDataFrame
tmp = unionSpatialPolygons(polyl[[10]], polyl[[10]]$DN) 

polyl[[10]]  #n = 360 features
tmp          #n = 8 features

#run union on all SpatialPolygonsDataFrame in list
polyl_union <- lapply(polyl, unionSpatialPolygons, SpP = 
polyl, IDs = polyl$DN)  

#Error in FUN(X[[i]], ...) : not a SpatialPolygons object

标签: rgeospatialpolygonlapplymaptools

解决方案


我不知道是什么导致了错误。您可以尝试的替代路径是

library(raster)
x <- bind(poly)
y <- aggregate(x, "DN")

使用示例数据:

set.seed(0)
r <- raster(ncol=5, nrow=5, xmn=0, xmx=1, ymn=0, ymx=1)
values(r) = sample(5, ncell(r), replace=TRUE)
rr <- list()
rr[[1]] <- crop(r, extent(0,0.5,0,0.5))
rr[[2]] <- crop(r, extent(0.5,1,0.5,1))
rr[[3]] <- crop(r, extent(0,0.5,0.5,1))
rr[[4]] <- crop(r, extent(0.5,1,0,0.5))
x <- list(r1, r2, r3, r4)  
y <- lapply(x, rasterToPolygons)


b <- bind(y) 
a <- aggregate(b, 'layer')

plot(r)
plot(a, add=TRUE)

推荐阅读