Verwenden von Resample vs. Aggregate & Extend in R, um Raster mit übereinstimmender Auflösung und Ausdehnung zu erhalten

8

Ich habe zwei Raster unterschiedlicher Auflösung und Ausdehnung:

> res(Elevation)
[1] 0.002083333 0.002083333

> res(Ann_precip)
[1] 0.008333333 0.008333333 

> extent(Elevation)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.641806 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675

Meine Frage ist , damit diese beiden Raster übereinstimmende Auflösungen und Ausmaße haben, ist es besser:

A) Verwenden Sie die raster::aggregateFunktion

> 0.008333333/0.002083333
[1] 4

Elevation_res<-aggregate(Elevation, fact=4, fun=mean)

und die raster::extendFunktion

Elevation_res<-extend(Elevation_res, Ann_precip, values=NA)

(obwohl ich hier immer noch unterschiedliche, aber sehr ähnliche Ausmaße und Auflösungen bekomme):

> res(Elevation_res)
[1] 0.008333333 0.008333333

> res(Ann_precip)
[1] 0.008333333 0.008333333

> res(Elevation_res)==res(Ann_precip)
[1] FALSE FALSE

> extent(Elevation_res)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.635556 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675 

oder

b) Verwenden Sie die raster::resampleFunktion

Elevation_res<-resample(Elevation, Ann_precip, method="bilinear")

> res(Elevation_res)==res(Ann_precip)
[1] TRUE TRUE

> extent(Elevation_res)==extent(Ann_precip)
[1] TRUE

Ich frage das , weil ich in gelesen habe Wegmann et al (2016) (p110) (wenn ich das richtig verstehe) , dass stark Pixel Resampling Werte beeinflusst, und dass aggregate(), extend()und crop()sollte stattdessen verwendet werden. Kann ich davon ausgehen, dass die durch Resampling erzeugte Verzerrung hier minimal ist, da die Unterschiede in Auflösung und Ausmaß in meinem Fall recht gering sind?

M514
quelle

Antworten:

9

Überprüfen Sie die resampleFunktion des rasterPakets . Bei resampleVerwendung mit 'bilinearmethod ist die Ausgabe dieselbe wie aggregate:

if (!skipaggregate) {
    rres <- res(y) / res(x)
    resdif <- max(rres)
    if (resdif > 2) {
        ag <- pmax(1, floor(rres-1))
        if (max(ag) > 1) {
            if (method == 'bilinear') {
                x <- aggregate(x, ag, 'mean')
            } else {  
                x <- aggregate(x, ag, modal)
            }
        }
    }

Mit einem Beispiel:

library(raster)

r <- raster(nrow=4,ncol=8)

r2 <- raster(nrow=2,ncol=4)

r <- setValues(r,values = 1:32)

r_agg <- aggregate(r,fact=2,fun=mean)

r_resam <- resample(r,r2,method='bilinear')

values(r_resam) == values(r_agg)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

values(r_resam)
## [1]  5.5  7.5  9.5 11.5 21.5 23.5 25.5 27.5

Wenn Sie jedoch 'ngb'als Methode verwenden, ist das Ergebnis unterschiedlich (die Methode hängt von Ihren Daten ab, wenn sie kategorisch ist, müssen Sie sie verwenden 'ngb'):

r_resam2 <- resample(r,r2,method='ngb')

values(r_resam2)
## [1] 10 12 14 16 26 28 30 32

Und verlängern ändert nicht die Auflösung, nur das Ausmaß:

r
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

r_ext <- extend(r,r2,values=NA)

r_ext
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0

Und crop()da extend()wird sich die Auflösung nicht ändern.

aldo_tapia
quelle
@MarieL Entschuldigung, ist Umfang (ich habe das Wort falsch geschrieben)
aldo_tapia
bilinearEntspricht die Option meanals Funktion für aggregateund die ngbOption entspricht modal? Ich beziehe mich auf Fälle, in denen das Ziel eine gröbere Auflösung (größere Pixelgröße) als die zu transformierende Eingabe aufweist.
user3386170
1
@ user3386170 Ja, überprüfen Sie diese Zeilen: github.com/cran/raster/blob/…
aldo_tapia