我有一个栅格图层,以二进制形式被河流网络遮罩。在计算编号时。R(freq(raster((和QGIS中使用r.report的像素,我在两者中发现了相同的数字。但是在以平方公里为单位的面积计算中,我发现面积R的差异由(tapply(area(raster(,raster[],sum((和QGIS计算。但是,我遇到的主要问题是为什么面积计算与像素数不相称?栅格的分辨率为 30 秒(约 1 公里*1 公里(,因此像素数必须近似等于以平方公里为单位的面积。栅格具有地理坐标系 OGC:CRS84 - WGS 84 (CRS84( - 地理坐标系,采用 .grd 格式。我还将其投影到QGIS的UTM,它略微增加了面积,但差异不大。 我还在下面发布了来自R和QGIS的报告,如果您也想查看光栅,请点击下面的链接。我想要面积的值,所以我真的不知道我是否应该将像素数转换为以平方公里为单位的面积,在这种情况下应该相等或使用 R 或 QGIS 的答案之一。
在 r.report 在 QGIS 区域中以平方公里与像素为单位: 0 值:222, 520 与 290,767 1 值:81,653 与 106,934
在 Rstudio 区域中的平方公里与像素: 0 值:222,068.53 与 290,767 1 值:81,484.18 与 106,934
https://drive.google.com/drive/folders/1pBba0ejIc4t9ayKl36nyIo3vbgD4BKCT?usp=sharing
使用 Rraster
时,对于经度/纬度栅格像元,包面积以 m2 为单位计算。另请注意,在赤道,一个 30 秒的电池约为 860 m2,并且该区域向极点减小。
给定n
像元的数量,以及栅格lat
的平均纬度,面积应该大约
n * 860 * cos(lat*pi/180)
一个示例,用于显示以raster
执行此操作的正确(内存安全(方法
#example data
library(raster)
r <- raster()
set.seed(67)
values(r) <- 0
r[sample(ncell(r), 1000)] <- 1
#select the cells that are not 0
rr <- reclassify(r, cbind(0,NA))
a <- area(rr)
aa <- mask(a, rr)
cellStats(aa, "sum")
----您的数据
r <- raster("raster.grd")
rr <- reclassify(r, cbind(0, NA))
a <- area(r)
aa <- mask(a, rr)
cellStats(aa, "sum")
#81484.18
也就是说,大约8.1万km2