Поскольку я только недавно начал использовать R для пространственного анализа и ни в коем случае не являюсь географом или специалистом по пространственным данным, у меня есть - как я полагаю, - относительно простой вопрос. Я пытаюсь вычислить площадь части сложенного растрового объекта, которая соответствует определенным условиям. В частности, из набора данных из морских глубин в южной Атлантике я сложил два растровых объекта (глубина и наклон), которые также идентичны в системе координат (WGS84) и положении x-y (широта-долгота). Из сложенного растрового объекта я хотел бы выделить часть, которая находится на глубине (скажем) от 1000 до 4000 м с уклоном более 10 градусов. Я хотел бы знать, какова протяженность площади в квадратных километрах, и я хотел бы добавить это к ранее построенной карте. Ниже приведен воспроизводимый пример:
# Raster object containing depth values
dpt <- raster(ncol=623, nrow=815, xmx=-31.72083, xmn=-38.50417,
ymn=-33.8875, ymx=-28.70417)
values(dpt) <- sample(-200:-5000, size=(nrow(dpt)*ncol(dpt)), replace=T)
# Raster object containing slope values
slp <- raster(ncol=623, nrow=815, xmx=-31.72083, xmn=-38.50417,
ymn=-33.8875, ymx=-28.70417)
values(slp) <- sample(0:30, size=(nrow(slp)*ncol(slp)), replace=T)
# Stack raster objects
stk <- stack(dpt,slp)
# Colour palette
colrs <- colorRampPalette(c("navyblue","dodgerblue3","cyan2","green2","darkgoldenrod1"))
# Plot raster map; does not look like ocean floor because of "sample"
plot(dpt, xlab="Longitude", ylab="Latitude", col=colrs(100), font.lab=2,
cex.lab=1.5, las=1)
# Create a blank copy of previous raster plot
selectAtt <- raster(dpt)
# Fill in cells where Attribute(s) meet(s) conditions
selectAtt[stk$layer.1 <= -1000 & stk$layer.1 >= -4000 & stk$layer.2 >=
10] <- 90
# Set object projection
projection(selectAtt) <- CRS("+proj=longlat +ellps=WGS84")
# Plot selection in previous raster
plot(selectAtt, col="red", add=TRUE, legend=F, proj4string=crswgs84)
Тогда у меня будет вопрос: какова площадь (в пределах общей площади) с глубиной (слой 1) и уклоном (слой 2), удовлетворяющей заданным условиям? В этом случае при высоте от -1000 до -4000 м и с углом наклона> 10 градусов.
Моя первоначальная мысль заключалась в следующем:
> area(selectAtt)
давая ответ:
class : RasterLayer
dimensions : 623, 815, 507745 (nrow, ncol, ncell)
resolution : 0.008323108, 0.008319957 (x, y)
extent : -38.50417, -31.72083, -33.8875, -28.70417 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0
data source : in memory
names : layer
values : 0.7083593, 0.7481782 (min, max)
Это основная информация об объекте Raster ... это вызвало у меня странное ощущение, что я не получаю ответа на поставленный вопрос. Может я задавал не правильный вопрос? Во всяком случае, он мне ничего не сказал о размерах площади, соответствующей моим условиям.
Тогда я сделал:
a <- stk[stk$layer.1 <= -1000 & stk$layer.1 >= -4000 & stk$layer.2 >= 10]
area(a, na.rm=T)
# This gives me the error message:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘area’ for signature ‘"matrix"’
Я попытался найти, что это на самом деле означает, и похоже, что это несоответствие между функциями S3 и S4, хотя я точно не знаю, что это такое.
Во всяком случае, я думал, что задаю относительно простой запрос к пространственным данным, а именно, какая область соответствует выделению на основе информации из нескольких слоев из растрового стека? Что мне здесь не хватает? Любая помощь приветствуется!