栅格化多个SpatialPolygonsDataframe属性

时间:2012-07-23 14:29:45

标签: r

我需要'栅格化'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])  

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

1 个答案:

答案 0 :(得分:3)

嗯,你应该把你的剧本减少到最低限度,以说明你想要做什么。那里有一些不相关的东西,让我们分心,妨碍我们把它弄清楚。

我想要做的 你想要做什么(并且很难分辨你何时使用未记录的隐藏函数栅格:::。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列中创建一个堆栈。