我试图通过使用terra::extract()来抓取包裹中的平均NDVI值。我注意到terra::extract()中的数据框为我提供了NA值(事实上,我在4519个观测值中有2494个NA值)。我的NDVI栅格的空间分辨率约为0.5英尺(0.15米)。下面是我的代码。我还尝试了exactextractr::exact_extract(),但它没有给我与光栅::extract()相同的值。从我所读到的,exactextractr::exact_extract()占位于多边形内的单元的一部分。我想知道什么更好的使用,exactextractr::exact_extract()或terra::extract()。任何帮助/指导将是伟大的!
epa_fatparcels_sidewalk_adjacent <-
epa_parcels_sidewalk_adjacent %>%
st_transform(projection) %>%
st_buffer(330) %>%
st_transform(st_crs(epa_ndvi))
tictoc::tic()
epa_ndvi_sr<- terra::rast(epa_ndvi)
epa_fatparcels_sidewalk_adjacent_sv <- epa_yards_sidewalk_adjacent %>%
st_transform(st_crs(epa_ndvi)) %>%
#--- convert to a SpatVector object ---#
as(., "Spatial") %>% terra::vect()
epa_fatparcels_ndvi_v2 <- terra::extract(
epa_ndvi_sr,
epa_fatparcels_sidewalk_adjacent_sv,
fun="mean"
)
tictoc::toc() #took 17.92 sec elapsed
可以添加na.rm=TRUE
来忽略NA
的值
epa_fatparcels_ndvi_v2 <- terra::extract(
epa_ndvi_sr,
epa_fatparcels_sidewalk_adjacent_sv,
fun="mean", na.rm=TRUE
)
同样,这一行
as(., "Spatial") %>% terra::vect()
可以简化为
terra::vect()
对于exactrextactr
—如果细胞相对较少,则最重要。对于terra::extract
,您可以使用参数exact=TRUE
来获得相同的结果。
@MireilleVargas这可能与terra::extract()
使用的栅格内的列有关。同样的事情也发生在我身上,所以我通过在ArcMap中交叉引用进行了进一步的调查,发现它正在拉出"Count">列——计算每个特定值有多少像素——而不是"Value">列。我注意到,当通过rast
导入栅格时,以及将栅格层转换为SpatRast对象时,都会发生这种情况。看起来栅格包可能会自动检测值列,但在terra中,要切换从栅格中提取的活动类别,请使用activeCat()
函数。例如:activeCat(ndviRast) <- 2