r-用于raster :: calc的类似sp方法或使用sp和raster对象计算sp :: over的方法

时间:2019-04-22 12:49:17

标签: r r-raster sp

我的问题的核心是我想尽量减少在sp格式(即SpatialPixelsDataFrame)和Raster *格式之间转换对象的次数。

任务如下:我从一个SPixDF对象列表开始(因为这是我无法控制的外部函数的输出),因此我需要对它们做两件事。

  1. 我需要将它们平均在一起成为一个对象。该解决方案需要通用化(即处理长度可变的列表)。基本上,我无法找到一种使用SPixDF对象进行raster :: calc()的方法。

  2. 我需要针对#1的解决方案的原因是因为下一步涉及在生成的平均SPixDF表面(即sp :: over)上叠加点。而且sp :: over()无法将SpatialPoints数据叠加在Raster *格式的数据上。

## Data set-up ##
# grid data
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
gridded(meuse.grid) = TRUE
spplot(meuse.grid)

meuse.grid.list <- list(meuse.grid, meuse.grid, meuse.grid)

# point data 
data(meuse)
coordinates(meuse) = ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")


### Analysis steps (involving 2 conversions) ### 

# Convert listed SPixDF to listed RasterLayer
meuse.raster.list <- lapply(meuse.grid.list, function(x) raster(x, layer=5, values=T))

meuse.raster.stack <- stack(meuse.raster.list)  # list of RasterLayers to RasterStack

# task #1
meuse.cmbnd <- calc(meuse.raster.stack, mean)  # average together individual rasters

# Convert back to SPixDF 
meuse.cmbnd.spdf <- as(meuse.cmbnd, "SpatialPixelsDataFrame") 

# task #2
# overlay points on SPixDf grid
Result <- over(meuse, meuse.cmbnd.spdf)

如果sp :: over()可以处理Raster *对象,那么我只需将初始对象转换一次(到Raster *),然后以该格式执行步骤1和2。因此本质上的问题是,我无法弄清楚以相同格式(sp或Raster)执行两个步骤的通用方式。

如果您有任何想法,我将不胜感激!

P.S。这样做的背景是,该操作当前是在我正在使用的函数中编写的,因此我正在尝试加快操作速度。但是因为我必须在sp和Raster类之间保持切换,所以我的解决方案变得比现有的公式慢。

0 个答案:

没有答案