Możesz użyć do tego celu projectRaster
, jeśli masz raster w jednej projekcji i rozdzielczości i potrzebujesz wyjścia w innej rozdzielczości i projekcji.
Argument from
jest rastrem wysokiej rozdzielczości, a argumentem to
jest raster o niskiej rozdzielczości. Należy wybrać właściwą metodę agregacji (tj bilinear
dla danych ciągłych i ngb
(najbliższy sąsiad) dla danych kategorycznych.
require(raster)
# Projection info
proj1 <- CRS("+proj=laea +lon_0=20 +lat_0=5 +ellps=sphere +unit=km +to_meter=1e3")
proj2 <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84")
# High res raster
r1km <- raster(nrows = 1515 , ncols = 2300 , xmn = -4000 , xmx = -1700 , ymn = -15 , ymx = 1500 , crs = proj1)
# Low res raster
r5km <- raster(nrows = 303 , ncols = 460 , xmn = -20 , xmx = -5 , ymn = 4 , ymx = 15 , crs = proj2)
# Set some values in high res raster
pts <- rasterToPoints(r1km)
values(r1km) <- 0.01*pts[,1] + sin(0.02*pi*pts[,2])
# Reproject using the attributes of the low res raster for output
out <- projectRaster(from = r1km , to = r5km , method = "bilinear")
# Plot - extent of second raster doesn't fully cover first so some data is missing
par(mfrow = c(1,2))
plot(r1km)
plot(out)
Jeśli dane wejściowe i wyjściowe są takie same, z wyjątkiem rozdzielczości ty można użyć agregat ...
# If same extent and resolution require use aggregate
r1 <- raster(system.file("external/rlogo.grd", package="raster"))
r5 <- aggregate(r1 , fact = 5 , method = "bilinear")
par(mfrow = c(1,2))
plot(r1)
plot(r5)
Czy trzeba interpolować na inną siatkę, czy co? Wszystkie pliki rastrowe, o ile wiem, definiują dane na jednolitej prostokątnej siatce, więc "używanie istniejącego pliku rastrowego" oznaczałoby po prostu "agregowanie lub interpolowanie z MxN do siatki LxK". –
Pytanie nie było jasne i nie miało przykładu. –