1# Author: Robert J. Hijmans 2# Date : October 2018 3# Version 1.0 4# License GPL v3 5 6 7setMethod("weighted.mean", signature(x="SpatRaster", w="numeric"), 8 function(x, w, na.rm=FALSE, filename="", ...) { 9 opt <- spatOptions(filename, ...) 10 x@ptr <- x@ptr$wmean_vect(w, na.rm, opt) 11 messages(x, "weighted.mean") 12 } 13) 14 15 16setMethod("weighted.mean", signature(x="SpatRaster", w="SpatRaster"), 17 function(x, w, na.rm=FALSE, filename="", ...) { 18 opt <- spatOptions(filename, ...) 19 x@ptr <-x@ptr$wmean_rast(w@ptr, na.rm, opt) 20 messages(x, "weighted.mean") 21 } 22) 23 24 25 26setMethod("patches", signature(x="SpatRaster"), 27 function(x, directions=4, zeroAsNA=FALSE, filename="", ...) { 28 opt <- spatOptions(filename, ...) 29 x@ptr <- x@ptr$patches(directions[1], zeroAsNA[1], opt) 30 messages(x, "patches") 31 } 32) 33 34 35setMethod("origin", signature(x="SpatRaster"), 36 function(x) { 37 x@ptr$origin 38 } 39) 40 41 42setMethod("origin<-", signature("SpatRaster"), 43 function(x, value) { 44 value <- rep(value, length.out=2) 45 dif <- value - origin(x) 46 res <- res(x) 47 dif[1] <- dif[1] %% res[1] 48 dif[2] <- dif[2] %% res[2] 49 for (i in 1:2) { 50 if (dif[i] < 0) { 51 if ((dif[i] + res[i]) < abs(dif[i])) { 52 dif[i] <- dif[i] + res[i] 53 } 54 } else { 55 if (abs(dif[i] - res[i]) < dif[i]) { 56 dif[i] <- dif[i] - res[i] 57 } 58 } 59 } 60 e <- as.vector(ext(x)) 61 e["xmin"] <- e["xmin"] + dif[1] 62 e["xmax"] <- e["xmax"] + dif[1] 63 e["ymin"] <- e["ymin"] + dif[2] 64 e["ymax"] <- e["ymax"] + dif[2] 65 ext(x) <- e 66 return(x) 67 } 68) 69 70 71 72 73setMethod("align", signature(x="SpatExtent", y="SpatRaster"), 74 function(x, y, snap="near") { 75 x@ptr <- y@ptr$align(x@ptr, tolower(snap)) 76 #messages(x, "align") 77 x 78 } 79) 80 81setMethod("align", signature(x="SpatExtent", y="numeric"), 82 function(x, y) { 83 x@ptr <- x@ptr$align(y, "") 84 x 85 } 86) 87 88setMethod("cellSize", signature(x="SpatRaster"), 89 function(x, mask=TRUE, unit="m", transform=TRUE, filename="", ...) { 90 opt <- spatOptions(filename, ...) 91 x@ptr <- x@ptr$rst_area(mask, unit, transform, opt) 92 messages(x, "cellSize") 93 } 94) 95 96 97 98setMethod ("expanse", "SpatRaster", 99 function(x, unit="m", transform=TRUE) { 100 101 byvalue = FALSE 102 opt <- spatOptions() 103 if (byvalue) { 104 v <- x@ptr$area_by_value(opt) 105 x <- messages(x, "expanse") 106 v <- lapply(1:length(v), function(i) cbind(i, matrix(v[[i]], ncol=2))) 107 v <- do.call(rbind, v) 108 colnames(v) <- c("layer", "value", "area") 109 } else { 110 v <- x@ptr$sum_area(unit, transform, opt) 111 x <- messages(x, "expanse") 112 } 113 return(v) 114 } 115) 116 117 118 119setMethod("atan2", signature(y="SpatRaster", x="SpatRaster"), 120 function(y, x) { 121 opt <- spatOptions(filename="", overwrite=TRUE) 122 y@ptr <- y@ptr$atan2(x@ptr, opt) 123 messages(y, "atan2") 124 } 125) 126 127 128setMethod("boundaries", signature(x="SpatRaster"), 129 function(x, classes=FALSE, inner=TRUE, directions=8, falseval=0, filename="", ...) { 130 opt <- spatOptions(filename, ...) 131 type <- ifelse(inner[1], "inner", "outer") 132 x@ptr <- x@ptr$boundaries(classes[1], type, directions[1], falseval[1], opt) 133 messages(x, "boundaries") 134 } 135) 136 137 138.collapseSources <- function(x) { 139 x@ptr <- x@ptr$collapse_sources() 140 messages(x, "tighten") 141} 142 143setMethod("copy", signature("SpatRaster"), 144 function(x) { 145 x@ptr <- x@ptr$deepcopy() 146 x 147 } 148) 149 150 151 152setMethod("split", signature(x="SpatRaster"), 153 function(x, f) { 154 stopifnot(length(f) == nlyr(x)) 155 stopifnot(!any(is.na(f))) 156 u <- unique(f) 157 lapply(u, function(i) x[[f==i]]) 158 } 159) 160 161 162setMethod("add<-", signature("SpatRaster", "SpatRaster"), 163 function(x, value) { 164 if (x@ptr$same(value@ptr)) { 165 x@ptr <- x@ptr$deepcopy() 166 } 167 x@ptr$addSource(value@ptr) 168 messages(x, "add") 169 } 170) 171 172setMethod("tighten", signature("SpatRaster"), 173 function(x) { 174 x@ptr <- x@ptr$collapse_sources() 175 messages(x, "tighten") 176 } 177) 178 179setMethod("tighten", signature("SpatRasterDataset"), 180 function(x) { 181 y <- new("SpatRaster") 182 y@ptr <- x@ptr$collapse() 183 messages(y, "tighten") 184 } 185) 186 187 188#setMethod("c", signature(x="SpatRaster"), 189# function(x, ...) { 190# s <- sds(list(x, ...)) 191# x@ptr <- s@ptr$collapse() 192# x <- messages(x, "c") 193# try( x@ptr <- x@ptr$collapse_sources() ) 194# messages(x, "c") 195# } 196#) 197 198 199 200#cbind.SpatVector <- function(x, y, ...) { 201# if (inherits(y, "SpatVector")) { 202# y <- y@ptr$df 203# } else { 204# stopifnot(inherits(y, "data.frame")) 205# y <- terra:::.makeSpatDF(y) 206# } 207# x@ptr <- x@ptr$cbind(y) 208# messages(x, "cbind") 209#} 210 211cbind.SpatVector <- function(x, y, ...) { 212 dots <- list(y, ...) 213 for (y in dots) { 214 if (inherits(y, "SpatVector")) { 215 y <- y@ptr$df 216 } else { 217 stopifnot(inherits(y, "data.frame")) 218 y <- .makeSpatDF(y) 219 } 220 x@ptr <- x@ptr$cbind(y) 221 x <- messages(x, "cbind") 222 } 223 x 224} 225 226rbind.SpatVector <- function(x, y, ...) { 227 skipped <- FALSE 228 stopifnot(inherits(y, "SpatVector")) 229 x@ptr <- x@ptr$rbind(y@ptr, FALSE) 230 x <- messages(x, "rbind") 231 dots <- list(...) 232 if (!is.null(dots)) { 233 for (y in dots) { 234 stopifnot(inherits(y, "SpatVector")) 235 x@ptr <- x@ptr$rbind(y@ptr, FALSE) 236 x <- messages(x, "rbind") 237 } 238 } 239 x 240} 241 242 243setMethod("c", signature(x="SpatRaster"), 244 function(x, ...) { 245 skips <- 0 246 dots <- list(...) 247 for (i in dots) { 248 if (inherits(i, "SpatRaster")) { 249 x@ptr <- x@ptr$combineSources(i@ptr) 250 if (x@ptr$messages$has_error) { 251 messages(x, "c") 252 return() 253 } 254 } else { 255 skips = skips + 1 256 } 257 } 258 if (skips > 0) warn("c,SpatRaster", paste("skipped", skips, "object(s) that are not SpatRaster")) 259 messages(x, "c") 260 } 261) 262 263 264 265setMethod("rep", signature(x="SpatRaster"), 266 function(x, ...) { 267 i <- rep(1:nlyr(x), ...) 268 x[[i]] 269 } 270) 271 272 273setMethod("clamp", signature(x="SpatRaster"), 274 function(x, lower=-Inf, upper=Inf, values=TRUE, filename="", ...) { 275 opt <- spatOptions(filename, ...) 276 x@ptr <- x@ptr$clamp(lower, upper, values[1], opt) 277 messages(x, "clamp") 278 } 279) 280 281 282setMethod("clamp", signature(x="numeric"), 283function(x, lower=-Inf, upper=Inf, values=TRUE, ...) { 284 stopifnot(lower <= upper) 285 if (values) { 286 x[x < lower] <- lower 287 x[x > upper] <- upper 288 } else { 289 x[x < lower] <- NA 290 x[x > upper] <- NA 291 } 292 x 293} 294) 295 296setMethod("classify", signature(x="SpatRaster"), 297function(x, rcl, include.lowest=FALSE, right=TRUE, othersNA=FALSE, filename="", ...) { 298 299 bylayer = FALSE 300 301 if (is.data.frame(rcl)) { 302 rcl <- as.matrix(rcl) 303 } 304 305 right <- ifelse(is.na(right), 2, ifelse(right, 1, 0)) 306 include.lowest <- as.logical(include.lowest[1]) 307 308 opt <- spatOptions(filename, ...) 309 x@ptr <- x@ptr$classify(as.vector(rcl), NCOL(rcl), right[1], include.lowest[1], othersNA[1], bylayer[1], opt) 310 messages(x, "classify") 311} 312) 313 314setMethod("subst", signature(x="SpatRaster"), 315function(x, from, to, filename="", ...) { 316 opt <- spatOptions(filename, ...) 317 if (inherits(to, "data.frame")) { 318 to <- as.matrix(to) 319 } 320 if (inherits(to, "matrix")) { 321 opt$names = colnames(to) 322 x@ptr <- x@ptr$replaceValues(from, to, ncol(to), opt) 323 } else { 324 x@ptr <- x@ptr$replaceValues(from, to, -1, opt) 325 } 326 messages(x, "subst") 327} 328) 329 330 331.getExt <- function(x) { 332 return(x) 333} 334 335setMethod("crop", signature(x="SpatRaster", y="ANY"), 336 function(x, y, snap="near", filename="", ...) { 337 opt <- spatOptions(filename, ...) 338 339 if (!inherits(y, "SpatExtent")) { 340 e <- try(ext(y), silent=TRUE) 341 if (class(e) == "try-error") { 342 e <- try(ext(vect(y)), silent=TRUE) 343 if (class(e) == "try-error") { 344 error("crop", "cannot get a SpatExtent from y") 345 } 346 } 347 y <- e 348 } 349 350 x@ptr <- x@ptr$crop(y@ptr, snap[1], opt) 351 messages(x, "crop") 352 } 353) 354 355 356setMethod("selectRange", signature(x="SpatRaster"), 357 function(x, y, z=1, repint=0, filename="", ...) { 358 opt <- spatOptions(filename, ...) 359 x@ptr <- x@ptr$selRange(y@ptr, z, repint, opt) 360 messages(x, "selectRange") 361 } 362) 363 364setMethod("cover", signature(x="SpatRaster", y="SpatRaster"), 365 function(x, y, values=NA, filename="", ...) { 366 opt <- spatOptions(filename, ...) 367 x@ptr <- x@ptr$cover(y@ptr, values, opt) 368 messages(x, "cover") 369 } 370) 371 372 373setMethod("diff", signature(x="SpatRaster"), 374 function(x, lag=1, filename="", ...) { 375 n <- nlyr(x) 376 lag <- round(lag) 377 if ((lag < 1) | (lag >= n)) { 378 error("diff", "lag must be > 0 and < nlyr(x)") 379 } 380 y <- x[[-((n-lag+1):n)]] 381 x <- x[[-(1:lag)]] 382 opt <- spatOptions(filename, ...) 383 x@ptr <- x@ptr$arith_rast(y@ptr, "-", opt) 384 messages(x, "diff") 385 } 386) 387 388 389setMethod("disagg", signature(x="SpatRaster"), 390 function(x, fact, method="near", filename="", ...) { 391 stopifnot(method %in% c("near", "bilinear")) 392 if (method == "bilinear") { 393 y <- disagg(rast(x), fact) 394 r <- resample(x, y, "bilinear", filename=filename, ...) 395 return(r) 396 } 397 opt <- spatOptions(filename, ...) 398 x@ptr <- x@ptr$disaggregate(fact, opt) 399 messages(x, "disagg") 400 } 401) 402 403 404setMethod("flip", signature(x="SpatRaster"), 405 function(x, direction="vertical", filename="", ...) { 406 d <- match.arg(direction, c("vertical", "horizontal")) 407 opt <- spatOptions(filename, ...) 408 x@ptr <- x@ptr$flip(d == "vertical", opt) 409 messages(x, "flip") 410 } 411) 412 413 414setMethod("freq", signature(x="SpatRaster"), 415 function(x, digits=0, value=NULL, bylayer=TRUE, usenames=FALSE) { 416 417 opt <- spatOptions() 418 if (!bylayer) usenames <- FALSE 419 420 if (!is.null(value)) { 421 value <- unique(value) 422 if (length(value) > 1) { 423 error("freq", "value must have a length of one") 424 } 425 if (is.character(value)) { 426 value <- value[value != ""] 427 if (length(value) == 0) { 428 error("freq", "no valid value") 429 } 430 ff <- is.factor(x) 431 if (!any(ff)) { 432 error("freq", "a character value is only meaningful for categorical rasters") 433 } 434 f <- freq(x[[ff]]) 435 if (usenames) { 436 f$layer <- names(x)[f$layer] 437 } 438 f <- f[f$label == value,] 439 return(f) 440 } 441 442 if (is.na(digits)) { 443 v <- x@ptr$count(value, bylayer[1], FALSE, 0, opt) 444 } else { 445 v <- x@ptr$count(value, bylayer[1], TRUE, digits, opt) 446 value <- round(value, digits) 447 } 448 if (bylayer) { 449 v <- cbind(layer=1:nlyr(x), value=value, count=v) 450 } else { 451 v <- cbind(value=value, count=v) 452 } 453 } else { 454 if (is.na(digits)) { 455 v <- x@ptr$freq(bylayer[1], FALSE, 0, opt) 456 } else { 457 v <- x@ptr$freq(bylayer[1], TRUE, digits, opt) 458 } 459 if (bylayer) { 460 v <- lapply(1:length(v), function(i) cbind(i, matrix(v[[i]], ncol=2))) 461 v <- do.call(rbind, v) 462 colnames(v) <- c("layer", "value", "count") 463 } else { 464 v <- matrix(v[[1]], ncol=2, dimnames=list(NULL, c("value", "count"))) 465 } 466 ff <- is.factor(x) 467 if (any(ff)) { 468 if (bylayer) { 469 v <- data.frame(v) 470 v$label <- "" 471 f <- which(ff) 472 levs <- levels(x) 473 for (i in f) { 474 g <- levs[[i]] 475 k <- v$layer==i 476 v$label[k] <- g[v$value[k] + 1] 477 } 478 } else if (nlyr(x) == 1) { 479 v <- data.frame(v) 480 g <- levels(x)[[1]] 481 v$label <- g[v$value + 1] 482 } 483 } 484 } 485 if (usenames) { 486 v <- data.frame(v) 487 v$layer <- names(x)[v$layer] 488 } 489 v 490 } 491) 492 493 494 495setMethod("mask", signature(x="SpatRaster", mask="SpatRaster"), 496 function(x, mask, inverse=FALSE, maskvalues=NA, updatevalue=NA, filename="", ...) { 497 opt <- spatOptions(filename, ...) 498 x@ptr <- x@ptr$mask_raster(mask@ptr, inverse[1], maskvalues, updatevalue[1], opt) 499 messages(x, "mask") 500 } 501) 502 503setMethod("mask", signature(x="SpatRaster", mask="SpatVector"), 504 function(x, mask, inverse=FALSE, updatevalue=NA, touches=TRUE, filename="", ...) { 505 opt <- spatOptions(filename, ...) 506 x@ptr <- x@ptr$mask_vector(mask@ptr, inverse[1], updatevalue[1], touches[1], opt) 507 messages(x, "mask") 508 } 509) 510 511 512setMethod("project", signature(x="SpatRaster"), 513 function(x, y, method, mask=FALSE, align=FALSE, filename="", ...) { 514 515 if (missing(method)) { 516 method <- ifelse(is.factor(x)[1], "near", "bilinear") 517 } else { 518 method <- method[1] 519 } 520 if (method == "ngb") { 521 method <- "near" 522 warn("project", "argument 'method=ngb' is deprecated, it should be 'method=near'") 523 } 524 opt <- spatOptions(filename, ...) 525 if (inherits(y, "SpatRaster")) { 526 x@ptr <- x@ptr$warp(y@ptr, "", method, mask[1], align[1], opt) 527 } else { 528 if (!is.character(y)) { 529 warn("project,SpatRaster", "crs should be a character value") 530 y <- as.character(crs(y)) 531 } 532 #x@ptr <- x@ptr$warpcrs(y, method, opt) 533 x@ptr <- x@ptr$warp(SpatRaster$new(), y, method, mask, FALSE, opt) 534 } 535 messages(x, "project") 536 } 537) 538 539 540setMethod("project", signature(x="SpatVector"), 541 function(x, y) { 542 if (!is.character(y)) { 543 y <- crs(y) 544 } 545 x@ptr <- x@ptr$project(y) 546 messages(x, "project") 547 } 548) 549 550 551setMethod("quantile", signature(x="SpatRaster"), 552 function(x, probs=seq(0, 1, 0.25), na.rm=FALSE, filename="", ...) { 553 opt <- spatOptions(filename, ...) 554 x@ptr <- x@ptr$quantile(probs, na.rm[1], opt) 555 messages(x, "quantile") 556 } 557) 558 559 560setMethod("quantile", signature(x="SpatVector"), 561 function(x, probs=seq(0, 1, 0.25), ...) { 562 x <- values(x) 563 cls <- sapply(x, class) 564 i <- cls != "character" 565 if (!any(i)) error("quantile", "no numeric variables") 566 x <- x[, i, drop=FALSE] 567 apply(x, 2, function(i) quantile(i, probs=probs, ...)) 568 } 569) 570 571 572setMethod("rectify", signature(x="SpatRaster"), 573 function(x, method="bilinear", aoi=NULL, snap=TRUE, filename="", ...) { 574 opt <- spatOptions(filename, ...) 575 if (!is.null(aoi)) { 576 if (inherits(aoi, "SpatExtent")) { 577 aoi <- rast(aoi) 578 useaoi <- 1 579 } else if (inherits(aoi, "SpatRaster")) { 580 aoi <- rast(aoi) 581 useaoi <- 2 582 } else { 583 error("rectify", "ext must be a SpatExtent or SpatRaster") 584 } 585 } else { 586 aoi <- rast() 587 useaoi <- 0 588 } 589 snap <- as.logical(snap) 590 x@ptr <- x@ptr$rectify(method, aoi@ptr, useaoi, snap, opt) 591 messages(x, "rectify") 592 } 593) 594 595setMethod("resample", signature(x="SpatRaster", y="SpatRaster"), 596 function(x, y, method, filename="", ...) { 597 if (missing(method)) { 598 method <- ifelse(is.factor(x)[1], "near", "bilinear") 599 } 600 if (method == "ngb") { 601 method <- "near" 602 warn("project", "argument 'method=ngb' is deprecated, it should be 'method=near'") 603 } 604 opt <- spatOptions(filename, ...) 605 x@ptr <- x@ptr$warp(y@ptr, "", method, FALSE, FALSE, opt) 606 messages(x, "resample") 607 } 608) 609 610 611 612setMethod("rev", signature(x="SpatRaster"), 613 function(x) { 614 opt <- spatOptions("", FALSE, list()) 615 x@ptr <- x@ptr$reverse(opt) 616 messages(x, "rev") 617 } 618) 619 620setMethod("rotate", signature(x="SpatRaster"), 621 function(x, left=TRUE, filename="", ...) { 622 opt <- spatOptions(filename, ...) 623 x@ptr <- x@ptr$rotate(left, opt) 624 messages(x, "rotate") 625 } 626) 627 628 629setMethod("segregate", signature(x="SpatRaster"), 630 function(x, classes=NULL, keep=FALSE, other=0, filename="", ...) { 631 opt <- spatOptions(filename, ...) 632 if (is.null(classes)) classes <- 1[0] 633 x@ptr <- x@ptr$separate(classes, keep, other, opt) 634 messages(x, "segregate") 635 } 636) 637 638 639setMethod("shift", signature(x="SpatRaster"), 640 function(x, dx=0, dy=0, filename="", ...) { 641 opt <- spatOptions(filename, ...) 642 x@ptr <- x@ptr$shift(dx, dy, opt) 643 messages(x, "shift") 644 } 645) 646 647 648setMethod("shift", signature(x="SpatExtent"), 649 function(x, dx=0, dy=0) { 650 s <- c(dx[1], dx[1], dy[1], dy[1]) 651 ext(as.vector(x) + s) 652 } 653) 654 655 656setMethod("shift", signature(x="SpatVector"), 657 function(x, dx=0, dy=0) { 658 x@ptr <- x@ptr$shift(dx, dy) 659 messages(x, "shift") 660 } 661) 662 663setMethod("rescale", signature(x="SpatRaster"), 664 function(x, fx=0.5, fy=fx, x0, y0) { 665 stopifnot(fx > 0) 666 stopifnot(fy > 0) 667 e <- as.vector(ext(x)) 668 if (missing(x0)) { 669 x0 <- mean(e[1:2]) 670 } 671 if (missing(y0)) { 672 y0 <- mean(e[3:4]) 673 } 674 ex = x0 + fx * (e[1:2] - x0); 675 ey = y0 + fy * (e[3:4] - y0); 676 x@ptr <- x@ptr$deepcopy() 677 ext(x) <- ext(c(ex, ey)) 678 messages(x, "rescale") 679 } 680) 681 682setMethod("rescale", signature(x="SpatVector"), 683 function(x, fx=0.5, fy=fx, x0, y0) { 684 stopifnot(fx > 0) 685 stopifnot(fy > 0) 686 e <- as.vector(ext(x)) 687 if (missing(x0)) { 688 x0 <- mean(e[1:2]) 689 } 690 if (missing(y0)) { 691 y0 <- mean(e[3:4]) 692 } 693 x@ptr <- x@ptr$rescale(fx, fy, x0[1], y0[1]) 694 messages(x, "rescale") 695 } 696) 697 698 699setMethod("scale", signature(x="SpatRaster"), 700 function(x, center=TRUE, scale=TRUE) { 701 702 opt <- spatOptions() 703 704 if (is.logical(center)) { 705 docenter = center[1]; 706 center = 1[0] 707 } else { 708 docenter = TRUE 709 } 710 if (is.logical(scale)) { 711 doscale = scale[1] 712 scale = 1[0] 713 } else { 714 doscale = TRUE; 715 } 716 x@ptr <- x@ptr$scale(center, docenter, scale, doscale, opt) 717 messages(x, "scale") 718 } 719) 720 721 722 723setMethod("stretch", signature(x="SpatRaster"), 724 function(x, minv=0, maxv=255, minq=0, maxq=1, smin=NA, smax=NA, filename="", ...) { 725 opt <- spatOptions(filename, ...) 726 x@ptr <- x@ptr$stretch(minv, maxv, minq, maxq, smin, smax, opt) 727 messages(x, "stretch") 728 } 729) 730 731 732 733setMethod("summary", signature(object="SpatRaster"), 734 function(object, size=100000, warn=TRUE, ...) { 735 if (!hasValues(object)) { 736 warn("summary", "SpatRaster has no values") 737 return(invisible()) 738 } 739 if (warn && (ncell(object) > size)) { 740 warn("summary", "used a sample") 741 } 742 s <- spatSample(object, size, method="regular") 743 summary(s, ...) 744 } 745) 746 747 748setMethod("summary", signature(object="SpatVector"), 749 function(object, ...) { 750 summary(as.data.frame(object), ...) 751 } 752) 753 754 755setMethod("t", signature(x="SpatRaster"), 756 function(x) { 757 opt <- spatOptions() 758 x@ptr <- x@ptr$transpose(opt) 759 messages(x, "t") 760 } 761) 762 763setMethod("t", signature(x="SpatVector"), 764 function(x) { 765 x@ptr <- x@ptr$transpose() 766 messages(x, "t") 767 } 768) 769 770 771setMethod("terrain", signature(x="SpatRaster"), 772 function(x, v="slope", neighbors=8, unit="degrees", filename="", ...) { 773 #v <- match.arg(unique(v), c("aspect", "flowdir", "roughness", "slope", "TPI", "TRI"), several.ok=TRUE) 774 unit <- match.arg(unit, c("degrees", "radians")) 775 opt <- spatOptions(filename, ...) 776 seed <- ifelse("flowdir" %in% v, .seed(), 0) 777 x@ptr <- x@ptr$terrain(v, neighbors[1], unit=="degrees", seed, opt) 778 messages(x, "terrain") 779 } 780) 781 782 783setMethod("trim", signature(x="SpatRaster"), 784 function(x, padding=0, value=NA, filename="", ...) { 785 opt <- spatOptions(filename, ...) 786 x@ptr <- x@ptr$trim(value[1], padding[1], opt) 787 messages(x, "trim") 788 } 789) 790 791setMethod("trans", signature(x="SpatRaster"), 792 function(x, filename="", ...) { 793 opt <- spatOptions(filename, ...) 794 x@ptr <- x@ptr$transpose(opt) 795 messages(x, "trans") 796 } 797) 798 799 800setMethod("unique", signature(x="SpatRaster", incomparables="ANY"), 801 function(x, incomparables=FALSE) { 802 opt <- spatOptions() 803 u <- x@ptr$unique(incomparables, opt) 804 805 isfact <- is.factor(x) 806 if (any(isfact)) { 807 ff <- which(isfact) 808 levs <- levels(x) 809 for (f in ff) { 810 lvs <- levs[[f]] 811 u[[f]] = factor(u[[f]], levels=(1:length(lvs))-1) 812 levels(u[[f]]) = levs[[f]] 813 } 814 } 815 if (!incomparables) { 816 if (!length(u)) return(u) 817 u <- do.call(data.frame, u) 818 colnames(u) <- names(x) 819 } 820 u 821 } 822) 823 824setMethod("unique", signature(x="SpatVector", incomparables="ANY"), 825 function(x, incomparables=FALSE, ...) { 826 u <- unique(as.data.frame(x, geom="WKT"), incomparables=incomparables, ...) 827 v <- vect(u, geom="geometry") 828 v$geometry <- NULL 829 crs(v) <- crs(x) 830 v 831 } 832) 833 834 835#setMethod("warp", signature(x="SpatRaster", y="SpatRaster"), 836# function(x, y, method="bilinear", filename="", overwrite=FALSE, ...) { 837# opt <- spatOptions(filename, overwrite, ...) 838# x@ptr <- x@ptr$warp(y@ptr, "", method, opt) 839# messages(x, "warp") 840# } 841#) 842 843