【发布时间】:2017-07-14 12:16:51
【问题描述】:
因为我最近才开始使用 R 进行空间分析,所以我是 无论如何,我都不是地理学家或空间数据专家,我有一个-什么 我认为这是一个相对简单的问题。我正在尝试计算 堆叠的光栅对象中满足特定条件的部分区域 状况。 更具体地说,来自深海的数据集 南大西洋,我堆叠了两个栅格对象(深度和坡度) 在坐标系 (WGS84) 和 x-y (Lat-Long) 中进一步相同 位置。从堆叠的栅格对象中,我想 提取位于(例如)1000 到 4000 m 深度之间的部分,使用 坡度超过 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)
那么,我的问题是:深度(layer.1)和坡度(layer.2)都满足给定条件的面积(在总面积内)是多少?在这种情况下,海拔在 -1000 和 -4000 m 之间,坡度角 >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 功能之间的不匹配,即使我不完全知道它们是什么。
无论如何,我以为我在对空间数据提出一个相对简单的查询,即基于栅格堆栈中多个图层的信息的选择对应的区域是多少?我在这里想念什么?任何帮助是极大的赞赏 !
【问题讨论】:
标签: r raster r-raster map-projections