Как замаскировать или обрезать растры в R? - PullRequest
0 голосов
/ 17 мая 2018

Я работаю с морским видом, который имеет мелкое распространение, и я хотел бы ограничить моделирование нескольких слоев ascii (например, SST, SSS) до порога глубины 50 м вдоль береговой линии, используя набор батиметрических данных (например, Bio-Oracle,MARSPEC или GEBCO).Я работаю в R. Я не хочу, чтобы батиметрия была частью модели.Кто-нибудь знает, как это сделать?

Это батиметрический растр (со значениями до глубины 100 м):

class       : RasterLayer 

dimensions  : 600, 420, 252000  (nrow, ncol, ncell)

resolution  : 0.08333333, 0.08333333  (x, y)

extent      : -20, 15, 10, 60  (xmin, xmax, ymin, ymax)

coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

data source : in memory

names       : bathy 

values      : -100, -1  (min, max)

И ЭТО СТИЛЬ РАСТЕРА

class       : RasterStack 

dimensions  : 600, 420, 252000, 4  (nrow, ncol, ncell, nlayers)

resolution  : 0.08333333, 0.08333333  (x, y)

extent      : -20, 15, 10, 60  (xmin, xmax, ymin, ymax)

coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

names       : SST.min, SST.max, SST.range, BO_dissox 

min values  :  -0.120,  10.940,     0.000,     4.052 

max values  :  26.640,  30.320,    21.460,     8.058 

Ура, Рита

Ответы [ 2 ]

0 голосов
/ 27 мая 2018
library(raster)
library(marmap)
library(rgdal)

# your coordinate reference setup 
this_crs <- crs("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
this_extent <- extent(-20, 15, 10, 60)

# a simple raster stack for example purpose
r <- raster(ncol=420, nrow=600, ext = this_extent, crs = this_crs)
values(r) <- (1:ncell(r))/100
r_SST <- sin(r)
r_SSS <- r + runif(ncell(r), 0, 100)^2
r_stack <- stack(r_SST, r_SSS)


# Get some sample bathymetric data to match your stack
# the marmaps package is handy but you could use your own
download_bathy <- getNOAA.bathy(-20, 15, 10, 60, res = 5, keep = TRUE)
bath_mask <- marmap::as.raster(download_bathy)
bath_mask <- projectRaster(from = bath_mask, to = r_stack)

# clip your raster stack to the desired bathymetric limits
bath_mask[bath_mask > 0 | bath_mask < -50] <- NA
clipped_stack <- mask(r_stack, bath_mask)

# check the result with a plot
plot(clipped_stack)

enter image description here

0 голосов
/ 27 мая 2018

Сначала используйте SDMPlay ::: delim.area, в котором первый слой стека используется для определения глубины 100 метров.Затем изолируйте слой батиметрии с подмножеством.Пользовательский растр ::: маска для разграничения всех растров в батиметрической области.И, наконец, удалите батиметрию из стека, растр ::: dropLayer.

Спасибо всем и особенно Гийом Шарлин!Рита

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...