0

我需要“光栅化” a 的多个属性SpatialPolygonsDataframe。然后,我将每个栅格图层中的值乘以给定向量的值(例如“gp”)。我wrld_simplmaptools一开始就使用数据集。wrld_simpl 有一个名为 POP2005 的属性,我将添加更多与年份 (2010:2100) 的人口估计相对应的属性。我正在尝试编写一个循环或函数,这样我就不必手动栅格化每个属性,然后独立计算它们的新值,然后一次又一次地重复所有这些步骤。

data(wrld_simpl)  
gp <- seq(1,246)  

myraster <- raster(nrow = 572, ncol = 1440, xmn = -180, xmx = 180, ymn= -58, ymx = 85)  

因为 rasterize() 函数不允许我从 spatialPolygonsDataframe 中选择特定属性,所以我使用 raster:::.polygonsToRaster() 代替(完全相同)将我的属性转换为栅格图层。

rastergp <- raster:::.polygonsToRaster(wrld_simpl, myraster, field = wrld_simpl$POP2005)  
stackraster <- stack(rastergp, gp)  
estimation <- calc(stackraster, fun = function(x) x[1]*x[2])  

有人对如何进行有任何建议吗?非常感谢!

4

1 回答 1

3

嗯,您应该将您的脚本缩减到最低限度,以说明您正在尝试做什么。里面有一些不相关的东西,会分散注意力,妨碍我们弄清楚。

认为您正在尝试做的事情(当您使用未记录的隐藏函数 raster:::.polygonsToRaster 时很难说)是在位置网格中获取多边形属性的值?您可以通过在多边形上覆盖点网格(而不是栅格)来做到这一点。

我将在这里为较小的网格进行此操作 - 您的分辨率将花费 100 倍的时间:

 > myraster <- raster(nrow = 57, ncol = 144, xmn = -180, xmx = 180, ymn= -58, ymx = 85)
 > pts = SpatialPoints(xyFromCell(myraster,1:prod(dim(myraster))),proj4string=CRS(proj4string(wrld_simpl)))
 > overGrid = pts %over% wrld_simpl

现在 overGrid 只是一个标准数据框,其中所有网格点的值都来自 wlrd_simpl。它的顺序与您的栅格相同。因此:

> POP2010 = myraster
> POP2010[] = overGrid$POP2010
> plot(POP2010)

将映射 POP2010 栅格。相比:

> spplot(wrld_simpl,"POP2010")

这样就完成了所有的覆盖业务。然后,您可以从 overGrid 的列中创建一个堆栈。

于 2012-07-23T16:41:50.753 回答