返回值的函数(velox 光栅)
Posted
技术标签:
【中文标题】返回值的函数(velox 光栅)【英文标题】:Function to return values (velox raster) 【发布时间】:2017-04-16 17:06:25 【问题描述】:我正在使用新的 velox 提取功能来加快 shapefile 的光栅提取速度。
旧 raster 包的提取函数默认返回一个单元格值列表,例如当您使用以下格式时:
val.list <- raster::extract(raster, shapefile)
新的 velox 包需要一个 fun= 参数,而我这辈子都无法让它返回值:
vx.raster <- velox(raster)
vx.vals <- vx.raster$extract(shapefile, fun=??????)
I have tried:
fun=values (returns error Error during wrapup: unable to find an inherited method for function 'values' for signature 'numeric'
fun=function(x)values(x) (same error as above)
我觉得 fun=sum, fun=mean 工作得很好。价值观怎么了?我是否只是遗漏了一些关于数字向量并返回值列表的明显内容(我觉得这是最有可能的情况)?
谢谢!
【问题讨论】:
来自?extract
: "fun: (...) 该函数应该将单个数值向量作为参数并返回单个值"。来自?value
:“值:栅格值的向量或矩阵”。会不会是这个问题?
fun=function(x)x
或 fun=as.numeric
怎么样?
fun=function(x)x 和 fun=as.numeric 都不起作用。但它确实有一个不同的错误,“Out[p, k]
如果你看一下函数velox_extract
的代码:github.com/cran/velox/blob/master/R/velox_extract.R似乎输出是一个数据框,每个多边形(p)只有一个值,每一列都有一个值多边形相关的数据框。值列表的情况显然没有在这里实现。
我得出了同样的结论。感谢StatnMap。我还通过电子邮件向软件包的开发人员发送了电子邮件,以查看是否有任何值解决方案,但同意,查看该代码似乎输出是每个多边形的单个值......太糟糕了,因为 raster::extract 非常慢大量的多边形。像这里gis.stackexchange.com/questions/130522/… 那样使用带有裁剪和getvalues 的foreach 循环确实会有所帮助,但是如果裁剪尺寸相对于多边形中的像素非常小,则会出现问题。
【参考方案1】:
velox 的开发版本(在 github 上)现在允许从 VeloxRaster_extract
查询返回“原始”栅格值。只需将fun
参数设置为NULL
。
这是一个例子:
library(devtools)
install_github('hunzikp/velox')
library(velox)
## Make VeloxRaster with two bands
set.seed(0)
mat1 <- matrix(rnorm(100), 10, 10)
mat2 <- matrix(rnorm(100), 10, 10)
vx <- velox(list(mat1, mat2), extent=c(0,1,0,1), res=c(0.1,0.1),
crs="+proj=longlat +datum=WGS84 +no_defs")
## Make SpatialPolygons
library(sp)
library(rgeos)
coord <- cbind(0.5, 0.5)
spoint <- SpatialPoints(coords=coord)
spols <- gBuffer(spgeom=spoint, width=0.5)
## Extract
vx$extract(sp=spols, fun=NULL)$buffer
# [,1] [,2]
# [1,] 1.27242932 0.04658030
# [2,] 0.41464143 -1.13038578
# [3,] -1.53995004 0.57671878
# etc....
【讨论】:
【参考方案2】:试试这个sn-p
vx.raster$crop(shapefile).
【讨论】:
以上是关于返回值的函数(velox 光栅)的主要内容,如果未能解决你的问题,请参考以下文章