1# raster package
2# Authors: Robert J. Hijmans
3# Date : September 2009
4# Version 1.0
5# Licence GPL v3
6
7
8
9if (!isGeneric("minValue")) {
10	setGeneric("minValue", function(x, ...)
11		standardGeneric("minValue"))
12}
13
14setMethod('minValue', signature(x='RasterLayer'),
15	function(x, layer=-1, warn=TRUE) {
16		if ( x@data@haveminmax ) {
17			v <- x@data@min
18			if (isTRUE( v == Inf)) {
19				v <- NA
20			} else {
21				if (! inMemory(x) ) {
22					v <- v * x@data@gain + x@data@offset
23				}
24			}
25			return(v)
26		} else {
27			if (warn) warning('min value not known, use setMinMax')
28			return(NA)
29		}
30	}
31)
32
33
34setMethod('minValue', signature(x='RasterBrick'),
35	function(x, layer=-1, warn=FALSE) {
36		layer <- round(layer)[1]
37		if (layer < 1) {
38			if ( x@data@haveminmax ) {
39				v <- x@data@min
40				v[v == Inf] <- NA
41				if (! inMemory(x) ) {
42					v <- v * x@data@gain + x@data@offset
43				}
44				return(v)
45			} else {
46				warning('min value not known, use setMinMax')
47				return(rep(NA, nlayers(x)))
48			}
49		} else {
50			if ( x@data@haveminmax ) {
51				v <- x@data@min[layer] * x@data@gain + x@data@offset
52				v[v == Inf] <- NA
53				return(v)
54			} else {
55				warning('min value not known, use setMinMax')
56				return(NA)
57			}
58		}
59	}
60)
61
62
63setMethod('minValue', signature(x='RasterStack'),
64	function(x, layer=-1, warn=FALSE) {
65		layer <- round(layer)[1]
66		nl <- nlayers(x)
67		if (layer < 1) {
68			v <- vector(length=nl)
69			for (i in 1:nl) {
70				v[i] <- minValue(x@layers[[i]], warn=warn)
71			}
72		} else {
73			if (layer <= nl) {
74				v <- minValue(x@layers[[layer]])
75			} else {
76				stop('incorrect layer number')
77			}
78		}
79		return(v)
80	}
81)
82
83
84
85
86if (!isGeneric("maxValue")) {
87	setGeneric("maxValue", function(x, ...)
88		standardGeneric("maxValue"))
89}
90
91setMethod('maxValue', signature(x='RasterLayer'),
92	function(x, layer=-1, warn=TRUE) {
93
94		if ( x@data@haveminmax ) {
95			v <- x@data@max
96			if (isTRUE( v == -Inf)) {
97				v <- NA
98			} else {
99				if (! inMemory(x) ) {
100					v <- v * x@data@gain + x@data@offset
101				}
102			}
103			return(v)
104
105		} else {
106			if (warn) warning('max value not known, use setMinMax')
107			return(NA)
108		}
109	}
110)
111
112setMethod('maxValue', signature(x='RasterBrick'),
113	function(x, layer=-1, warn=FALSE) {
114
115		if ( x@data@haveminmax ) {
116			v <- x@data@max
117			v[!is.finite(v)] <- NA
118			if (! inMemory(x) ) {
119				v <- v * x@data@gain + x@data@offset
120			}
121			return(v)
122		} else {
123			if (warn) warning('max value not known, use setMinMax')
124			v <- rep(NA, nlayers(x))
125		}
126		layer <- round(layer)[1]
127		if (layer > 0) {
128			if (layer <= nlayers(x)) {
129				v <- v[layer]
130			} else {
131				stop('invalid layer selected')
132			}
133		}
134		return(v)
135	}
136)
137
138
139
140
141setMethod('maxValue', signature(x='RasterStack'),
142	function(x, layer=-1, warn=FALSE) {
143		layer <- round(layer)[1]
144		nl <- nlayers(x)
145		if (layer < 1) {
146			v <- vector(length=nl)
147			for (i in 1:nl) {
148				v[i] <- maxValue(x@layers[[i]], warn=warn)
149			}
150		} else {
151			if (layer <= nl) {
152				v <- maxValue(x@layers[[layer]])
153			} else {
154				stop('incorrect layer number')
155			}
156		}
157		return(v)
158	}
159)
160
161