terra 中的 focus() 的结果

问题描述 投票:0回答:1

我正在尝试使用 terra 包计算 R 中栅格的焦点统计数据。我想要一个 3x3 移动窗口,并且想要计算最大栅格单元。完成此操作后,我将原始栅格和“焦点统计”栅格转换为数据框。

当我检查数据帧时,我发现焦点统计数据帧具有 NA 值,但原始栅格在这些像元编号处具有值。我不明白怎么会这样。如果 3x3 窗口只有一个值,那不是会设置为最大值吗?

这是我正在使用的栅格:

https://utoronto-my.sharepoint.com/:i:/g/personal/prp_patel_utoronto_ca/EQc9piU8muFLiaeobPIbCiUBwmuYGjnk-cyI3kKu95MPRg?e=Tk0GxU

这是我使用的代码:

temp.ras = terra::rast('forecast_NO2_Base00_20240527_H010.tif') * 1000000000

# set the extent
terra::ext(temp.ras) <- c(-39.58222, 26.02778, -31.905, 22.005)

# set the crs
crs(temp.ras) = "+proj=ob_tran +o_proj=longlat +o_lon_p=0 +o_lat_p=31.758312 +lon_0=-92.402969 +R=6371229 +no_defs"

# here we apply focal values
temp.ras.focal = focal(temp.ras, w=3, fun = 'max', na.policy='all')

temp.df.focal = as.data.frame(temp.ras.focal, na.rm = FALSE,
                              cell = TRUE)

temp.df = as.data.frame(temp.ras, na.rm = FALSE,
                        cell = TRUE)
r raster terra
1个回答
0
投票

如果我们数一下

NA
中有多少个
temp.df.focal

> sum(is.na(temp.df.focal$focal_max))

[1] 2652

我们看到它与栅格中边缘单元的数量相同:

> sum(dim(temp.ras)[1:2]*2) - 4

[1] 2652

这是因为

focal
NA
放入移动窗口超出栅格的像元中。要解决此问题,请将参数
expand = TRUE
添加到
focal
:

temp.ras.focal = focal(temp.ras, w=3, fun = 'max', na.policy='all', expand=TRUE)

现在生成的数据框不包含

NA
s:

> sum(is.na(temp.df.focal$focal_max))

[1] 0
© www.soinside.com 2019 - 2024. All rights reserved.