Защелкивание растровых сеток в R

10

Я пытаюсь совместить две растровые сетки в R. После выравнивания я хотел бы иметь возможность добавлять их вместе.

Я попытался проверить, stackсработает ли создание :

grid_snap <- stack(habi_sdw, Pop_sdw)

И я получаю следующую ошибку:

Ошибка в CompareRaster (x): разная степень

Растровые сетки имеют следующие свойства:

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)

Использование alignExtent()в растровом пакете не является правильным подходом.

Нужно ли делать повторную выборку, потому что разрешения немного отличаются?

(0,00892857 x 0,00892857) против (0,008333333 против 0,008333333)

DI1
источник

Ответы:

15

Этот вопрос похож на: Обрезать растр за растром с извлечением данных и изменением разрешения , но под другим углом. Тем не менее, я думаю, что ответ, вероятно, тот же. Прежде всего, выберите, какой растр вы хотите быть определенным. Я повторю свой предыдущий ответ здесь для простоты:

Загрузите необходимые библиотеки:

library(raster)
library(rgdal)

Читать растры:

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

Resample к той же сетке:

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

Если требуется (для маскировки), установите экстенты для соответствия:

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

Удалены данные, которые выходят за пределы одного из растров (если нужно):

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

Теперь ваши растры совпадают.

MikeRSpencer
источник
0

Да. Вам нужно пересмотреть ваши растры, чтобы они имели одинаковый размер и одинаковую протяженность. R не справляется с этим сам по себе. Учитывая, что ни один из ваших растров не содержит полностью другой, вам следует рассмотреть возможность создания растра минимальной степени с вашим предпочтительным разрешением, а затем повторно выбрать и обрезать другие, чтобы соответствовать этому.

Миккель Лидхольм Расмуссен
источник
2
Пожалуйста, уточните свой ответ, например, предоставив пример кода.