2017-04-16 5 views
2

새로운 velox 추출 함수를 사용하여 쉐이프 파일에 의한 래스터 추출 속도를 높이고 있습니다. 기본적으로값을 반환하는 함수 (velox raster)

오래된 래스터 패키지의 추출 기능은 셀 값의 목록을 반환 예를 들어, 당신은 아래의 형식을 사용하는 경우 : 새로운 Velox의 패키지에 재미 = 인수가 필요합니다

val.list <- raster::extract(raster, shapefile) 

을 나는 위해 할 수 없습니다 저의 인생은 값을 ​​돌려 주려고합니다 :

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) 

나는 재미 있고 합리적이며 즐겁다. 가치가 뭐야? 난 그냥 숫자 벡터에 대한 명백한 뭔가를 놓치고 값 목록을 반환 (나는 가장 가능성이 사건이 있다고 느낀다)?

감사합니다.

+0

'extract' : "재미 : (...) 인수로 단일 숫자 벡터를 가지고 하나의 값을 반환해야하는 기능". '? value' : "Value : 래스터 값의 벡터 또는 행렬". 그게 문제일까요? – AkselA

+0

'fun = function (x) {x}'또는'fun = as.numeric'은 어떻습니까? –

+0

fun = function (x) {x}도 재미도 = as.numeric도 작동하지 않습니다. 그래도 "Error in out [p, k] <- fun (valmat [, k])"라는 다른 오류가 있습니다. velox 추출물의 숫자 벡터 출력은 모든 값의 단일 벡터이며, 모양 파일의 다각형 수만의 velox 래스터 행렬에 병합하려고 시도했을 수 있습니다. 따라서 값은 velox 행렬의 열보다 벡터에서 훨씬 길어 지므로이 오류가 발생할 수 있습니다. velox에 대한 추출 문서에만 추출 방법이 있기 때문에 다른 길이의 새 벡터를 강제 실행하는 방법을 잘 모르겠습니다. –

답변

0

단순히 지금 VeloxRaster_extract 쿼리에서 '원시'래스터 값을 반환 할 수 있습니다이 조각

vx.raster$crop(shapefile). 
1

에게 (GitHub의에) 통해 Velox의 개발 버전을 사용해보십시오. 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....