我有一个栅格,我想将其值更改为每公顷像素值,其中面积来自像素的大小。因此,如果一个像素是 10 公顷,其当前值为 100 个任意单位,那么现在它将是 10 个任意单位/公顷。
栅格示例:
r <- rast(nrows=18, ncols=36)
v <- 1:ncell(r)
v[200:400] <- NA
values(r) <- v
此函数应采用栅格并乘以 1/ha。
px2ha <- function(raster) {
raster * 10000/prod(res(raster))
}
那么像这样使用 cellSize 怎么样?
r2/cellSize(r2, unit = 'ha')
我没有得到相同的答案。
r2 = project(x = r, y = 'epsg:2950') # Put raster in meters
plot((r2))
plot(px2ha(r2))
plot(r2/cellSize(r2, unit = 'ha'))
可以使用 cellSize 获取每面积(公顷)的像素值吗?
正确的做法是使用
terra::cellSize
。如果您的栅格数据是经度/纬度,则应使用它。注意值的范围。像元大小会发生变化。投影后也是如此。数字不一样是因为栅格会随着投影而发生根本性变化(这就是为什么您通常要避免该步骤)。
除非你使用
transform=FALSE
这与(请注意,你的公式是错误的)相同
但使用此数字并不正确,因为它假设没有失真。此数字在坐标 (0,0) 附近应该是正确的,但距离该位置越远,失真就越大。
cellSize
通过在计算面积之前将单元格转换回经度/纬度来纠正此问题。在这个例子中,失真很大,但这有点不现实。这是因为对加拿大部分地区的投影被应用于整个世界。假设您的实际数据仅在魁北克和/或安大略省东部,那里的失真会较小。
较旧的教科书和课程可能会建议您将经度/纬度数据投影到平面坐标参考系统来计算面积,但这反映了所用软件的局限性。这不是一个好方法,事实上应该采取相反的做法。