【问题标题】:Rasterize multiple SpatialPolygonsDataframe attributes栅格化多个 SpatialPolygonsDataframe 属性
【发布时间】:2012-07-24 17:53:59
【问题描述】:

我需要“光栅化”SpatialPolygonsDataframe 的多个属性。然后,我将每个栅格图层中的值乘以给定向量的值(例如“gp”)。我使用来自maptoolswrld_simpl 数据集作为开始。 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])  

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

【问题讨论】:

    标签: r


    【解决方案1】:

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

    认为您正在尝试做的事情(当您使用未记录的隐藏函数 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 的列中进行堆叠。

    【讨论】:

    • 感谢您的意见 Spacedman。我已将脚本减少到最低限度,以说明我需要做什么。您提出的建议与我现在所做的基本相同。但我的主要问题是我当时正在创建一个文件(总共 91 个),并且我想创建一个循环而不必运行脚本 91 次。对此问题的任何意见将不胜感激。
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2012-03-08
    • 2021-12-14
    • 2013-01-18
    • 2015-04-21
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多