Przyciąganie siatek rastrowych w R.

10

Próbuję wyrównać dwie siatki rastrowe w R. Po wyrównaniu chciałbym móc je dodać.

Próbowałem sprawdzić, czy wykonanie stackdziała:

grid_snap <- stack(habi_sdw, Pop_sdw)

I pojawia się następujący błąd:

Błąd w porównaniu Raster (x): inny zakres

Siatki rastrowe mają następujące właściwości:

show(habi_sdw)
# class       : RasterLayer 
# dimensions  : 9187, 9717, 89270079  (nrow, ncol, ncell)
# resolution  : 0.00892857, 0.00892857  (x, y)
# extent      : -28.83706, 57.92186, -36.02464, 46.00214  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs 
# data source : C:\Users\di39\AppData\Local\Temp\R_raster_di39\raster_tmp_2015-08-12_172902_12860_17067.grd 
# names       : layer 
# values      : 0, 333707.6  (min, max)

show(Pop_sdw)
# class       : RasterLayer 
# dimensions  : 10143, 8858, 89846694  (nrow, ncol, ncell)
# resolution  : 0.008333333, 0.008333333  (x, y)
# extent      : -17.53524, 56.28143, -46.97893, 37.54607  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
# data source : C:\Users\di39\AppData\Local\Temp\R_raster_di39\raster_tmp_2015-08-12_170421_12860_12760.grd 
# names       : pop2010ppp 
# values      : 0, 128925.9  (min, max)

Korzystanie alignExtent()z pakietu rastrowego wydaje się niewłaściwe.

Czy muszę ponownie próbkować, ponieważ rozdzielczości są nieco inne?

(0,00892857 x 0,00892857) vs (0,008333333 vs 0,008333333)

DI1
źródło

Odpowiedzi:

15

To pytanie jest podobne do: Przycinaj raster po rastrze z ekstrakcją danych i zmianą rozdzielczości , ale pochodzących z innej perspektywy. Myślę jednak, że odpowiedź jest prawdopodobnie taka sama. Po pierwsze, wybierz raster, który ma być ostateczny. Z łatwością powtórzę tutaj moją poprzednią odpowiedź:

Załaduj wymagane biblioteki:

library(raster)
library(rgdal)

Czytaj rastry:

r1 = raster("./dir/r1.tif")
r2 = raster("./dir/r2.tif")

Ponownie próbkuj do tej samej siatki:

r.new = resample(r1, r2, "bilinear")

W razie potrzeby (w celu maskowania) ustaw zakresy, aby pasowały:

ex = extent(r1)
r2 = crop(r2, ex)

Usunięto dane spoza jednego z rastrów (jeśli trzeba):

r.new = mask(r.new, r2)

Twoje rastry są teraz zgodne.

MikeRSpencer
źródło
0

Tak. Musisz ponownie próbkować rastry, aby miały ten sam rozmiar i ten sam zasięg. R sam sobie z tym nie radzi. Biorąc pod uwagę, że żaden z twoich rastrów nie zawiera w pełni drugiego, powinieneś rozważyć utworzenie rastra o minimalnym zasięgu z preferowaną rozdzielczością, a następnie ponownie próbkować i przycinać inne, aby dopasować to.

Mikkel Lydholm Rasmussen
źródło
2
Opracuj swoją odpowiedź, na przykład podając przykładowy kod.