r - 应用于列表中的 unionSpatialPolygons
问题描述
我有一个很大的 SpatialPolygonsDataFrame 对象列表,我使用lapply
和gdal_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
解决方案
我不知道是什么导致了错误。您可以尝试的替代路径是
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)
推荐阅读
- python - 我需要选择 1 到 100 之间的立方体值
- ios - Firebase - 按顺序获取数据列表(最后数据优先)
- javascript - 使用 Javascript 和 Node.js (then/catch) 处理错误
- laravel - 如何获取控制器的输入值?
- java - android app Toolbar.setTitle 错误尝试调用虚拟方法'void.androidx.appcompat.widget'
- java - Math.pow 和未定义运算符的类型不匹配 - Java
- angular - 使用道具过滤 createSelector ngrx
- c# - 在 Visual Studio 中运行 asp.net mvc Web 应用程序时无法在 Web 浏览器中加载 CSS 和 Javascript 属性
- python - Selenium:如何访问 Chrome 的“辅助功能”中的“计算属性”?
- javascript - 将类添加到 Vuetify 的 v-select 组件的第一项