Philippe Massicotte
Philippe Massicotte

Reputation: 1539

How to change a raster to a specific spatial resolution?

I would like to change the resolution of a raster. For example, let’s take this Landsat 7 images at ~ 30m resolution.

library(terra)
#> terra 1.5.21

f <- system.file("tif/L7_ETMs.tif", package = "stars")
r <- rast(f)

# 30m x 30m resolution
res(r)
#> [1] 28.5 28.5

plot(r, 1)

I can use aggregate() with an integer factor such as:

# 10 * 28.5
r2 <- aggregate(r, fact = 10)
res(r2)
#> [1] 285 285

plot(r2, 1)

My question is, how can I specify an exact resolution. For example, I would like to have a pixel resolution of 1.234 km (1234 m).

fact <- 1234 / 28.5
fact
#> [1] 43.29825

r3 <- aggregate(r, fact = fact)
res(r3)
#> [1] 1225.5 1225.5

plot(r3, 1)

The documentation says that fact should be an integer, so here it is flooring fact to 43.

res(aggregate(r, 43))
#> [1] 1225.5 1225.5

Any ways to have an exact resolution of 1234 m?

Created on 2022-04-28 by the reprex package (v2.0.1)

Upvotes: 5

Views: 4586

Answers (2)

a_PhD_researcher
a_PhD_researcher

Reputation: 59

I also propose (as described in the terra vignette) that you first aggregate the raster as close as possible and then resample. Resampling can be done e.g. using a template raster to guarantee correct crs, dimensions etc.

Upvotes: 1

Philippe Massicotte
Philippe Massicotte

Reputation: 1539

I came up with this solution which seems to give me what I need.

library(terra)
#> terra 1.5.21

f <- system.file("tif/L7_ETMs.tif", package = "stars")
r <- rast(f)

plot(r, 1)

r2 <- r
res(r2) <- 1234
r2 <- resample(r, r2)

plot(r2, 1)

res(r2)
#> [1] 1234 1234

Created on 2022-04-28 by the reprex package (v2.0.1)

Upvotes: 5

Related Questions