-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathblockSize.R
44 lines (34 loc) · 982 Bytes
/
blockSize.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Author: Robert J. Hijmans
# Date : November 2009
# Version 0.9
# Licence GPL v3
setMethod("blockSize", signature(x="Raster"),
function(x, chunksize, n=nlayers(x), minblocks=4, minrows=1) {
n <- max(n, 1)
if (missing(chunksize)) {
bs <- .chunk()
} else {
bs <- chunksize
}
blockrows <- try(methods::slot(x@file, 'blockrows'), silent=TRUE)
if (inherits(blockrows, 'try-error')) {
blockrows <- 1
}
blockrows <- max(blockrows, 1)
nr <- nrow(x)
size <- min(nr, max(1, floor(bs / (ncol(x) * n * 8))))
# min number of chunks
if (size > 1) {
minblocks <- min(nr, max(1, minblocks))
size <- min(ceiling(nr/minblocks), size)
}
size <- min(max(size, minrows), nr)
size <- max(minrows, blockrows * round(size / blockrows))
nb <- ceiling(nr / size)
row <- (0:(nb-1))*size + 1
nrows <- rep(size, length(row))
dif = nb * size - nr
nrows[length(nrows)] = nrows[length(nrows)] - dif
return(list(row=row, nrows=nrows, n=nb))
}
)