首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rasterize多个SpatialPolygonsDataframe属性

Rasterize多个SpatialPolygonsDataframe属性
EN

Stack Overflow用户
提问于 2012-07-23 14:29:45
回答 1查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
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()来将属性转换为光栅层(完全相同)。

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-07-23 16:41:50

嗯,你应该把你的脚本削减到最低限度,以说明你想要做什么。里面有一些与我们无关的东西,它分散了我们的注意力,妨碍了我们解决这个问题。

我认为您想要做的(当您使用一个无文档的隐藏函数raster:::.polygonsToRaster时很难分辨)是在一个位置网格上获取多边形的属性值?你可以通过在你的多边形上叠加一个点网格(而不是光栅)来做到这一点。

我会在这里做一个更小的网格-你的分辨率将花费100倍的时间:

代码语言:javascript
复制
 > 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的值。它的顺序和你的光栅一样。因此:

代码语言:javascript
复制
> POP2010 = myraster
> POP2010[] = overGrid$POP2010
> plot(POP2010)

会给POP2010光栅地图。比较:

代码语言:javascript
复制
> spplot(wrld_simpl,"POP2010")

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11614579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档