我需要'栅格化'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])
有没有人对如何进行有任何建议?非常感谢!
答案 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列中创建一个堆栈。