栅格数据计算
三种格式的栅格数据都可以进行代数计算,包括简单的加减乘除(+、-、*、/), 逻辑 运算例如:>、>=、<、==、!、},以及一些其他代数运算例如:abs、round、ceiling、floor、trunc、sqrt、log、log10、exp、cos、sin、max、min、range、prod、sum、any、all.
需要注意的是,将栅格与数值进行混合运算时,需将栅格放在数值之前。
在对单Raster图层进行代数计算时,是对栅格中的数值进行计算,因此可以将其想象为一个数据框 data.frame.
比如
r <- raster(nrow = 3, ncol = 3)
values(r) <- 1:ncell(r)
s <- r+10 # raster 在前,数值在后
values(r)
values(s)
s[r] <- -0.5 #利用关系运算符进行筛选
s[!r] <- 5
s[s==5] <- 15
对多图层栅格对象进行代数计算时,这些图层必须保持相同的分辨率(resolution)和起点(origin)。如果从一个栅格文件的中心点(corner)出发以栅格分辨率为单位步幅沿x和y轴接近原点(0,0),那么 origin 是能找到的最接近原点的点。一般来说,这样的多图层文件其范围(extent)也是相同的,如果不同,运算返回的结果仅包含图层交集(intersection)。
此外,如果使用多个多图层文件进行计算,并且每个文件中包含的图层数不同,那么图层少的文件中的图层将会被重复使用。
文件1:a1, a2, a3, a4
文件2:b1, b2
返回结果文件:a1b1, a2b2, a3b1, a4b2
又比如
r <- raster(ncol=5, nrow=5)
r[] <- 1
s <- stack(r, r+1)
q <- stack(r, r+2, r+4, r+6)
x <- r + s + q x
x
对于一些汇总函数(summary function)例如:(min, max, mean, prod, sum, Median, cv, range, any, all),其返回结果为单图层。
a <- mean(r,s,10)
b <- sum(r,s)
st <- stack(r, s, a, b)
sst <- sum(st)
sst # 查看其属性
但如果想要得到每个图层的相应统计值(a single number summarizing the cell values of each layer)而不是返回一个图层文件(RasterLayer)应当使用 cellStats 函数,具体统计方法在其参数中指定。
cellStats(st, "sum")