我对于在stackoverflow上提问以及或多或少是R的新手(以及一般的编程)都是新手,所以请耐心等待。
我有物种范围的ASCII文件,只显示存在。在深入研究互联网之后,我设法上传,转换为光栅,沿着所需的边界(在我的情况下,澳大利亚的海岸线)进行遮罩,并绘制它们以便我可以在未投影的地图上显示范围。
完成了这方面的定性方面,我需要进入定量方面;也就是说,我需要计算物种之间的同情程度。为了做到这一点,我需要首先计算重叠区域,这是我遇到问题的地方。这是我到目前为止所做的事情:
> d
class : RasterLayer
dimensions : 85, 270, 22950 (nrow, ncol, ncell)
resolution : 0.08, 0.08 (x, y)
extent : 119.4993, 141.0993, -36.65831, -29.85831 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 2, 2 (min, max)
> b
class : RasterLayer
dimensions : 140, 222, 31080 (nrow, ncol, ncell)
resolution : 0.08, 0.08 (x, y)
extent : 134.2456, 152.0056, -40.44268, -29.24268 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 2, 2 (min, max)
x<-resample(b,d,method="ngb")
y<-mask(x,d)
>y
class : RasterLayer
dimensions : 85, 270, 22950 (nrow, ncol, ncell)
resolution : 0.08, 0.08 (x, y)
extent : 119.4993, 141.0993, -36.65831, -29.85831 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 2, 2 (min, max)
y是掩盖在d上的d和b之间重叠的光栅(当我尝试掩盖b时,我得到错误,表示范围不同)。我该如何计算它的面积? raster包中的area()函数将其吐出:
area(y)
class : RasterLayer
dimensions : 85, 270, 22950 (nrow, ncol, ncell)
resolution : 0.08, 0.08 (x, y)
extent : 119.4993, 141.0993, -36.65831, -29.85831 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 63.65553, 68.75387 (min, max)
我不完全确定如何处理这件事。这是否是获得区域的良好/准确/正确的方式?为什么y和b之间的范围不同,但d和y之间的范围是相同的?此外,面积(y)的值的单位是多少?我认为这些单位并不重要,因为我最终将采用一个比例(通过将重叠除以更受限制的物种的范围),但我很想知道将来参考。
如果这是一个愚蠢的问题,我很抱歉。我感谢有人可能提出的任何意见。
答案 0 :(得分:4)
获得重叠的最佳方法是使用intersect
。您可以创建重叠值的块,并使用any
之类的命令来获取重叠范围,假设每个范围中的值为1或TRUE,范围外的0,FALSE或NA:
library(raster)
wgs84 <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
d <- raster()
extent(d) <- extent(119.4993, 141.0993, -36.65831, -29.85831)
res(d) <- c(0.08, 0.08)
projection(d) <- CRS(wgs84)
values(d) <- sample(c(NA, 1), ncell(d), replace=TRUE)
b <- raster()
extent(b) <- c(134.2456, 152.0056, -40.44268, -29.24268 )
res(b) <- c(0.08, 0.08)
projection(b) <- CRS(wgs84)
values(b) <- sample(c(NA, 1), ncell(b), replace=TRUE)
y <- intersect(b, d)
x <- brick(resample(b, y, method = "ngb"),resample(d, y, method = "ngb"))
x2 <- any(x, na.rm = TRUE)
library(maps)
map(regions = "australia")
image(d, add = TRUE, col = "blue")
image(b, add = TRUE, col = "green")
plot(extent(y), add = TRUE)
image(x2, add = TRUE, col = "red")
area
函数可以获得每个单元格的近似区域(为了获得真实区域,您应该将其重新投影到区域坐标系中)。要获得重叠的总近似区域,请添加所有单元格值,使用组合栅格的值索引区域总和:
sum(values(area(x2))[which(values(x2))])
# [1] 361407.1