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