Re: [R-sig-Geo] stars analogous of raster::aggregate
It now also works for multi-band rasters (fixed in sf when installed from github): https://github.com/r-spatial/stars/issues/320 On 9/9/20 1:10 PM, Julian M. Burgos wrote: Thanks Edzer and Micha, this was very helpful. st_warp with use_gdal=TRUE worked like a charm. My best, Julian Edzer Pebesma writes: On 9/8/20 8:47 PM, Micha Silver wrote: On 08/09/2020 19:33, Julian M. Burgos wrote: Dear all, The raster package has the raster::aggregate function that can be used to reduce the resolution of a raster by aggregating cells by a specific factor. For example, this reduces the resolution of the L7_ETMs.tif raster by a factor of 10: library(raster) rst1 <- raster(system.file("tif/L7_ETMs.tif", package = "stars")) rst2 <- aggregate(rst1, fact = 10, fun = mean) res(rst1) [1] 28.5 28.5 res(rst2) [1] 285 285 I am trying to do the same thing with a stars object. The stars package has the stars::aggregate function, but for spatial aggregation it takes an object of class sf or sfc, so it is meant to be used for aggregation over polygons. I could do something like this: Probably st_warp() is what you want: l7_file = system.file("tif/L7_ETMs.tif", package = "stars") l7 = read_stars(l7_file) l7_lowres = st_warp(src = l7, cellsize = c(90, 90), crs = st_crs(l7)) stars::st_dimensions(l7) from to offset delta refsys point values x 1 349 288776 28.5 +proj=utm +zone=25 +south... FALSE NULL [x] y 1 352 9120761 -28.5 +proj=utm +zone=25 +south... FALSE NULL [y] band1 6 NANA NANA NULL stars::st_dimensions(l7_lowres) from to offset delta refsys point values x 1 111 28877690 +proj=utm +zone=25 +south...NA NULL [x] y 1 112 9120761 -90 +proj=utm +zone=25 +south...NA NULL [y] band1 6 NANA NANA NULL Yes; if you want to get similar behaviour as raster, choose a cell size that is an exact multiple of the origin's cell size, use_gdal = TRUE, and method = "average"; this currently seems to only work for single band rasters; along these lines: library(stars) # Loading required package: abind # Loading required package: sf # Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0 l7_file = system.file("tif/L7_ETMs.tif", package = "stars") l7 = read_stars(l7_file) (dest = st_as_stars(st_bbox(l7), dx = 90, dy = 90)) # stars object with 2 dimensions and 1 attribute # attribute(s): # values # Min. :0 # 1st Qu.:0 # Median :0 # Mean :0 # 3rd Qu.:0 # Max. :0 # dimension(s): # from to offset delta refsys point values x/y # x1 111 28877690 UTM Zone 25, Southern Hem...NA NULL [x] # y1 112 9120761 -90 UTM Zone 25, Southern Hem...NA NULL [y] (l7_lowres = st_warp(src = l7[,,,1], dest = dest, use_gdal = TRUE, method = "average")) # stars object with 2 dimensions and 1 attribute # attribute(s): # file14bb5c7321dc.tif # Min. : 56.81 # 1st Qu.: 68.75 # Median : 79.00 # Mean : 79.25 # 3rd Qu.: 88.62 # Max. :207.44 # dimension(s): # from to offset delta refsys point values x/y # x1 111 28877690 UTM Zone 25, Southern Hem... FALSE NULL [x] # y1 112 9120761 -90 UTM Zone 25, Southern Hem... FALSE NULL [y] -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Forcid.org%2F-0002-1128-1325data=02%7C01%7C%7Cb8b83838082f41ad457c08d854354350%7C8e105b94435e4303a61063620dbe162b%7C0%7C1%7C637351935026744294sdata=K5kMOHf6dka1eNJrVRZsgDe0UmxTEhBRU40C%2FPpRXVE%3Dreserved=0 ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-sig-geodata=02%7C01%7C%7Cb8b83838082f41ad457c08d854354350%7C8e105b94435e4303a61063620dbe162b%7C0%7C1%7C637351935026744294sdata=KwymhTSAHdcBDVffZHhp2xZ%2BQUzDKh%2B%2BN2DP1yLtGY4%3Dreserved=0 -- Julian Mariano Burgos, PhD Hafrannsóknastofnun, rannsókna- og ráðgjafarstofnun hafs og vatna/ Marine and Freshwater Research Institute Botnsjávarsviðs / Demersal Division Fornubúðir 5, IS-220 Hafnarfjörður, Iceland www.hafogvatn.is Sími/Telephone : +354-5752037 Netfang/Email: julian.bur...@hafogvatn.is -- Edzer Pebesma Institute for Geoinformatics Heisenbergstrasse 2, 48149 Muenster, Germany Phone: +49 251 8333081 ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Re: [R-sig-Geo] stars analogous of raster::aggregate
Thanks Edzer and Micha, this was very helpful. st_warp with use_gdal=TRUE worked like a charm. My best, Julian Edzer Pebesma writes: > On 9/8/20 8:47 PM, Micha Silver wrote: >> On 08/09/2020 19:33, Julian M. Burgos wrote: >>> Dear all, >>> >>> The raster package has the raster::aggregate function that can be used to >>> reduce the resolution of a raster by aggregating cells by a specific >>> factor. For example, this reduces the resolution of the L7_ETMs.tif raster >>> by a factor of 10: >>> >>> library(raster) >>> >>> rst1 <- raster(system.file("tif/L7_ETMs.tif", package = "stars")) >>> >>> rst2 <- aggregate(rst1, fact = 10, fun = mean) >>> res(rst1) >>> [1] 28.5 28.5 >>> res(rst2) >>> [1] 285 285 >>> >>> I am trying to do the same thing with a stars object. The stars package >>> has the stars::aggregate function, but for spatial aggregation it takes an >>> object of class sf or sfc, so it is meant to be used for aggregation over >>> polygons. I could do something like this: >> Probably st_warp() is what you want: >> >> l7_file = system.file("tif/L7_ETMs.tif", package = "stars") >> l7 = read_stars(l7_file) >> l7_lowres = st_warp(src = l7, cellsize = c(90, 90), crs = >> st_crs(l7)) >> >> stars::st_dimensions(l7) >> from to offset delta refsys point values >> x 1 349 288776 28.5 +proj=utm +zone=25 +south... FALSE NULL [x] >> y 1 352 9120761 -28.5 +proj=utm +zone=25 +south... FALSE NULL [y] >> band1 6 NANA NANA NULL >> >> stars::st_dimensions(l7_lowres) >> from to offset delta refsys point values >> x 1 111 28877690 +proj=utm +zone=25 +south...NA NULL [x] >> y 1 112 9120761 -90 +proj=utm +zone=25 +south...NA NULL [y] >> band1 6 NANA NANA NULL > > Yes; if you want to get similar behaviour as raster, choose a cell > size that is an exact multiple of the origin's cell size, use_gdal = > TRUE, and method = "average"; this currently seems to only work for > single band rasters; along these lines: > > library(stars) > # Loading required package: abind > # Loading required package: sf > # Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0 > l7_file = system.file("tif/L7_ETMs.tif", package = "stars") > l7 = read_stars(l7_file) > (dest = st_as_stars(st_bbox(l7), dx = 90, dy = 90)) > # stars object with 2 dimensions and 1 attribute > # attribute(s): > # values > # Min. :0 > # 1st Qu.:0 > # Median :0 > # Mean :0 > # 3rd Qu.:0 > # Max. :0 > # dimension(s): > # from to offset delta refsys point values x/y > # x1 111 28877690 UTM Zone 25, Southern Hem...NA NULL [x] > # y1 112 9120761 -90 UTM Zone 25, Southern Hem...NA NULL [y] > (l7_lowres = st_warp(src = l7[,,,1], dest = dest, use_gdal = TRUE, > method = "average")) > # stars object with 2 dimensions and 1 attribute > # attribute(s): > # file14bb5c7321dc.tif > # Min. : 56.81 > # 1st Qu.: 68.75 > # Median : 79.00 > # Mean : 79.25 > # 3rd Qu.: 88.62 > # Max. :207.44 > # dimension(s): > # from to offset delta refsys point values x/y > # x1 111 28877690 UTM Zone 25, Southern Hem... FALSE NULL [x] > # y1 112 9120761 -90 UTM Zone 25, Southern Hem... FALSE NULL [y] > >> >> -- Micha Silver >> Ben Gurion Univ. >> Sde Boker, Remote Sensing Lab >> cell: +972-523-665918 >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Forcid.org%2F-0002-1128-1325data=02%7C01%7C%7Cb8b83838082f41ad457c08d854354350%7C8e105b94435e4303a61063620dbe162b%7C0%7C1%7C637351935026744294sdata=K5kMOHf6dka1eNJrVRZsgDe0UmxTEhBRU40C%2FPpRXVE%3Dreserved=0 >> >> ___ >> R-sig-Geo mailing list >> R-sig-Geo@r-project.org >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-sig-geodata=02%7C01%7C%7Cb8b83838082f41ad457c08d854354350%7C8e105b94435e4303a61063620dbe162b%7C0%7C1%7C637351935026744294sdata=KwymhTSAHdcBDVffZHhp2xZ%2BQUzDKh%2B%2BN2DP1yLtGY4%3Dreserved=0 >> -- Julian Mariano Burgos, PhD Hafrannsóknastofnun, rannsókna- og ráðgjafarstofnun hafs og vatna/ Marine and Freshwater Research Institute Botnsjávarsviðs / Demersal Division Fornubúðir 5, IS-220 Hafnarfjörður, Iceland www.hafogvatn.is Sími/Telephone : +354-5752037 Netfang/Email: julian.bur...@hafogvatn.is ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Re: [R-sig-Geo] stars analogous of raster::aggregate
On 9/8/20 8:47 PM, Micha Silver wrote: On 08/09/2020 19:33, Julian M. Burgos wrote: Dear all, The raster package has the raster::aggregate function that can be used to reduce the resolution of a raster by aggregating cells by a specific factor. For example, this reduces the resolution of the L7_ETMs.tif raster by a factor of 10: library(raster) rst1 <- raster(system.file("tif/L7_ETMs.tif", package = "stars")) rst2 <- aggregate(rst1, fact = 10, fun = mean) res(rst1) [1] 28.5 28.5 res(rst2) [1] 285 285 I am trying to do the same thing with a stars object. The stars package has the stars::aggregate function, but for spatial aggregation it takes an object of class sf or sfc, so it is meant to be used for aggregation over polygons. I could do something like this: Probably st_warp() is what you want: l7_file = system.file("tif/L7_ETMs.tif", package = "stars") l7 = read_stars(l7_file) l7_lowres = st_warp(src = l7, cellsize = c(90, 90), crs = st_crs(l7)) stars::st_dimensions(l7) from to offset delta refsys point values x 1 349 288776 28.5 +proj=utm +zone=25 +south... FALSE NULL [x] y 1 352 9120761 -28.5 +proj=utm +zone=25 +south... FALSE NULL [y] band 1 6 NA NA NA NA NULL stars::st_dimensions(l7_lowres) from to offset delta refsys point values x 1 111 288776 90 +proj=utm +zone=25 +south... NA NULL [x] y 1 112 9120761 -90 +proj=utm +zone=25 +south... NA NULL [y] band 1 6 NA NA NA NA NULL Yes; if you want to get similar behaviour as raster, choose a cell size that is an exact multiple of the origin's cell size, use_gdal = TRUE, and method = "average"; this currently seems to only work for single band rasters; along these lines: library(stars) # Loading required package: abind # Loading required package: sf # Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 7.0.0 l7_file = system.file("tif/L7_ETMs.tif", package = "stars") l7 = read_stars(l7_file) (dest = st_as_stars(st_bbox(l7), dx = 90, dy = 90)) # stars object with 2 dimensions and 1 attribute # attribute(s): # values # Min. :0 # 1st Qu.:0 # Median :0 # Mean :0 # 3rd Qu.:0 # Max. :0 # dimension(s): # from to offset delta refsys point values x/y # x1 111 28877690 UTM Zone 25, Southern Hem...NA NULL [x] # y1 112 9120761 -90 UTM Zone 25, Southern Hem...NA NULL [y] (l7_lowres = st_warp(src = l7[,,,1], dest = dest, use_gdal = TRUE, method = "average")) # stars object with 2 dimensions and 1 attribute # attribute(s): # file14bb5c7321dc.tif # Min. : 56.81 # 1st Qu.: 68.75 # Median : 79.00 # Mean : 79.25 # 3rd Qu.: 88.62 # Max. :207.44 # dimension(s): # from to offset delta refsys point values x/y # x1 111 28877690 UTM Zone 25, Southern Hem... FALSE NULL [x] # y1 112 9120761 -90 UTM Zone 25, Southern Hem... FALSE NULL [y] -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 https://orcid.org/-0002-1128-1325 ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo -- Edzer Pebesma Institute for Geoinformatics Heisenbergstrasse 2, 48149 Muenster, Germany Phone: +49 251 8333081 ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Re: [R-sig-Geo] stars analogous of raster::aggregate
On 08/09/2020 19:33, Julian M. Burgos wrote: Dear all, The raster package has the raster::aggregate function that can be used to reduce the resolution of a raster by aggregating cells by a specific factor. For example, this reduces the resolution of the L7_ETMs.tif raster by a factor of 10: library(raster) rst1 <- raster(system.file("tif/L7_ETMs.tif", package = "stars")) rst2 <- aggregate(rst1, fact = 10, fun = mean) res(rst1) [1] 28.5 28.5 res(rst2) [1] 285 285 I am trying to do the same thing with a stars object. The stars package has the stars::aggregate function, but for spatial aggregation it takes an object of class sf or sfc, so it is meant to be used for aggregation over polygons. I could do something like this: Probably st_warp() is what you want: l7_file = system.file("tif/L7_ETMs.tif", package = "stars") l7 = read_stars(l7_file) l7_lowres = st_warp(src = "" cellsize = c(90, 90), crs = st_crs(l7)) stars::st_dimensions(l7) from to offset delta refsys point values x 1 349 288776 28.5 +proj=utm +zone=25 +south... FALSE NULL [x] y 1 352 9120761 -28.5 +proj=utm +zone=25 +south... FALSE NULL [y] band 1 6 NA NA NA NA NULL stars::st_dimensions(l7_lowres) from to offset delta refsys point values x 1 111 288776 90 +proj=utm +zone=25 +south... NA NULL [x] y 1 112 9120761 -90 +proj=utm +zone=25 +south... NA NULL [y] band 1 6 NA NA NA NA NULL -- Micha Silver Ben Gurion Univ. Sde Boker, Remote Sensing Lab cell: +972-523-665918 https://orcid.org/-0002-1128-1325 ___ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo