Я хочу обрезать растр высот, чтобы добавить его в растровый стек. Это просто, я делал это раньше плавно, добавляя растр экорегионов в тот же стек. А вот с возвышением просто не работает. Теперь здесь есть несколько вопросов, посвященных этой проблеме, и я много чего пробовал...
Прежде всего, нам нужно это:
library(rgdal)
library(raster)
Мой стек предикторы2:
#Downloading the stack
predictors2_full<-getData('worldclim', var='bio', res=10)
#Cropping it, I don' need the whole world
xmin=-120; xmax=-35; ymin=-60; ymax=35
limits <- c(xmin, xmax, ymin, ymax)
predictors2 <- crop(predictors2_full,limits)
Затем я скачал шейп-файл terr_ecorregions здесь: http://maps.tnc.org/files/shp/terr-ecoregions-TNC.zip
setwd("~/ORCHIDACEAE/Ecologicos/w2/layers/terr-ecoregions-TNC")
ecoreg = readOGR("tnc_terr_ecoregions.shp") # I've loaded...
ecoreg2 <- crop(ecoreg,extent(predictors2)) # cropped...
ecoreg2 <- rasterize(ecoreg2, predictors2) # made the shapefile a raster
predictors4<-addLayer(predictors2,elevation,ecoreg2) # and added the raster
# to my stack
С возвышением я просто не могу. Цифровая модель рельефа основана на GMTED2010, которую можно скачать здесь: http://edcintl.cr.usgs.gov/downloads/sciweb1/shared/topo/downloads/GMTED/Grid_ZipFiles/mn30_grd.zip
elevation<-raster("w001001.adf") #I've loaded
elevation<-crop(elevation,predictors2) # and cropped
Но высота получает немного другую степень вместо предикторов2:
> extent(elevation)
class : Extent
xmin : -120.0001
xmax : -35.00014
ymin : -60.00014
ymax : 34.99986
>
Я попытался сделать их равными во что бы то ни стало, о чем я читал в вопросах здесь ... Я пытался расширить, чтобы ymax высоты соответствовало высоте ymax Predictors2‹-extend(elevation,predictors2) # не работает, степень остается прежней
Я пробовал наоборот... чтобы степень предикторов2 соответствовала степени высоты... тоже ничего.
Но потом я прочитал это
Возможно, вам не захочется играть с setExtent() или extend() ‹- extend(), так как вы можете закончить с неправильными географическими координатами ваших растров — @ztl, 29 июня 2015 г.
И я попытался получить минимальный общий экстент моих растров, следуя ответу @zlt в другом вопросе об экстенте, сделав это
# Summing your rasters will only work where they are not NA
r123 = r1+r2+r3 # r123 has the minimal common extent
r1 = crop(r1, r123) # crop to that minimal extent
r2 = crop(r2, r123)
r3 = crop(r3, r123)
Для этого сначала мне пришлось установить разрешения:
res(elevation)<-res(predictors2) #fixing the resolutions... This one worked.
Но тогда r123 = r1+r2+r
не сработало:
> r123=elevation+ecoreg2+predictors2
Error in elevation + ecoreg2 : first Raster object has no values
Может ли кто-нибудь дать мне подсказку по этому поводу? Я действительно хотел бы добавить свою высоту в растр. Забавно то, что у меня есть еще один стек с именем предикторы1 с точно такой же экстентом высоты... И я смог обрезать экорег и добавить экорег как к предикторам1, так и к предикторам2... Почему я не могу просто сделать то же самое с высотой? Я новичок в этом мире, и у меня закончились идеи... Я ценю любые советы.
РЕДАКТИРОВАТЬ: решение, благодаря @Val
Я добрался до этого:
#Getting the factor to aggregate (rasters are multiples of each other)
res(ecoreg2)/res(elevation)
[1] 20 20 #The factor is 20
elevation2<-aggregate(elevation, fact=20)
elevation2 <- crop(elevation2,extent(predictors2))
#Finally adding the layer:
predictors2_eco<-addLayer(predictors2,elevation2,ecoreg)
Новая проблема, подумал...
Я не могу записать стек в geotiff
writeRaster(predictors2_eco, filename="cropped_predictors2_eco.tif", options="INTERLEAVE=BAND", overwrite=TRUE)
Error in .checkLevels(levs[[j]], value[[j]]) :
new raster attributes (factor values) should be in a data.frame (inside a list)
options="INTERLEAVE=BAND"
и используйтеbylayer = F
- person aldo_tapia   schedule 14.08.2017