我需要对SpatialPolygonsDataframe的多个属性进行“栅格化”。然后,我将每个栅格层中的值乘以给定向量的值(例如'gp')。首先,我将使用来自wrld_simpl的maptools数据集。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]) 有人对如何进行有任何建议吗?非常感谢!
发布于 2012-07-23 16:41:50
嗯,你应该把你的脚本削减到最低限度,以说明你想要做什么。里面有一些与我们无关的东西,它分散了我们的注意力,妨碍了我们解决这个问题。
我认为您想要做的(当您使用一个无文档的隐藏函数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的列中创建一个堆栈。
https://stackoverflow.com/questions/11614579
复制相似问题