1# Author: Robert J. Hijmans 2# Date : October 2017 3# Version 0.9 4# License GPL v3 5 6setMethod("ext", signature(x="SpatExtent"), 7 function(x){ 8 x 9 } 10) 11 12 13setMethod("ext", signature(x="sf"), 14 function(x){ 15 sfi <- attr(x, "sf_column") 16 geom <- x[[sfi]] 17 e <- attr(geom, "bbox") 18 ext(e[c(1,3,2,4)]) 19 } 20) 21 22setMethod("ext", signature(x="missing"), 23 function(x){ 24 e <- methods::new("SpatExtent") 25 e@ptr <- SpatExtent$new() 26 return(e) 27 } 28) 29 30setMethod("ext", signature(x="numeric"), 31 function(x, ...){ 32 dots <- unlist(list(...)) 33 x <- c(x, dots) 34 if (length(x) < 4) { 35 error("ext", "insufficient number of elements (should be 4)") 36 } 37 if (length(x) > 4) { 38 warn("ext", "more elements than expected (should be 4)") 39 } 40 names(x) <- NULL 41 e <- methods::new("SpatExtent") 42 e@ptr <- SpatExtent$new(x[1], x[2], x[3], x[4]) 43 if (methods::validObject(e)) return(e) 44 } 45) 46 47 48setMethod("ext", signature(x="SpatRaster"), 49 function(x){ 50 e <- methods::new("SpatExtent") 51 e@ptr <- x@ptr$extent 52 return(e) 53 } 54) 55 56 57setMethod("ext", signature(x="SpatRasterDataset"), 58 function(x){ 59 e <- methods::new("SpatExtent") 60 e@ptr <- x[1]@ptr$extent 61 return(e) 62 } 63) 64 65 66setMethod("ext<-", signature("SpatRaster", "SpatExtent"), 67 function(x, value) { 68 x@ptr$extent <- value@ptr 69 messages(x, "ext<-") 70 } 71) 72 73 74setMethod("ext<-", signature("SpatRaster", "numeric"), 75 function(x, value) { 76 e <- ext(value) 77 x@ptr$extent <- e@ptr 78 messages(x, "ext<-") 79 } 80) 81 82 83 84setMethod("ext", signature(x="SpatVector"), 85 function(x, ...) { 86 e <- methods::new("SpatExtent") 87 e@ptr <- x@ptr$extent() 88 return(e) 89 } 90) 91 92 93 94setMethod("ext", signature(x="Extent"), 95 function(x, ...) { 96 ext(as.vector(x)) 97 } 98) 99 100setMethod("ext", signature(x="Raster"), 101 function(x) { 102 ext(x@extent) 103 } 104) 105 106setMethod("ext", signature(x="Spatial"), 107 function(x) { 108 ext(as.vector(t(x@bbox))) 109 } 110) 111 112 113 114setMethod("xmin", signature(x="SpatExtent"), 115 function(x){ 116 x@ptr$vector[1] 117 } 118) 119setMethod("xmax", signature(x="SpatExtent"), 120 function(x){ 121 x@ptr$vector[2] 122 } 123) 124setMethod("ymin", signature(x="SpatExtent"), 125 function(x){ 126 x@ptr$vector[3] 127 } 128) 129setMethod("ymax", signature(x="SpatExtent"), 130 function(x){ 131 x@ptr$vector[4] 132 } 133) 134 135 136setMethod("xmin<-", signature("SpatExtent", "numeric"), 137 function(x, value){ 138 v <- as.vector(x) 139 v[1] <- value 140 ext(v) 141 } 142) 143setMethod("xmax<-", signature("SpatExtent", "numeric"), 144 function(x, value){ 145 v <- as.vector(x) 146 v[2] <- value 147 ext(v) 148 } 149) 150setMethod("ymin<-", signature("SpatExtent", "numeric"), 151 function(x, value){ 152 v <- as.vector(x) 153 v[3] <- value 154 ext(v) 155 } 156) 157setMethod("ymax<-", signature("SpatExtent", "numeric"), 158 function(x, value){ 159 v <- as.vector(x) 160 v[4] <- value 161 ext(v) 162 } 163) 164 165 166setMethod("xmin", signature(x="SpatRaster"), 167 function(x){ 168 xmin(ext(x)) 169 } 170) 171setMethod("xmax", signature(x="SpatRaster"), 172 function(x){ 173 xmax(ext(x)) 174 } 175) 176setMethod("ymin", signature(x="SpatRaster"), 177 function(x){ 178 ymin(ext(x)) 179 } 180) 181setMethod("ymax", signature(x="SpatRaster"), 182 function(x){ 183 ymax(ext(x)) 184 } 185) 186 187 188setMethod("xmin<-", signature("SpatRaster", "numeric"), 189 function(x, value){ 190 v <- as.vector(ext(x)) 191 v[1] <- value 192 x@ptr <- x@ptr$deepcopy() 193 ext(x) <- ext(v) 194 x 195 } 196) 197 198 199setMethod("xmax<-", signature("SpatRaster", "numeric"), 200 function(x, value){ 201 v <- as.vector(ext(x)) 202 v[2] <- value 203 x@ptr <- x@ptr$deepcopy() 204 ext(x) <- ext(v) 205 x 206 } 207) 208setMethod("ymin<-", signature("SpatRaster", "numeric"), 209 function(x, value){ 210 v <- as.vector(ext(x)) 211 v[3] <- value 212 x@ptr <- x@ptr$deepcopy() 213 ext(x) <- ext(v) 214 x 215 } 216) 217 218setMethod("ymax<-", signature("SpatRaster", "numeric"), 219 function(x, value){ 220 v <- as.vector(ext(x)) 221 v[4] <- value 222 x@ptr <- x@ptr$deepcopy() 223 ext(x) <- ext(v) 224 x 225 } 226) 227 228 229 230setMethod("xmin", signature(x="SpatVector"), 231 function(x){ 232 xmin(ext(x)) 233 } 234) 235setMethod("xmax", signature(x="SpatVector"), 236 function(x){ 237 xmax(ext(x)) 238 } 239) 240setMethod("ymin", signature(x="SpatVector"), 241 function(x){ 242 ymin(ext(x)) 243 } 244) 245setMethod("ymax", signature(x="SpatVector"), 246 function(x){ 247 ymax(ext(x)) 248 } 249) 250 251 252 253setMethod("$", "SpatExtent", 254 function(x, name) { 255 as.vector(x)[name] 256 } 257) 258 259 260setMethod("$<-", "SpatExtent", 261 function(x, name, value) { 262 e <- as.vector(x) 263 e[name] <- value 264 ext(e) 265 } 266) 267 268 269 270setMethod("[", c("SpatExtent", "missing", "missing"), 271 function(x, i, j, ... , drop=FALSE) { 272 as.vector(x) 273 } 274) 275 276setMethod("[", c("SpatExtent", "numeric", "missing"), 277 function(x, i, j, ... , drop=FALSE) { 278 x <- as.vector(x) 279 x[i] 280 } 281) 282 283setReplaceMethod("[", c("SpatExtent", "numeric", "missing"), 284 function(x, i, j, value) { 285 e <- as.vector(x) 286 stopifnot(all(i %in% 1:4)) 287 e[i] <- value 288 ext(e) 289 } 290) 291 292