我有一个河网以二进制形式掩盖的栅格图层。在计算编号时使用r.report在R(freq(raster))和QGIS中的像素的数量我发现两者都相同。但是,在以平方公里为单位的面积计算中,我发现了由(tapply(area(raster),raster [],sum))和QGIS计算得出的面积R的差异。但是,我的主要问题是为什么面积计算与像素数不匹配?栅格的分辨率为30秒(约1公里* 1公里),因此像素数必须等于以平方公里为单位的面积。栅格具有.grd格式的地理坐标系OGC:CRS84-WGS 84(CRS84)-地理。我还将其投影到用于QGIS的UTM,这会稍微增加面积,但差异不大。我还将在下面发布来自R和QGIS的报告,如果您也想看一下栅格,请点击下面的链接。我想要以面积为单位的值,所以我真的不知道是否应该将像素数转换为以平方公里为单位的面积。在这种情况下应该相等或使用R或QGIS的答案之一。
在QGIS区域的r.report中,以平方公里Vs像素为单位:0值:222,520 Vs 290,7671个值:81,653 Vs 106,934
在Rstudio区域,以平方公里对像素为单位:0值:222,068.53 Vs 290,7671个值:81,484.18 Vs 106,934
https://drive.google.com/drive/folders/1pBba0ejIc4t9ayKl36nyIo3vbgD4BKCT?usp=sharing
使用R raster
包,以经度/纬度栅格像元计算的面积为m2。我猜想在QGIS中您没有得到(而您得到的毫无意义的度数^ 2)。
还请注意,在赤道处,一个30秒的像元大约为860平方米,该面积朝着极点方向减小。
给定像元数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
即大约81000平方千米